Speculative Decoding
Speculative Decoding
Speculative Decoding — техника ускорения инференса LLM, при которой маленькая модель (draft) предсказывает несколько токенов вперёд, а большая модель (target) верифицирует их за один проход. Ускоряет генерацию в 2-3×.
Что такое Speculative Decoding
Speculative Decoding (Leviathan et al., 2022; Chen et al., 2023) — метод ускорения авторегрессивной генерации. Основная идея: маленькая «черновая» модель (draft) быстро генерирует K токенов, затем большая «целевая» модель (target) проверяет их все за один forward pass.
Проблема обычного инференса
При авторегрессивной генерации каждый новый токен требует полного forward pass через модель. Этот процесс memory-bound — GPU большую часть времени читает веса из памяти, а не вычисляет.
Генерация 100 токенов = 100 forward passes. Каждый pass использует GPU на ~5-10% от пиковой производительности.
Как работает
1. Draft model (1-3B) генерирует K=5 токенов:
"The cat sat on the" → "mat in the warm sun"
[t1] [t2] [t3] [t4] [t5]
2. Target model (70B) проверяет все 5 за ОДИН forward pass:
- t1 "mat" ✓ (вероятность совпала)
- t2 "in" ✓
- t3 "the" ✓
- t4 "warm" ✗ (target выбрал "bright")
- t5 — отброшен
3. Принято 3 токена + 1 от target = 4 токена за 1 проход target-модели!
Математическая гарантия
Speculative Decoding не меняет распределение выходных токенов. Результат идентичен обычной генерации target-модели. Это достигается через rejection sampling.
Ускорение
| Параметр | Значение |
|---|---|
| Acceptance rate | 60-80% (зависит от пары моделей) |
| Speedup | 2-3× для длинных генераций |
| Задержка (TTFT) | Не улучшается (только decode-фаза) |
Реализации
# vLLM с speculative decoding
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-70B-Instruct \
--speculative-model meta-llama/Llama-3-8B-Instruct \
--num-speculative-tokens 5
Другие варианты draft-модели:
- Маленькая модель того же семейства
- Medusa heads — дополнительные головы предсказания на самой модели
- EAGLE — авторегрессивная draft-модель на скрытых состояниях