En este documento de posición, analizo la premisa de que muchas mejoras potenciales del rendimiento quedan sobre la mesa porque a menudo no abordamos el potencial de la ejecución dinámica.
Supongo que primero necesito definir qué es ejecución dinámica en este contexto. Como muchos de ustedes sin duda saben, a menudo abordamos las optimizaciones de rendimiento analizando detenidamente el modelo en sí y lo que se puede hacer para que el procesamiento de este modelo sea más eficiente (lo que se puede medir en términos de menor latencia, mayor rendimiento). y/o ahorro de energía).
Estos métodos a menudo abordan el tamaño del modelo, por lo que buscamos formas de comprimir el modelo. Si el modelo es más pequeño, se mejoran los requisitos de uso de memoria y ancho de banda. Algunos métodos también abordan la escasez dentro del modelo, evitando así cálculos intrascendentes.
Aún así… sólo estamos mirando el modelo en sí.
Definitivamente esto es algo que queremos hacer, pero ¿existen oportunidades adicionales que podamos aprovechar para mejorar aún más el rendimiento? A menudo, pasamos por alto los métodos más intuitivos para los humanos que no se centran en el tamaño del modelo.
Difícil versus fácil
En la Figura 1, hay un ejemplo simple (quizás un poco simplista) sobre cómo clasificar entre puntos de datos rojos y azules. Sería realmente útil poder dibujar un límite de decisión para que sepamos que los puntos rojo y azul están en lados opuestos del límite tanto como sea posible. Un método consiste en hacer una regresión lineal mediante la cual ajustamos una línea recta lo mejor que podemos para separar los puntos de datos tanto como sea posible. La línea negra en negrita en la Figura 1 representa un límite potencial. Centrándose únicamente en la línea negra en negrita, puede ver que hay una cantidad sustancial de puntos que caen en el lado equivocado del límite, pero hace un trabajo decente la mayor parte del tiempo.
Si nos centramos en la línea curva, esto funciona mucho mejor, pero también es más difícil de calcular porque ya no es una ecuación lineal simple. Si queremos más precisión, claramente la curva es un límite de decisión mucho mejor que la línea negra.
Pero no descartemos todavía la línea negra. Ahora miremos las líneas paralelas verdes a cada lado del límite negro. Tenga en cuenta que el límite de decisión lineal es muy preciso para puntos fuera de la línea verde. Llamemos a estos puntos “Fáciles”.
De hecho, es 100% tan preciso como el límite curvo de los puntos fáciles. Los puntos que se encuentran dentro de las líneas verdes son “difíciles” y existe una clara ventaja al utilizar el límite de decisión más complejo para estos puntos.
Entonces… si podemos saber si los datos de entrada son difíciles o fáciles, podemos aplicar diferentes métodos para resolver el problema sin pérdida de precisión y con un claro ahorro de cálculos para los puntos fáciles.
Esto es muy intuitivo ya que así es exactamente como los humanos abordan los problemas. Si percibimos un problema como fácil, a menudo no pensamos demasiado en él y damos una respuesta rápidamente. Si percibimos que un problema es difícil, pensamos más en él y, a menudo, nos lleva más tiempo llegar a la respuesta.
Entonces, ¿podemos aplicar un enfoque similar a la IA?
Métodos de ejecución dinámica
En el escenario de ejecución dinámica, empleamos un conjunto de técnicas especializadas diseñadas para examinar la consulta específica en cuestión. Estas técnicas implican un examen exhaustivo de la estructura, el contenido y el contexto de la consulta con el objetivo de discernir si el problema que representa se puede abordar de una manera más directa.
Este enfoque refleja la forma en que los humanos abordan la resolución de problemas. Así como nosotros, como seres humanos, a menudo somos capaces de identificar problemas que son “fáciles” o “simples” y resolverlos con menos esfuerzo en comparación con los problemas “difíciles” o “complejos”, estas técnicas se esfuerzan por hacer lo mismo. Están diseñados para reconocer problemas más simples y resolverlos de manera más eficiente, ahorrando así tiempo y recursos computacionales.
Por eso nos referimos a estas técnicas como ejecución dinámica. El término “dinámico” significa la adaptabilidad y flexibilidad de este enfoque. A diferencia de los métodos estáticos que se adhieren rígidamente a una ruta predeterminada independientemente de la naturaleza del problema, la ejecución dinámica ajusta su estrategia en función del problema específico que encuentra, es decir, la oportunidad depende de los datos.
El objetivo de la ejecución dinámica no es optimizar el modelo en sí, sino optimizar el flujo de cálculo. En otras palabras, busca agilizar el proceso a través del cual el modelo interactúa con los datos. Al adaptar el flujo de cálculo a los datos presentados al modelo, la ejecución dinámica garantiza que los recursos computacionales del modelo se utilicen de la manera más eficiente posible.
En esencia, la ejecución dinámica consiste en hacer que el proceso de resolución de problemas sea lo más eficiente y eficaz posible adaptando la estrategia al problema en cuestión, de forma muy parecida a como los humanos abordan la resolución de problemas. Se trata de trabajar más inteligentemente, no más duro. Este enfoque no sólo ahorra recursos computacionales sino que también mejora la velocidad y precisión del proceso de resolución de problemas.
Salida anticipada
Esta técnica implica agregar salidas en varias etapas de una red neuronal profunda (DNN). La idea es permitir que la red finalice antes el proceso de inferencia para tareas más simples, ahorrando así recursos computacionales. Aprovecha la observación de que algunos ejemplos de prueba pueden ser más fáciles de predecir que otros (1), (2).
A continuación se muestra un ejemplo de la estrategia de salida anticipada en varios modelos de codificadores, incluidos BERT, ROBERTA y ALBERT.
Medimos las aceleraciones en las puntuaciones de pegamento para varios umbrales de entropía. La Figura 2 muestra un gráfico de estas puntuaciones y cómo caen con respecto al umbral de entropía. Las puntuaciones muestran el porcentaje de la puntuación inicial (es decir, sin Salida Temprana). Tenga en cuenta que podemos obtener una aceleración de 2 a 4 veces sin sacrificar mucha calidad.
Muestreo especulativo
Este método tiene como objetivo acelerar el proceso de inferencia calculando varios tokens candidatos a partir de un modelo preliminar más pequeño. Luego, estos tokens candidatos se evalúan en paralelo en el modelo objetivo completo (3), (4).
El muestreo especulativo es una técnica diseñada para acelerar el proceso de decodificación de grandes modelos lingüísticos (5), (6). El concepto detrás del muestreo especulativo se basa en la observación de que la latencia de la puntuación paralela de continuaciones cortas, generada por un modelo borrador más rápido pero menos poderoso, es comparable a la del muestreo de un solo token del modelo objetivo más grande. Este enfoque permite generar múltiples tokens a partir de cada llamada de transformador, lo que aumenta la velocidad del proceso de decodificación.
El proceso de muestreo especulativo implica dos modelos: un modelo preliminar más pequeño y más rápido y un modelo objetivo más grande y más lento. El borrador del modelo especula cuál será el resultado varios pasos hacia el futuro, mientras que el modelo objetivo determina cuántos de esos tokens debemos aceptar. El modelo borrador decodifica varios tokens de forma autorregresiva regular y se comparan los resultados de probabilidad del objetivo y los modelos borrador en la nueva secuencia predicha. En base a algunos criterios de rechazo, se determina cuántos de los tokens especulados queremos conservar. Si se rechaza un token, se vuelve a muestrear utilizando una combinación de las dos distribuciones y no se aceptan más tokens. Si se aceptan todos los tokens especulados, se puede muestrear un token final adicional a partir de la salida de probabilidad del modelo objetivo.
En términos de aumento del rendimiento, el muestreo especulativo ha mostrado mejoras significativas. Por ejemplo, se comparó con Chinchilla, un modelo de lenguaje de 70 mil millones de parámetros, logrando una velocidad de decodificación de 2 a 2,5 veces en una configuración distribuida, sin comprometer la calidad de la muestra ni realizar modificaciones en el modelo en sí. Otro ejemplo es la aplicación de la decodificación especulativa a Whisper, un modelo de transcripción de voz de propósito general, que resultó en una aceleración del doble en el rendimiento de inferencia (7), (8). Tenga en cuenta que el muestreo especulativo se puede utilizar para aumentar el rendimiento de inferencia de la CPU, pero el aumento probablemente será menor (normalmente alrededor de 1,5 veces).
En conclusión, el muestreo especulativo es una técnica prometedora que aprovecha las fortalezas de un modelo borrador y de destino para acelerar el proceso de decodificación de modelos de lenguaje grandes. Ofrece un aumento significativo del rendimiento, lo que la convierte en una herramienta valiosa en el campo del procesamiento del lenguaje natural. Sin embargo, es importante tener en cuenta que el aumento de rendimiento real puede variar según los modelos específicos y la configuración utilizada.
ahorrador de pasos
Este es un método que también podría denominarse detención temprana para la generación de difusión, que utiliza un modelo innovador de PNL específicamente ajustado para determinar la cantidad mínima de pasos de eliminación de ruido necesarios para cualquier mensaje de texto determinado. Este modelo avanzado sirve como una herramienta en tiempo real que recomienda la cantidad ideal de pasos de eliminación de ruido para generar imágenes de alta calidad de manera eficiente. Está diseñado para funcionar perfectamente con el modelo Diffusion, garantizando que las imágenes se produzcan con una calidad superior en el menor tiempo posible. (9)
Los modelos de difusión mejoran iterativamente una señal de ruido aleatorio hasta que se parece mucho a la distribución de datos objetivo (10). A la hora de generar contenidos visuales como imágenes o vídeos, los modelos de difusión han demostrado un realismo significativo (11). Por ejemplo, los modelos de difusión de video y SinFusion representan instancias de modelos de difusión utilizados en la síntesis de video (12)(13). Más recientemente, ha habido una creciente atención hacia modelos como Sora de OpenAI; sin embargo, este modelo actualmente no está disponible públicamente debido a su naturaleza patentada.
El desempeño en modelos de difusión implica una gran cantidad de iteraciones para recuperar imágenes o videos del ruido gaussiano (14). Este proceso se llama eliminación de ruido y se entrena en un número específico de iteraciones de eliminación de ruido. El número de iteraciones en este procedimiento de muestreo es un factor clave en la calidad de los datos generados, medidos por métricas como FID.
La inferencia de difusión del espacio latente utiliza iteraciones en el espacio de características, y el rendimiento se ve afectado por el gasto de muchas iteraciones necesarias para obtener resultados de calidad. Varias técnicas, como la transformación de parches y los modelos de difusión basados en transformadores (15), mejoran la eficiencia de cada iteración.
StepSaver recomienda dinámicamente pasos de eliminación de ruido significativamente más bajos, lo cual es fundamental para abordar el problema del muestreo lento de los modelos de difusión estable durante la generación de imágenes (9). Los pasos recomendados también garantizan una mejor calidad de imagen. La Figura 3 muestra que las imágenes generadas mediante pasos dinámicos dan como resultado una mejora del rendimiento 3 veces mayor y una calidad de imagen similar en comparación con los 100 pasos estáticos.
Enrutamiento LLM
La ejecución dinámica no se limita sólo a optimizar una tarea específica (por ejemplo, generar una secuencia de texto). Podemos dar un paso por encima del LLM y observar todo el proceso. Supongamos que estamos ejecutando un LLM enorme en nuestro centro de datos (o OpenAI nos factura por la generación de tokens a través de su API), ¿podemos optimizar las llamadas a LLM para seleccionar el mejor LLM para el trabajo (y el “mejor”? podría ser una función del costo de generación del token). Las indicaciones complicadas pueden requerir un LLM más costoso, pero muchas indicaciones se pueden manejar con un costo mucho menor en un LLM más simple (o incluso localmente en su computadora portátil). Entonces, si podemos enrutar nuestro mensaje al destino apropiado, entonces podemos optimizar nuestras tareas en función de varios criterios.
El enrutamiento es una forma de clasificación en la que se utiliza el mensaje para determinar el mejor modelo. Luego, el mensaje se dirige a este modelo. En el mejor de los casos, podemos utilizar diferentes criterios para determinar el modelo más eficaz en términos de coste y precisión. En muchos sentidos, el enrutamiento es una forma de ejecución dinámica realizada a nivel de canalización donde muchas de las otras optimizaciones en las que nos centramos en este documento se realizan para hacer que cada LLM sea más eficiente. Por ejemplo, RouteLLM es un marco de código abierto para dar servicio a enrutadores LLM y proporciona varios mecanismos de referencia, como la factorización matricial. (16) En este estudio, los investigadores de LMSys pudieron ahorrar el 85 % de los costos y al mismo tiempo mantener una precisión del 95 %.
Conclusión
Ciertamente, esto no pretendía ser un estudio exhaustivo de todos los métodos de ejecución dinámica, pero debería proporcionar a los científicos e ingenieros de datos la motivación para encontrar mejoras adicionales en el rendimiento y ahorros de costos a partir de las características de los datos y no centrarse únicamente en métodos basados en modelos. . La ejecución dinámica brinda esta oportunidad y no interfiere ni obstaculiza los esfuerzos de optimización tradicionales basados en modelos.
A menos que se indique lo contrario, todas las imágenes son del autor.