Speculative Decoding Guide
Speed up LLM inference 60-80% with draft models. Decision table for when to use speculative decoding and implementation patterns.
This template includes both English and Spanish versions. Scroll down to find "Versión Española".
Speculative Decoding Guide
Template provided by VORLUX AI | vorluxai.com
What Is Speculative Decoding?
Speculative decoding is an inference acceleration technique that uses a small, fast draft model to predict multiple tokens ahead, then verifies those predictions in a single forward pass of the large target model. When the draft model guesses correctly — which happens 60-80% of the time for well-matched pairs — you get multiple tokens for the cost of one target-model pass.
The key insight: verification is cheaper than generation. A large model can check 8 draft tokens in roughly the same time it takes to generate 1 token autoregressively.
How It Works
1. Draft model generates N candidate tokens (fast, ~100ms)
2. Target model verifies all N tokens in one forward pass (~200ms)
3. Accept all correct tokens, reject from first mismatch
4. Resume from last accepted position
Typical speedup: 1.5-3x wall-clock time reduction without any quality loss. The output is mathematically identical to running the target model alone — speculative decoding is lossless.
Decision Table: When to Use
| Scenario | Use Speculative Decoding? | Why |
|---|---|---|
| Long-form generation (>200 tokens) | Yes | Maximum benefit from batched verification |
| Chat / short responses (<50 tokens) | Maybe | Overhead may negate gains for very short outputs |
| Streaming to user | Yes | Draft tokens appear faster, improving perceived latency |
| Batch processing (offline) | Yes | Throughput gains compound across thousands of requests |
| VRAM-constrained device | No | Both models must fit in memory simultaneously |
| Code generation | Yes | Code is highly predictable, draft accuracy is very high |
| Creative writing | Maybe | Lower draft accuracy reduces the speedup |
| Multi-language output | Maybe | Draft model must handle the target language well |
Choosing a Draft Model
The draft model should be:
- Same architecture family as the target (e.g., Llama draft for Llama target)
- 5-10x smaller than the target model
- Trained on similar data for high token-match rates
Recommended Pairs
| Target Model | Draft Model | Expected Acceptance Rate |
|---|---|---|
| Llama 3.1 70B | Llama 3.1 8B | 70-80% |
| Qwen 2.5 72B | Qwen 2.5 7B | 65-75% |
| Mistral Large | Mistral 7B | 60-70% |
| Command R+ 104B | Command R 35B | 55-65% |
| Phi-3 Medium 14B | Phi-3 Mini 3.8B | 70-80% |
Implementation with vLLM
# Start vLLM with speculative decoding enabled
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B \
--speculative-model meta-llama/Llama-3.1-8B \
--num-speculative-tokens 5 \
--use-v2-block-manager
With llama.cpp (local deployment):
# Use --draft flag for speculative decoding
./llama-server \
-m llama-3.1-70b-q4_k_m.gguf \
--draft llama-3.1-8b-q4_k_m.gguf \
-ngl 99 --draft-ngl 99 \
-np 5
Memory Budget
Both models must fit simultaneously. Calculate total memory as:
Total VRAM = Target VRAM + Draft VRAM + KV Cache (both) + 2 GB overhead
Example: Llama 3.1 70B Q4_K_M (42 GB) + Llama 3.1 8B Q4_K_M (5 GB) + KV cache (4 GB) + overhead (2 GB) = 53 GB minimum.
Tuning num_speculative_tokens
| N (draft tokens) | Typical Result |
|---|---|
| 3 | Conservative — safe default, 1.3-1.5x speedup |
| 5 | Balanced — recommended starting point, 1.5-2.5x speedup |
| 8 | Aggressive — higher throughput if acceptance rate is high |
| 12+ | Diminishing returns — only for very predictable outputs |
Monitor your acceptance rate. If it drops below 50%, reduce N or switch to a better-matched draft model.
Need help optimising inference for your edge deployment? Contact VORLUX AI for a free consultation.
Versión Española
Guía de Decodificación Especulativa
Plantilla proporcionada por VORLUX AI | vorluxai.com
¿Qué es la Decodificación Especulativa?
La decodificación especulativa es una técnica de aceleración de inferencia que usa un modelo borrador pequeño y rápido para predecir múltiples tokens por adelantado, y luego verifica esas predicciones en un solo paso forward del modelo objetivo grande. Cuando el modelo borrador acierta — lo cual ocurre el 60-80% de las veces con pares bien emparejados — se obtienen múltiples tokens por el coste de un solo paso del modelo objetivo.
La clave: la verificación es más barata que la generación. Un modelo grande puede verificar 8 tokens borrador en aproximadamente el mismo tiempo que tarda en generar 1 token autorregresivamente.
Cómo Funciona
1. El modelo borrador genera N tokens candidatos (rápido, ~100ms)
2. El modelo objetivo verifica todos los N tokens en un paso forward (~200ms)
3. Se aceptan todos los tokens correctos, se rechaza desde el primer error
4. Se reanuda desde la última posición aceptada
Aceleración típica: Reducción de 1,5-3x en tiempo real sin ninguna pérdida de calidad. La salida es matemáticamente idéntica a ejecutar el modelo objetivo solo — la decodificación especulativa es sin pérdidas.
Tabla de Decisión: Cuándo Usar
| Escenario | ¿Usar Decodificación Especulativa? | Por Qué |
|---|---|---|
| Generación larga (>200 tokens) | Sí | Máximo beneficio de la verificación por lotes |
| Chat / respuestas cortas (<50 tokens) | Quizás | El overhead puede anular las ganancias |
| Streaming al usuario | Sí | Los tokens borrador aparecen más rápido |
| Procesamiento por lotes (offline) | Sí | Las ganancias se acumulan en miles de peticiones |
| Dispositivo con VRAM limitada | No | Ambos modelos deben caber en memoria |
| Generación de código | Sí | El código es altamente predecible |
| Escritura creativa | Quizás | Menor precisión del borrador reduce la aceleración |
| Salida multilingüe | Quizás | El modelo borrador debe manejar bien el idioma objetivo |
Elección del Modelo Borrador
El modelo borrador debe ser:
- Misma familia de arquitectura que el objetivo (ej: borrador Llama para objetivo Llama)
- 5-10x más pequeño que el modelo objetivo
- Entrenado con datos similares para altas tasas de coincidencia de tokens
Pares Recomendados
| Modelo Objetivo | Modelo Borrador | Tasa de Aceptación Esperada |
|---|---|---|
| Llama 3.1 70B | Llama 3.1 8B | 70-80% |
| Qwen 2.5 72B | Qwen 2.5 7B | 65-75% |
| Mistral Large | Mistral 7B | 60-70% |
| Command R+ 104B | Command R 35B | 55-65% |
| Phi-3 Medium 14B | Phi-3 Mini 3.8B | 70-80% |
Implementación con vLLM
# Iniciar vLLM con decodificación especulativa habilitada
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B \
--speculative-model meta-llama/Llama-3.1-8B \
--num-speculative-tokens 5 \
--use-v2-block-manager
Con llama.cpp (despliegue local):
# Usar --draft para decodificación especulativa
./llama-server \
-m llama-3.1-70b-q4_k_m.gguf \
--draft llama-3.1-8b-q4_k_m.gguf \
-ngl 99 --draft-ngl 99 \
-np 5
Presupuesto de Memoria
Ambos modelos deben caber simultáneamente. Calcule la memoria total como:
VRAM Total = VRAM Objetivo + VRAM Borrador + Caché KV (ambos) + 2 GB overhead
Ejemplo: Llama 3.1 70B Q4_K_M (42 GB) + Llama 3.1 8B Q4_K_M (5 GB) + caché KV (4 GB) + overhead (2 GB) = 53 GB mínimo.
Ajuste de num_speculative_tokens
| N (tokens borrador) | Resultado Típico |
|---|---|
| 3 | Conservador — por defecto seguro, aceleración 1,3-1,5x |
| 5 | Equilibrado — punto de partida recomendado, aceleración 1,5-2,5x |
| 8 | Agresivo — mayor rendimiento si la tasa de aceptación es alta |
| 12+ | Rendimientos decrecientes — solo para salidas muy predecibles |
Monitorice su tasa de aceptación. Si cae por debajo del 50%, reduzca N o cambie a un modelo borrador mejor emparejado.
¿Necesita ayuda optimizando la inferencia para su despliegue edge? Contacte con VORLUX AI para una consulta gratuita.