Decodificación especulativa : cómo obtener una inferencia 3× más rápida con cualquier LLM

El decodificado especulativo es una técnica que acelera la generación de texto por los grandes modelos de lenguaje, sin modificar el modelo ni degradar la calidad de las respuestas. Presentada como capaz de acelerar la inferencia de 2 a 3 veces, se basa en una estrategia de generación más inteligente más que en un cambio de arquitectura.

  • La decodificación especulativa acelera la generación de texto sin modificar el modelo.
  • Un modelo pequeño propone varios tokens que el modelo grande verifica en una sola pasada.
  • La aceleración alcanza de 2× a 3× según la tasa de aceptación de los candidatos.
  • Variantes como Medusa, Eagle y Prompt Lookup Decoding evitan usar un modelo de borrador separado.

El cuello de botella de la memoria

Cada vez que un usuario envía un mensaje a un chatbot, el modelo genera su respuesta token por token, es decir fragmento de texto por fragmento de texto. Este funcionamiento se vuelve un obstáculo a medida que los modelos crecen, en particular para los asistentes de programación, los servicios de atención al cliente o los agentes en tiempo real, que exigen una respuesta casi inmediata.

El obstáculo no proviene principalmente de la potencia de cálculo. GPUs como las NVIDIA H100 son muy rápidas para los cálculos matriciales. El problema radica en que los miles de millones de parámetros del modelo, almacenados en memoria, deben transferirse al procesador antes de la generación de cada token. Las unidades de cálculo permanecen entonces mayormente inactivas. Los ingenieros hablan de un sistema limitado por el ancho de banda de memoria: añadir más potencia de cálculo no acelera notablemente las cosas.

Proponer, luego verificar

El principio consiste en generar varios tokens candidatos de una sola vez, y luego verificarlos en paralelo. El sistema se basa en dos modelos. Un modelo pequeño llamado de borrador (draft model) produce rápidamente una secuencia de candidatos, generalmente de cuatro a ocho tokens. Un modelo objetivo (target model), más grande y de mejor calidad, evalúa el conjunto en una sola pasada. Como las GPU están diseñadas para el cálculo paralelo, procesar un lote de tokens no lleva mucho más tiempo que procesar un solo token.

Para cada candidato, el modelo objetivo compara su propia probabilidad con la que le asignó el borrador. Si el modelo objetivo está al menos tan confiado, el token es aceptado. En caso contrario, lo es con una probabilidad que disminuye a medida que la diferencia aumenta. Un token rechazado es reemplazado por un token extraído de una distribución ajustada, y luego el bucle se repite. Según la presentación del método, este proceso estadístico garantiza que la salida sigue exactamente la misma distribución de probabilidad que si el modelo objetivo hubiera generado cada token por sí solo.

En el mejor caso, todos los candidatos son aceptados y el modelo objetivo añade un token adicional, es decir de cinco a nueve tokens por el coste de una pasada del modelo objetivo. En el peor caso, el primer candidato es rechazado, lo que añade una ligera sobrecarga, ya que el tiempo de generación del borrador sigue siendo necesario. Un par de modelos mal emparejados puede, por tanto, ralentizar ligeramente la generación.

La ganancia real depende sobre todo del tasa de aceptación, es decir de la frecuencia con la que los candidatos del borrador pasan la verificación. Alrededor del 70 al 80 %, un nivel calificado como típico para pares bien emparejados en tareas comunes, la aceleración se sitúa entre 2× y 3×. Los textos predecibles o repetitivos producen tasas más altas y ganancias más importantes.

Variantes y puesta en práctica

El esquema original requiere un modelo de borrador distinto, lo que añade memoria y complejidad de ingeniería. Varias técnicas más recientes lo evitan. Algunas renuncian a la garantía estadística estricta para una implementación más simple o un mayor rendimiento, con, según la fuente, un impacto generalmente insignificante en la calidad de las salidas.

Medusa añade al modelo objetivo varias cabezas de predicción adicionales en su última capa, cada una anticipando una posición futura diferente. Eagle, para « Extrapolation Algorithm for Greater Language-model Efficiency », se basa en los estados internos del modelo en lugar de sus tokens de salida, lo que, según la fuente, favorece tasas de aceptación más altas en textos complejos o especializados. Prompt Lookup Decoding no utiliza ningún modelo secundario: localiza en el prompt y el historial de conversación las expresiones susceptibles de reaparecer en la respuesta, y las emplea como candidatos, lo que resulta especialmente útil para la edición de código y el resumen de documentos.

El decodificado especulativo se ofrece como opción en varios marcos de inferencia, entre ellos text-generation-inference de Hugging Face, vLLM y llama.cpp. Según la fuente, activarlo suele ser simplemente un cambio de configuración.

La técnica beneficia sobre todo a generaciones largas, cuando el modelo procesa una solicitud a la vez y el prompt y la respuesta comparten vocabulario o estructura. Preguntas y respuestas, el resumen de documentos y la completación de código están entre los casos donde las ganancias son más importantes. En el servicio por lotes de alto rendimiento, sin embargo, puede reducir el rendimiento, ya que los tokens de borrador consumen memoria y cálculo que podrían destinarse a otras solicitudes.