Consistency LLM: convierte un LLM en un decodificador paralelo para mejorar la velocidad de inferencia hasta 3.5 veces
(hao-ai-lab.github.io)- Al generar respuestas largas, la decodificación autorregresiva (AR), que produce tokens uno por uno, es el principal cuello de botella de latencia; CLLM es un enfoque que busca reducirlo mediante decodificación paralela en bloques de n tokens
- Consistency Large Language Models (CLLMs) ajustan finamente un LLM preentrenado para aprender a mapear rápidamente cualquier estado de n tokens a un punto fijo equivalente al resultado de AR greedy
- Jacobi decoding converge teóricamente al mismo resultado que la generación AR greedy, pero en los LLM existentes solo ofrecía una mejora limitada de velocidad, de alrededor de 1.05 veces en promedio, por lo que era poco práctico
- En experimentos con Spider, Human-Eval, GSM8k y MT-bench, CLLM mostró mejoras de velocidad de generación de 2.4 a 3.4 veces, y fue evaluado como comparable o superior a técnicas de inferencia rápida como Medusa2 y Eagle
- Durante la inferencia no requiere componentes auxiliares del modelo ni cambios en la arquitectura del modelo objetivo, por lo que permite buscar mejoras de velocidad junto con eficiencia de memoria
El cuello de botella de decodificación al que apunta CLLM
- Los LLM se usan en diversos ámbitos, como programación, derecho y consejos de salud, pero en la etapa de inferencia normalmente generan tokens uno por uno mediante decodificación autorregresiva (AR)
- A medida que la respuesta se alarga, la generación token por token aumenta la latencia y extiende el tiempo de espera percibido por el usuario
- Los métodos existentes de inferencia rápida suelen requerir modificaciones de arquitectura, componentes auxiliares o un modelo borrador para generar varios tokens a la vez
Cómo funciona Jacobi decoding y sus limitaciones
- Jacobi decoding parte de iteraciones de punto fijo de Jacobi y Gauss-Seidel, y se demostró que en decodificación greedy es equivalente a la generación AR
- Convierte la generación secuencial en un sistema de n variables y n ecuaciones no lineales, lo que permite calcularlo en paralelo mediante iteraciones de Jacobi
- El flujo concreto es el siguiente
- A partir del prompt de entrada, se adivinan aleatoriamente los siguientes n tokens
- Se ingresan el prompt y la secuencia de n tokens al LLM para actualizarlos iterativamente
- Cuando la secuencia deja de cambiar, se alcanza un punto fijo (fixed point)
- La secuencia final de n tokens converge a la salida que habría generado la decodificación AR bajo la estrategia greedy
- La ruta desde la conjetura aleatoria inicial hasta el resultado final de generación AR se denomina trayectoria de Jacobi (Jacobi trajectory)
- El Jacobi decoding básico, en LLM reales, solo muestra una mejora limitada de velocidad de alrededor de 1.05 veces en promedio frente a la decodificación AR
- A los LLM entrenados de forma AR les cuesta predecir correctamente los tokens posteriores si hay errores en los tokens anteriores
- La mayoría de las iteraciones de Jacobi corrigen solo un token dentro de la secuencia de n tokens, lo que alarga la trayectoria
- Lookahead decoding y speculative decoding buscan reducir la ineficiencia de Jacobi decoding y de la decodificación AR tradicional, pero generan costos adicionales de memoria durante la inferencia
Objetivo de entrenamiento de Consistency LLM
- CLLM adapta un LLM preentrenado para que, desde cualquier punto de una trayectoria de Jacobi, avance de forma consistente hacia un punto fijo
- Este objetivo es similar al de consistency models, una técnica de aceleración para modelos de difusión
- Usando trayectorias de Jacobi recolectadas del modelo objetivo, entrena el modelo con una pérdida que fomenta la convergencia en un solo paso durante las iteraciones de Jacobi
- El entrenamiento para convertir cada modelo objetivo en un CLLM consta de dos partes
- Preparación de trayectorias de Jacobi
- Para cada prompt, se ejecuta Jacobi decoding secuencialmente en cada segmento cortado en bloques de n tokens
- La secuencia de respuesta completa queda formada por la concatenación de puntos fijos consecutivos
- Cada secuencia generada dentro de la trayectoria se calcula como un elemento de datos de entrenamiento
- Se usan cortes de n tokens para evitar la desaceleración de evaluar entradas largas completas en respuestas extensas
- Optimización conjunta de consistency loss y AR loss
- La consistency loss induce al modelo a predecir varios tokens a la vez
- La AR loss evita que CLLM se aleje de la distribución del LLM objetivo y ayuda a mantener la calidad de generación
- Preparación de trayectorias de Jacobi
Composición de la función de pérdida
- Se define el LLM objetivo como
py el CLLM comoqθ;qθse inicializa con los parámetros dep - La pérdida de consistencia global (GC loss) induce a CLLM a emitir el punto fijo
y*cuando se le da como entrada un estado arbitrarioyde la trayectoria de Jacobi - La pérdida de consistencia local (LC loss) alinea estados adyacentes
y(j)yy(j+1)de la trayectoria de Jacobi para que produzcan la misma salida - La distancia entre distribuciones
D(·||·)sigue las opciones discutidas en el método GKD, y en estos experimentos se usa principalmente forward KL - La AR loss aplica una pérdida autorregresiva tradicional basada en el resultado de generación
ldel LLM objetivop, para evitar que el modelo se aleje de la distribución del LLM objetivo - La pérdida total de entrenamiento se compone de la suma de la consistency loss y la AR loss ponderada por un peso
w
Configuración experimental y resultados
- Los experimentos incluyen tres tareas de dominios especializados y un benchmark de diálogo de dominio abierto
- Spider: text-to-SQL
- Human-Eval: completado de código Python
- GSM8k: matemáticas
- MT-bench: diálogo de dominio abierto
- Según la tarea, se usaron como modelos objetivo un coder LLM fine-tuned, Deepseek-coder-7B-instruct, LLaMA-2-7B y ABEL-7B-001
- Tanto el entrenamiento como la evaluación se realizaron en servidores NVIDIA A100 40GB
- En los dominios especializados, CLLM mostró la mayor mejora de velocidad frente a líneas base como el modelo objetivo original, Medusa2 y speculative decoding
- En MT-bench, un CLLM entrenado sobre LLaMA2-7B con el dataset ShareGPT logró, al combinarse con lookahead decoding, una mejora de velocidad similar a Medusa2
- La puntuación de MT-bench también fue comparable
- CLLM no requiere modificar la arquitectura original del modelo objetivo
- Al no tener componentes auxiliares, ofrece mayor eficiencia de memoria
Costo de entrenamiento
- El costo de ajuste fino de CLLM se presenta como de nivel intermedio
- LLaMA-7B logró una mejora de velocidad de 3.4 veces en el dataset Spider tras procesar solo alrededor de 1 millón de tokens
- En datasets grandes como CodeSearchNet-Python, se usó solo el 10% del dataset para generar trayectorias de Jacobi y se obtuvo una mejora de velocidad de alrededor de 2.5 veces
- El número total de tokens se estima con la siguiente fórmula
- Número promedio de trayectorias por prompt × longitud promedio de trayectoria × número de prompts
- Los costos de entrenamiento estimados por dataset son los siguientes
- Spider: 2 millones de tokens,
< 0.01%del costo de preentrenamiento - CodeSearchNet-Python: 100 millones de tokens,
~0.1%del costo de preentrenamiento - GSM8K: 10 millones de tokens,
~0.01%del costo de preentrenamiento - ShareGPT: 200 millones de tokens,
~0.2%del costo de preentrenamiento
- Spider: 2 millones de tokens,
Avance rápido y tokens estacionarios
- El LLM objetivo normalmente genera solo un token correcto en una iteración de Jacobi
- En CLLM aparece el fenómeno de avance rápido (fast forwarding), donde se predicen correctamente varios tokens consecutivos en una sola iteración de Jacobi
- En el LLM objetivo, incluso tokens generados correctamente antes pueden cambiar a tokens incorrectos en iteraciones posteriores
- CLLM muestra la capacidad de predecir por adelantado tokens correctos aunque haya errores en tokens anteriores, y de mantener esos tokens después
- A estos tokens se les llama tokens estacionarios (stationary tokens)
- El avance rápido y los tokens estacionarios hacen que el Jacobi decoding de CLLM converja más rápido y contribuyen a mejorar la velocidad de generación
Aprendizaje de patrones lingüísticos
- Se observó que CLLM adquiere mediante el entrenamiento el concepto lingüístico de colocaciones (collocations)
- Las colocaciones son secuencias de palabras o términos que aparecen juntos con más frecuencia de la que cabría esperar por azar
- Hay ejemplos de colocaciones tanto en lenguaje natural como en código
- Lenguaje natural:
talk to,remind … of … - Estructura verbo+sustantivo:
make a decision,catch a cold - Estructuras gramaticales por dominio:
SELECT … FROM …,if … else
- Lenguaje natural:
- El objetivo de consistency generation alienta a CLLM a inferir estas estructuras desde cualquier punto de la trayectoria de Jacobi y a predecir varias palabras simultáneamente para reducir los pasos de iteración
Materiales y código
- Más detalles están disponibles en el paper
- La implementación está disponible como base de código
- También se publicaron los checkpoints de CLLM
1 comentarios
Opiniones de Hacker News
Se parece a mi experiencia cuando tomé una clase de "dibujo libre" (sin clases teóricas)
Desde chico me decían que dibujaba bien, pero en realidad recuerdo que repetía dibujos detallados parecidos a otros que ya había hecho, o que me tomaba muchísimo tiempo hacerlos. Creo que, con suficiente tiempo y paciencia, cualquiera puede dibujar una escena de forma bastante convincente
En la clase no había reglas ni lecciones; cada quien llevaba los materiales que quería. Algunos llevaban tinta, otros lápices, yo llevé carboncillo, y lo único fijo era el tiempo entre las poses del modelo. Las primeras poses eran muy cortas, de más o menos 1 minuto, y luego se iban alargando hasta poses de 5 minutos; en cualquier momento podías romper el dibujo y volver a dibujar la misma pose
Los calentamientos cortos en realidad te obligaban a acertar proporciones y contornos al primer intento y, contrario a la idea común de que apurarse arruina todo, parece que al aprender o pulir una habilidad la prisa funciona como un factor de estrés que induce atención y aprendizaje
Antes de la clase probablemente podía hacer dibujos de calidad similar, pero estoy seguro de que me habrían tomado 5 a 10 veces más. Funcionó el hecho de que te obligaran a no darle vueltas y a sentir el costo de los errores por apurarte
Dicho eso, me da pena que llamen a esta técnica Consistency. El nombre encaja con mejoras de rendimiento, pero me parece menos adecuado para una mejora en la velocidad de inferencia; entiendo que significa "consistencia con el resultado que eventualmente habría salido si se generara un token a la vez". Preferiría llamarlo Proficiency LLM, esperando la misma salida pero sin la inhibición de llegar a tientas a la misma conclusión
En dibujo puedes fijar un tiempo permitido para cada intento e ir acortándolo. En CLLM, quizá podríamos hacer más difícil el proceso de entrenamiento haciendo que estados cada vez más lejanos en la trayectoria de Jacobi se mapeen al estado final
El término "consistency" viene de la similitud entre los consistency models de generación de imágenes por difusión y consistency LLM, y de que sus procesos de entrenamiento son parecidos
Los estudiantes entrábamos al laboratorio, recibíamos un espécimen, y la única instrucción era: "dibujen esto en 30 minutos. Empiecen"
No había cosas como "así se dibuja" ni "haz esto y no hagas aquello"; en la práctica era más bien: "no importa si te da ansiedad o si crees que no sabes dibujar. No pongas excusas, solo dibuja. Ahora"
Todos dibujamos y, durante todo el verano, a medida que llegaban más animales y repetíamos el mismo entrenamiento, todos mejoramos muchísimo
Lo que esa clase me enseñó es que cualquiera, realmente cualquiera, puede dibujar. La actitud colectiva cambió de "no sé si esto sea posible" a "claro que se puede. Es fácil, cotidiano y no es nada del otro mundo"
Es un enfoque que recomendaría mucho, y fue una de las clases más liberadoras y sorprendentes que tomé en la universidad
Los autores dicen que la decodificación Jacobi es equivalente a la decodificación autorregresiva voraz, pero en la práctica muchas veces uno quiere que la temperatura de muestreo sea mayor que 0 para evitar repeticiones y respuestas demasiado genéricas, ¿no?
No conozco nada de esta estrategia de decodificación, así que quizá me estoy perdiendo una forma simple de incorporar esto
En el contexto del entrenamiento de CLLM, en vez de mapear como objetivo de entrenamiento un punto fijo estático obtenido con decodificación Jacobi, lo llamamos punto fijo dinámico. Pueden seguir el repositorio de GitHub para ver los avances
Un paso de fine-tuning que entrene la trayectoria para acercarse a una completación de n tokens con las estadísticas deseadas todavía podría ser posible, pero no tengo claro cómo se podría reemplazar el paso de verificación de punto fijo. Tal vez podría ser algo como "comprobar si estaba por encima de este umbral fijo de verosimilitud"
Se siente como una optimización bastante riesgosa para hacer antes de entender realmente qué ocurre dentro de un LLM. Por ejemplo, quienes creen en una interpretación geométrica tendrían algo que decir, y en casos donde se usen tokens de "relleno" también podría ser perjudicial
Además, la suposición de que "uno arma una oración completa en la mente y luego la dice palabra por palabra" no es un hecho universal, sino solo una suposición, y me parece que simplifica demasiado la actividad que ocurre en nuestra mente. ¿De verdad tenemos un plan completo antes de hablar o escribir? Como budista, lo veo más cercano a una ilusión. Más aún, ¿qué pasa con los pensamientos simultáneos? ¿Pensamos linealmente a nivel de oraciones?
En cualquier caso, las matemáticas están bastante geniales
No tratemos a los LLM como algo mágico parecido a nuestra mente. Son simplemente otro programa que genera oraciones con sentido
Si le pides a alguien que explique un evento complejo del pasado con varias ramificaciones, la gente inserta rápidamente fragmentos, aclaraciones y ramales a mitad de una oración para abarcar todo el evento. No creo haber visto la hipótesis de granularidad a nivel de oración en un contexto científico serio
A veces, a mitad de una oración, termino en un callejón sin salida gramatical y tengo que cerrar la idea con una palabra o frase incómoda, o simplemente me detengo y vuelvo a decirlo desde el principio
Tampoco parece haber una razón clara por la que este fenómeno se rompa de repente a nivel de oración
Sorprende que no esté recibiendo más atención. Esto parece una ganancia clara en rendimiento de inferencia
El costo de este fine-tuning es razonable, alrededor del 0.01% del costo original de preentrenamiento. Las ganancias de rendimiento también parecen bastante consistentes
No conozco bien otro paper que haya sugerido que se puede mejorar tanto el rendimiento de inferencia de los LLM. ¿Hubo alguno antes?
Más aún bajo las condiciones de mantener al menos la calidad de salida, mejorar no solo la latencia de las consultas sino también el throughput total, no requerir cómputo adicional y tener una implementación relativamente práctica que no agregue mucha complejidad
Como se construye sobre el trabajo hecho en decodificación paralela/Jacobi, la intuición en sí podría verse como incremental. Los resultados anteriores también fueron necesarios e importantes, pero este resultado podría ser el que extrajo valor real de las posibilidades de la decodificación paralela
Así que este trabajo es realmente interesante y, hasta donde sé, ya se había intentado antes con menos éxito, pero todavía no está claro cuánto impacto real tendrá
Si se entrena con más datos, la velocidad aumenta aún más. Esto se debe a que el modelo puede aprender de colocaciones y frases que aparecen con más frecuencia
Para más detalles, se puede ver el paper, y también se confirma que la mejora de velocidad se satura a medida que crece el tamaño de los datos de entrenamiento
Al principio pensé que era un paper tipo Medusa, que usa más unembed heads para adivinar tokens posteriores, pero no tenía nada que ver
Es realmente impresionante. No usa parámetros adicionales, solo agrega una pérdida auxiliar de entrenamiento
Las técnicas de entrenamiento y de decodificación son completamente distintas y, como señalas, CLLM no necesita parámetros adicionales ni configurar máscaras de atención para verificación basada en árboles
Creo que pronto nos daremos cuenta de que no necesariamente hay que entrenar modelos
Lo que se necesita es buena indexación y muestreo
En esencia, en cierto nivel todos los LLM pueden verse como una base de datos del dataset, con una excelente interfaz de lenguaje natural encima
Ambos son simplemente distintas formas de explorar datos almacenados
Los LLM no exploran datos almacenados. Un LLM no es una base de datos de los datos de entrenamiento
https://news.ycombinator.com/item?id=40266791
¿Hay algún lugar donde alguien que no sabe mucho, como yo, pueda "preguntarle a un experto en IA"?
Por ejemplo, me gustaría preguntar por qué un LLM no responde de la misma forma determinista aunque reciba el mismo prompt
Quiero aprender esto, y tal vez debería seguir algún video de YouTube tipo "crear un LLM en 1 hora"
El proceso de selección puede tener varias perillas para manipular la respuesta. Si quieres hacerlo determinista y tienes acceso directo al software, según el software que uses, configurarlo como
top-k = 1otemperature = 0.0lo vuelve deterministaNormalmente la configuración por defecto no es determinista, porque si lo haces completamente determinista, la calidad de los resultados tiende a no ser muy buena
Un modelo LLM produce un vector de probabilidades sobre tokens, y el usuario del LLM usa números aleatorios para elegir un token de la lista de opciones más probables
Cuando ingresas un prompt, calcula la probabilidad de la siguiente palabra y repite ese proceso hasta terminar formando una oración. Las probabilidades aprendidas se basan en los datos de entrenamiento
Debido a este modelo probabilístico de base, no es 100% determinista. Además, modelos como ChatGPT agregan deliberadamente aleatoriedad a todo el proceso mediante un parámetro
temperatureSi quieres leer más, esta respuesta se basó en el siguiente paper: The Matrix: A Bayesian learning model for LLMs, https://arxiv.org/abs/2402.03175
Pero si ajustas la temperatura lo más bajo posible, la calidad de las respuestas tiende a caer mucho. El sistema queda atrapado en algún óptimo local y empieza a repetirse. Esas respuestas pueden ser "deterministas", pero no son buenas
https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-...
No hay almuerzo gratis, así que, a mi modo de ver, aquí también hay alguna pérdida de rutas
Por ejemplo, algunas trayectorias de Jacobi, por definición, excluyen rutas de mayor temperatura. Desde el punto de vista de recuperación de datos, esto podría incluso ser positivo, pero si quieres maximizar la creatividad, podría ser negativo
No sé si "no hay almuerzo gratis" siempre se aplica de una manera especialmente significativa. Algunas cosas no están en la frontera de Pareto
Me gustaría ver una explicación más detallada sobre la parte de que “los métodos de decodificación especulativa tienen un costo adicional de memoria durante la inferencia”.
En la decodificación especulativa, un modelo más pequeño genera “ramas” que pueden ser rápidas pero imprecisas, y luego un modelo grande verifica esas ramas. Pero la decodificación especulativa solo requiere la memoria correspondiente a un único token, y los tokens de las otras ramas simplemente se enmascaran durante la inferencia. Si tienes un tamaño de contexto de 1000 y unas 30 ramas de 5 tokens, el overhead de memoria es de 3%, algo despreciable. Si el tamaño del contexto es mucho menor que la cantidad de ramas, me pregunto si a un usuario de un LLM generativo con una ventana de contexto de apenas 50 tokens realmente le importará la velocidad de generación.
Además, la técnica de decodificación especulativa no está limitada al muestreo codicioso. Debe comportarse exactamente igual que el modelo original y muestrear según la probabilidad esperada. La mayor parte de la literatura sobre decodificación especulativa ya reporta mejoras de velocidad de 2.6 a 3.5 veces. Esta publicación del blog reporta una velocidad de generación 2.4 a 3.4 veces mayor, así que no sé si sea una mejora tan grande.
Arriba mencioné la decodificación especulativa, y las técnicas que comparó el autor parecen ser Medusa2 y Eagle, pero el problema central sigue siendo el mismo. Sea cual sea el método que se use para predecir tokens por adelantado, hay ciertos puntos en los que se necesita absolutamente el token anterior antes de predecir el siguiente. Esto no es un problema del modelo o de la técnica, sino de qué es matemáticamente posible. Si la distribución de probabilidad del quinto token siguiente depende en gran medida de los cuatro tokens anteriores, ¿cómo se pueden predecir 5 tokens de una sola vez? Da igual si es decodificación especulativa, decodificación de Jacobi o decodificación paralela de múltiples tokens.
Si este método solo soporta muestreo codicioso, me pregunto cuál es su ventaja. Más aún considerando que otras técnicas ya están logrando las mejoras de velocidad esperadas. Comparar la aceleración del muestreo codicioso con la aceleración del muestreo aleatorio es comparar peras con manzanas, y dudo que, incluso después de adaptar este método al muestreo aleatorio, se mantenga la misma mejora de velocidad debido al problema central mencionado arriba.
Puede que con consistency training hayan mostrado que, aunque haya predicciones erróneas en los tokens anteriores, el LLM puede predecir los siguientes n tokens.
Por otro lado, matemáticamente es cierto que p(x_t|x_1,...,x_t-1) depende de todos los elementos desde x_1 hasta x_t-1, pero en la práctica quizá para predecir x_t solo se necesiten x_1 hasta x_t-2, y la atención sobre x_t-1 sea mínima. Por eso se podría predecir x_t usando x_1 hasta x_t-2 y un x_t-1 impreciso.
Es un contenido interesante. Es una idea que mucha gente probablemente habría pensado, pero el artículo y la presentación estaban bien organizados.