La inferencia de LLM tiene un cuello de botella crítico: el siguiente token no se puede generar hasta que el anterior esté finalizado. Cada token requiere un forward pass completo a través del modelo. Para un modelo de 70 mil millones de parámetros, eso representa una enorme cantidad de multiplicaciones de matrices ocurriendo de forma secuencial, token por token. El speculative decoding es un truco algorítmico que soluciona esto y permite obtener aceleraciones de 2 a 3 veces sin cambiar un solo peso del modelo.
El cuello de botella autorregresivo
Para entender por qué el speculative decoding es importante, primero es necesario comprender por qué la inferencia de los LLM es lenta.
Los LLM modernos generan texto de manera autorregresiva. Dada una secuencia de tokens, el modelo calcula una distribución de probabilidad sobre el vocabulario para el siguiente token, toma una muestra de esa distribución, añade el resultado y repite el proceso. Cada paso es un forward pass a través de todo el modelo.
El problema no es que cada forward pass sea lento en términos absolutos. En las GPU modernas, un solo forward pass por un modelo grande toma decenas de milisegundos. El problema es que esos pases son estrictamente secuenciales. No se puede calcular el token 5 hasta conocer el token 4, porque el token 4 es parte de la entrada para calcular el token 5.
Generar una respuesta de 500 tokens significa 500 forward passes secuenciales. En un modelo grande, eso representa varios segundos de tiempo real (wall-clock time), con la GPU a menudo parcialmente inactiva porque el trabajo de un solo token no satura completamente el hardware.
Durante la decodificación autorregresiva, la GPU está limitada por el ancho de banda de memoria (memory-bandwidth bound), no por el cómputo (compute bound). Los pesos del modelo deben cargarse desde la memoria de la GPU para cada token, y la intensidad aritmética (relación entre computación y acceso a memoria) es baja. El hardware es capaz de realizar mucho más trabajo del que se le está pidiendo.
Decodificación autorregresiva estándar:
Token 1 → [Forward pass completo] → Token 2 → [Forward pass completo] → Token 3 → ...
Cada paso: cargar todos los pesos del modelo de la memoria, calcular un token.
Utilización de la GPU: a menudo entre el 5% y el 30% del pico de FLOPS durante la decodificación.
La idea del speculative decoding
El speculative decoding se apoya en una observación simple: un modelo pequeño y rápido puede predecir lo que diría un modelo grande y lento con una precisión razonable. No una precisión perfecta, pero sí lo suficientemente buena como para ser útil.
El algoritmo consta de tres pasos.
Paso 1 — borrador (draft). Un modelo "draft" pequeño genera K tokens de forma especulativa. Debido a que es mucho más pequeño (de 1 a 7 mil millones de parámetros frente a 70 mil millones), generar K tokens es muy rápido. Se obtiene una continuación candidata de K tokens.
Paso 2 — verificación. Se entrega toda la secuencia candidata (contexto original + K tokens del borrador) al modelo "target" (objetivo) grande en un único forward pass. Dado que el mecanismo de attention del transformer puede procesar todas las posiciones en paralelo, verificar K tokens cuesta aproximadamente lo mismo que generar un solo token. El modelo target produce distribuciones de probabilidad para cada posición.
Paso 3 — aceptar o rechazar. Se comparan las predicciones del modelo draft con las del modelo target en cada posición. Se aceptan los tokens del borrador que coincidan (bajo un criterio de aceptación específico). Se rechaza el primer token que no coincida. Se genera una corrección a partir de la distribución del modelo target en el punto de rechazo.
Flujo de speculative decoding:
1. El modelo Draft genera: [A, B, C, D, E] (K=5 tokens borrador, rápido)
2. El modelo Target verifica los 5 en UN solo forward pass
3. Verificación de aceptación:
Posición 1: A ✓ (aceptado)
Posición 2: B ✓ (aceptado)
Posición 3: C ✓ (aceptado)
Posición 4: D ✗ (rechazado, el target genera D')
Posición 5: E (descartado, después del punto de rechazo)
Resultado: [A, B, C, D'] — 4 tokens con un solo forward pass del modelo target
En este ejemplo, un forward pass del modelo grande produjo 4 tokens en lugar de 1. Eso es una mejora de 4x en tokens por forward pass. En la práctica, las tasas de aceptación varían, pero generar de 2 a 3 tokens por cada forward pass del modelo target es lo típico. Esto representa una aceleración de 2 a 3 veces en tiempo real.
Por qué es matemáticamente seguro
Esta es la parte que hace que el speculative decoding sea genuinamente elegante y no solo ingenioso. El esquema de aceptación-rechazo está diseñado para que la distribución de salida final sea idéntica a la que se obtendría únicamente con el modelo target. No aproximadamente idéntica. Exactamente idéntica.
El criterio de aceptación utiliza un enfoque de muestreo por rechazo (rejection sampling) modificado. Para cada token de borrador , siendo la probabilidad del modelo draft y la del modelo target, el token se acepta con una probabilidad:
Si el modelo target asigna una probabilidad igual o mayor (), el token siempre se acepta; de lo contrario, se acepta con una probabilidad igual a la proporción entre ambas.
Cuando un token es rechazado, el algoritmo toma una muestra de reemplazo de una distribución ajustada que compensa los tokens aceptados. La matemática garantiza que, a lo largo de muchas muestras, la distribución de las secuencias generadas es exactamente la distribución del modelo target.
Esto no es una aproximación. No es un "suficientemente cerca". Es demostrablemente equivalente. La salida es estadísticamente indistinguible de la decodificación autorregresiva estándar con el modelo target. Velocidad gratis.
# Criterio de aceptación simplificado para un solo token
def accept_token(draft_prob, target_prob):
"""
Acepta con probabilidad min(1, target_prob / draft_prob).
Esto preserva la distribución del target exactamente.
"""
if target_prob >= draft_prob:
return True # Siempre aceptar
else:
return random.random() < (target_prob / draft_prob)Ganancias de velocidad en la práctica
La aceleración teórica máxima del speculative decoding es de tokens por cada forward pass del modelo target (si se aceptan todos los tokens del borrador). Con una probabilidad de aceptación por token , el número esperado de tokens producidos por cada paso de verificación sigue una serie geométrica:
Con y , el resultado es aproximadamente 3.4 tokens por pase del target — el origen del "2–3x" que se observa en la práctica. Las ganancias reales dependen de varios factores:
Calidad del modelo draft. Un mejor modelo draft significa mayores tasas de aceptación. Si el modelo draft coincide con el target el 80% de las veces, obtendrás más tokens aceptados por paso de verificación que si coincide el 50% de las veces.
Tipo de generación. El código y las salidas estructuradas experimentan las mayores ganancias porque son altamente predecibles. La prosa en lenguaje natural se beneficia menos porque la elección de palabras es más variable. Las respuestas fácticas cortas son las que menos se benefician porque hay muy pocos tokens para amortizar el costo del borrador.
Longitud del borrador K. Más tokens de borrador significan una mayor aceleración potencial, pero también más cómputo desperdiciado cuando los tokens iniciales son rechazados. El punto óptimo para K suele estar entre 3 y 8, dependiendo de las tasas de aceptación.
Hardware. El speculative decoding ayuda más cuando el modelo target está limitado por el ancho de banda de memoria durante la decodificación (el caso más común). En hardware donde el target ya está limitado por el cómputo, las ganancias son menores.
Las aceleraciones en el mundo real se sitúan en el rango de 2 a 3 veces para la generación de contenido extenso. Algunas cargas de trabajo llegan hasta 4x. Las respuestas cortas (menos de 50 tokens) apenas se benefician porque la sobrecarga del borrador no llega a amortizarse.
Elección de un modelo draft
El modelo draft es la elección de diseño más importante. Debe ser lo suficientemente rápido para que ejecutarlo resulte económico, y lo suficientemente preciso para que sus predicciones sean aceptadas con frecuencia.
Enfoques comunes:
Modelos destilados (Distilled models). Tomar el modelo target y destilarlo en una versión más pequeña. Es el enfoque más confiable, ya que el estudiante aprende naturalmente a imitar la distribución del profesor, lo que genera altas tasas de aceptación. Muchos proveedores de modelos ahora incluyen un pequeño modelo draft junto con su modelo principal exactamente para este propósito.
Modelos más pequeños de la misma familia. Usar un modelo menor de la misma familia. Por ejemplo, Llama 3 8B como draft para Llama 3 70B. Al compartir datos de entrenamiento y arquitectura, tienen sesgos similares, lo que se traduce en tasas de aceptación razonables.
Cabezales especulativos (Speculative heads). En lugar de un modelo separado, se entrena un pequeño cabezal de red neuronal adicional sobre los estados ocultos (hidden states) del modelo target. El cabezal predice múltiples tokens futuros a partir de la representación oculta de una sola posición. Ventaja: no hay que gestionar un modelo separado. Desventaja: menor calidad de predicción que un modelo draft dedicado.
Variantes: Medusa, EAGLE y más
La idea central del speculative decoding ha dado lugar a varias variantes.
Medusa añade múltiples cabezales de predicción paralelos al propio modelo target. Cada cabezal predice una posición de token futura diferente. En lugar de que un modelo draft genere tokens secuencialmente, el modelo target predice múltiples tokens futuros a la vez durante cada forward pass. No se necesita un modelo draft, a costa de añadir pequeños cabezales de predicción que deben ser entrenados.
EAGLE (Extrapolation Algorithm for Greater Language-model Efficiency) utiliza una red neuronal ligera que toma los feature embeddings del modelo target como entrada y predice las características de los tokens futuros. Esas predicciones a nivel de características se mapean luego a tokens. Operar en el espacio de características en lugar del espacio de tokens le otorga a EAGLE tasas de aceptación más altas.
Staged speculative decoding utiliza una cascada de modelos progresivamente más grandes. Un modelo diminuto hace el borrador, un modelo mediano verifica y extiende, y el modelo target grande realiza la verificación final. Esto puede mejorar el throughput cuando la brecha entre los tamaños del draft y el target es muy grande.
Self-speculative decoding utiliza el propio modelo target para el borrador, pero con computación reducida: salida temprana de capas intermedias, saltando cabezales de atención o usando un subconjunto de los parámetros del modelo. Evita la necesidad de un modelo draft independiente, pero requiere cambios arquitectónicos.
Implementación en frameworks de producción
El speculative decoding ha pasado de la investigación a la producción. Los principales frameworks de inferencia ya lo soportan.
vLLM soporta speculative decoding con modelos draft y longitudes de borrador configurables. Se integra con el batching continuo y PagedAttention de vLLM, por lo que el speculative decoding funciona junto con otras optimizaciones de inferencia.
# vLLM con speculative decoding
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3-70B-Instruct",
speculative_model="meta-llama/Llama-3-8B-Instruct",
num_speculative_tokens=5,
)
output = llm.generate("Explain speculative decoding", SamplingParams(max_tokens=512))Text Generation Inference (TGI) de Hugging Face soporta speculative decoding a través de su implementación de Medusa y configuraciones de modelos draft.
llama.cpp soporta speculative decoding para inferencia local, por lo que la aceleración está disponible incluso en hardware de consumo.
TensorRT-LLM de NVIDIA incluye el speculative decoding como parte de su suite de optimización de inferencia, con kernels optimizados por hardware para el paso de verificación.
Limitaciones
El speculative decoding no es una solución universal. Existen limitaciones reales a tener en cuenta:
Interacción con el batch size. El mayor beneficio se obtiene con un batch size de 1 o lotes pequeños, donde la decodificación está más limitada por el ancho de banda de memoria. Con tamaños de lote grandes, la GPU ya está bien utilizada y el cuello de botella se desplaza al cómputo, lo que reduce el beneficio.
Temperatura de muestreo. A temperaturas altas (muestreo más aleatorio), es menos probable que las predicciones del modelo draft coincidan con las del target, lo que reduce las tasas de aceptación y la aceleración. El speculative decoding funciona mejor con una generación determinista o de baja temperatura.
Complejidad de implementación. Añadir un modelo draft a tu infraestructura de servicio significa gestionar dos modelos en lugar de uno. Es necesario manejar la carga del modelo draft, la asignación de memoria y la lógica de coordinación entre las fases de borrador y verificación.
Interacción con otras optimizaciones. El speculative decoding puede entrar en conflicto o ser redundante con otras optimizaciones de inferencia. Si ya estás optimizando agresivamente el KV cache, la sobrecarga de memoria del modelo draft podría reducir el throughput global.
El panorama general
El speculative decoding es parte de una tendencia más amplia: hacer que la inferencia de los LLM sea más rápida a través de la innovación algorítmica en lugar de solo mediante el escalado de hardware. Los pesos del modelo siguen siendo los mismos. La distribución de salida sigue siendo la misma. Obtienes el mismo resultado más rápido.
Esto es importante porque el costo y la latencia de la inferencia son las principales barreras para desplegar LLM en producción. Cada mejora de 2x en la velocidad de inferencia se traduce directamente en una reducción de costos de 2x o en el doble de usuarios atendidos. Al combinar el speculative decoding con la cuantización, el batching continuo y la optimización del KV-cache, la aceleración acumulada respecto a la inferencia ingenua es de un orden de magnitud.
La trayectoria es clara. A medida que los modelos crecen, la brecha entre la capacidad del hardware y la utilización autorregresiva aumenta. Las técnicas como el speculative decoding, que explotan esa brecha, se vuelven más valiosas, no menos. Si estás desplegando LLM a escala hoy en día, esto debería estar en tu lista de optimización. La aceleración es real, la salida es idéntica y la implementación es cada vez más sencilla.
