La creciente demanda de inferencia de modelos de aprendizaje automático (ML) en el dispositivo (para dispositivos móviles, tabletas, etc.) está impulsada por el aumento de las aplicaciones informáticas intensivas, la necesidad de mantener ciertos datos en el dispositivo por razones de privacidad y seguridad, y el deseo de proporcionar servicios cuando una conexión de red puede no estar disponible. Sin embargo, la inferencia en el dispositivo trae consigo una variedad de desafíos que van desde el modelado hasta los requisitos de soporte de la plataforma. Estos desafíos se relacionan con cómo se diseñan las diferentes arquitecturas para optimizar la memoria y el cómputo mientras se intenta mantener la calidad del modelo. Desde la perspectiva de la plataforma, el problema es identificar las operaciones y construir sobre ellas de una manera que se generalice bien en diferentes casos de uso del producto.
En investigaciones anteriores, combinamos una técnica novedosa para generar incrustaciones (llamadas incrustaciones basadas en proyección) con arquitecturas eficientes como QRNN (pQRNN) y demostramos que son adecuadas para una serie de problemas de clasificación. Complementar esto con técnicas de destilación proporciona un impulso adicional en la calidad de principio a fin. Si bien este es un enfoque efectivo, no es escalable a vocabularios más grandes y ricos (es decir, todos los Unicode o tokens de palabras posibles que se pueden introducir en el modelo). Además, el resultado de la operación de proyección en sí no contiene pesos entrenables para entrenar previamente el modelo.
Los modelos sin token presentados en ByT5 son un buen punto de partida para el modelado en el dispositivo que puede abordar problemas de escalabilidad y entrenamiento previo sin aumentar el tamaño del modelo. Esto es posible porque estos enfoques tratan la entrada de texto como un flujo de bytes (cada byte tiene un valor entre 0 y 255), lo que puede reducir el tamaño del vocabulario para las tablas incrustadas de ~30 000 a 256. Aunque ByT5 es una alternativa convincente para el modelado en el dispositivo, al pasar de la representación a nivel de palabra a la representación de flujo de bytes, las longitudes de secuencia aumentan linealmente; con una longitud de palabra promedio de cuatro caracteres y un solo carácter con hasta cuatro bytes, la longitud de la secuencia de bytes aumenta proporcionalmente a la longitud de la palabra. Esto puede resultar en un aumento significativo en la latencia de inferencia y los costos computacionales.
Abordamos este problema desarrollando y lanzando tres nuevos modelos de secuencias de flujo de bytes para la biblioteca SeqFlowLite (ByteQRNN, ByteTransformer y ByteFunnelTransformer), todos los cuales pueden entrenarse previamente con datos no supervisados y ajustarse para tareas específicas. Estos modelos aprovechan las innovaciones recientes introducidas por Charformer, incluido un modelo basado en un transformador de caracteres rápido que utiliza un enfoque de tokenización de subpalabras basado en gradientes (GBST) para trabajar directamente en el nivel de byte, y un enfoque de tokenización «suave» que nos permite aprender límites de tokens y reducir la longitud de las secuencias. En esta publicación, nos enfocamos en ByteQRNN y mostramos que el rendimiento de un modelo ByteQRNN previamente entrenado es comparable a BERT, a pesar de ser 300 veces más pequeño.
Arquitectura del modelo de secuencia
Aprovechamos pQRNN, ByT5 y Charformer junto con las optimizaciones de la plataforma, como la cuantificación durante el entrenamiento (seguimiento de los valores flotantes mínimos y máximos para las activaciones del modelo y los pesos para cuantificar el modelo de inferencia), lo que reduce los tamaños del modelo en una cuarta parte para desarrollar un punto a punto. Modelo final llamado ByteQRNN (ver más abajo). Primero, usamos una operación ByteSplitter para dividir la cadena de entrada en un flujo de bytes y enviarla a una tabla de incrustación más pequeña que tiene un tamaño de vocabulario de 259 (256 + 3 metatokens adicionales).
La salida de la capa de incrustación se alimenta a la capa GBST, que presenta cuantificación en entrenamiento y combina representaciones a nivel de byte con la eficiencia de tokenización de subpalabras al tiempo que permite el aprendizaje de extremo a extremo de subpalabras latentes. Tokenizamos «suavemente» las secuencias de flujo de bytes enumerando y combinando la longitud de cada bloque de subpalabras con valores (calculados con una capa densa cuantificada) en cada posición de token progresiva (es decir, en posiciones de token que se seleccionan a intervalos regulares). A continuación, reducimos la muestra del flujo de bytes a una longitud de secuencia manejable y la alimentamos a la capa del codificador.
La salida de la capa GBST se puede muestrear a una longitud de secuencia más pequeña para un cálculo eficiente del codificador, o se puede usar con un codificador como Funnel Transformer, que resume la longitud de la consulta y reduce el cálculo de autoatención para crear el modelo ByteFunnelTransformer. El codificador en el modelo de extremo a extremo se puede reemplazar por cualquier otra capa de codificador, p. B. Utilice el Transformador de la biblioteca SeqFlowLite para crear un modelo ByteTransformer.
![]() |
Un diagrama de un modelo de secuencia genérico de extremo a extremo con entrada de flujo de bytes. El modelo ByteQRNN utiliza un codificador QRNN de la biblioteca SeqFlowLite. |
Además de las incrustaciones de entrada (es decir, la salida de la capa de incrustación descrita anteriormente), vamos un paso más allá para crear un modelo efectivo secuencia por secuencia (seq2seq). Hacemos esto tomando ByteQRNN y agregando un modelo de decodificador basado en transformador junto con una búsqueda de rayos cuantificada (o exploración de árboles) que lo acompaña. El módulo de búsqueda de rayos cuantificados reduce la latencia de inferencia en la generación de salidas del decodificador al calcular los rayos más probables (es decir, las posibles secuencias de salida) usando la suma logarítmica de las probabilidades anteriores y actuales y devolviendo los rayos superiores resultantes. Aquí, el sistema utiliza un formato entero de 8 bits (uint8) más eficiente en comparación con un formato típico de punto flotante de precisión simple (float32).
El modelo de decodificador-transformador utiliza una subcapa de atención fusionada (MAtt) para reducir la complejidad de la autoconciencia del decodificador de cuadrático a lineal, lo que reduce la latencia de extremo a extremo. Para cada paso de decodificación, MAtt utiliza un caché de tamaño fijo para la autoconciencia del decodificador en comparación con el tamaño de caché creciente de un decodificador de transformador tradicional. La siguiente figura ilustra cómo el motor de búsqueda de rayos interactúa con la capa del decodificador para generar tokens de salida en el dispositivo utilizando un dispositivo de borde (por ejemplo, teléfonos móviles, tabletas, etc.).
![]() |
Una comparación de la decodificación del servidor en la nube y la implementación en el dispositivo (dispositivo de borde). Izquierda: La búsqueda de haz del servidor en la nube utiliza un modelo de decodificador de autoconciencia de tiempo cuadrático basado en transformador en Float32, que tiene un tamaño de caché creciente para cada paso de decodificación. Derecha: La implementación del dispositivo perimetral utiliza un módulo de búsqueda de rayos cuantificado junto con un caché de tamaño fijo y un cálculo de autoconciencia de tiempo lineal. |
Evaluación
Después de desarrollar ByteQRNN, evaluamos su desempeño en el conjunto de datos civil_comments usando la métrica del área bajo la curva (AUC) y lo comparamos con un ByteQRNN y BERT previamente entrenados (ver a continuación). Mostramos que el ByteQRNN ajustado mejora la calidad general y acerca su rendimiento a los modelos BERT a pesar de ser 300 veces más pequeño. Dado que los modelos SeqFlowLite admiten la cuantificación durante el entrenamiento, lo que reduce el tamaño del modelo en una cuarta parte, los modelos resultantes se adaptan bien a dispositivos de bajo consumo. Seleccionamos fuentes de datos multilingües relacionadas con la tarea de entrenar previamente los modelos BERT y Bytestream para lograr el mejor rendimiento posible.
![]() |
Comparación de ByteQRNN con ByteQRNN y BERT ajustados en el conjunto de datos civil_comments. |
Conclusión
Siguiendo nuestro trabajo anterior con pQRNN, estamos evaluando modelos de flujo de bytes para uso en dispositivos para permitir el entrenamiento previo y, por lo tanto, mejorar el rendimiento del modelo para la entrega en dispositivos. Presentamos una evaluación de ByteQRNN con y sin entrenamiento previo y mostramos que el rendimiento del ByteQRNN preentrenado es comparable a BERT a pesar de ser 300 veces más pequeño. Además de ByteQRNN, también estamos lanzando ByteTransformer y ByteFunnelTransformer, dos modelos que usan diferentes codificadores, junto con el modelo de decodificador de atención combinado y el controlador de búsqueda de rayos para ejecutar la inferencia a través de la biblioteca SeqFlowLite. Esperamos que estos modelos proporcionen recursos valiosos para investigadores y desarrolladores de productos para futuras implementaciones en dispositivos.
Gracias
Nos gustaría agradecer a Khoa Trinh, Jeongwoo Ko, Peter Young y Yicheng Fan por su ayuda en el código abierto y la evaluación del modelo. Gracias a Prabhu Kaliamoorthi por toda la lluvia de ideas y la generación de ideas. Muchas gracias a Vinh Tran, Jai Gupta y Yi Tay por su ayuda en el entrenamiento previo de los modelos de flujo de bytes. Gracias a Ruoxin Sang, Haoyu Zhang, Ce Zheng, Chuanhao Zhuge y Jieying Luo por ayudar con la capacitación de TPU. Muchas gracias a Erik Vee, Ravi Kumar y al liderazgo de Learn2Compress por patrocinar el proyecto y por su apoyo y aliento. Finalmente, nos gustaría agradecer a Tom Small por el personaje animado utilizado en esta publicación.