Speculative Decoding: от идеи до SOTA

Speculative Decoding: от идеи до SOTA
1. Почему вообще декодинг медленный
Autoregressive-инференс LLM упирается не в compute, а в memory bandwidth. Чтобы сгенерировать один токен, нужно прочитать все веса модели из HBM в SRAM GPU. Арифметическая интенсивность при batch=1 крайне низкая — тензорные ядра простаивают.
Ключевое наблюдение: forward pass на токенах стоит почти столько же по времени, сколько на токене (пока невелико), потому что bottleneck — загрузка весов, а не вычисления. Это и эксплуатирует speculative decoding.
2. Базовая идея (Leviathan et al. 2023, Chen et al. 2023)
Берём две модели:
- Target модель с распределением — большая, медленная, качественная.
- Draft модель с распределением — маленькая, быстрая, чуть менее точная.
Цикл генерации:
- Draft модель авторегрессивно генерирует токенов: .
- Target модель за один forward pass считает для всех .
- Слева направо принимаем/отклоняем токены по правилу rejection sampling.
- Если все приняты — бонусом сэмплируем -й токен из .
3. Математика: почему это корректно
Хотим, чтобы итоговое распределение принятого токена было ровно .
Acceptance rule. Для принимаем с вероятностью
Resampling rule. Если отклонили, сэмплируем из скорректированного распределения
Теорема. Итоговое распределение равно .
Доказательство.
Подставляем:
Складываем:
Главный вывод: декодинг бесплатный по качеству — никакой деградации распределения.
4. Ожидаемое ускорение
Пусть:
- — средняя вероятность принятия токена,
- — отношение латентности draft/target,
- — число draft-токенов на цикл.
Ожидаемое число сгенерированных токенов за цикл (геометрическая сумма):
Время цикла: . Ускорение относительно ванильного декодинга:
Оптимальное обычно лежит в диапазоне 4–8; при и получаем 2.5–3x.
5. Откуда брать draft-модель
| Подход | Суть |
|---|---|
| Готовая малая модель | Llama-7B для Llama-70B, Qwen-0.5B для Qwen-72B и т.п. |
| Дистилляция | Тренируем draft под распределение target |
| Self-speculative | Target сама себе draft через layer-skip / early exit (LayerSkip, Draft&Verify) |
| N-gram / Prompt Lookup | Достаём n-грамм-кандидатов прямо из контекста — отлично для кода и шаблонов |
| Retrieval (REST) | Достаём кандидатов из внешнего корпуса по префиксу |
6. Tree-based верификация (SpecInfer, Medusa)
Вместо одной цепочки draft-токенов строим дерево кандидатов и верифицируем все ветви одновременно через специальную tree attention mask. За один target forward pass проверяем сразу много гипотез — ожидаемое число принятых токенов растёт.
Medusa (Cai et al. 2024) — приклеивает к target модели дополнительных голов, каждая предсказывает токен на позиции напрямую из текущего hidden state :
Топ-кандидаты от каждой головы образуют дерево, проверяемое одним forward pass. Отдельная draft модель не нужна — только дообучить головы.
7. EAGLE — SOTA-семейство (2024)
Главная идея EAGLE: предсказывать не токены, а признаки (hidden states предпоследнего слоя). Feature space гораздо регулярнее token space и лучше моделируется маленькой сетью.
Архитектура: 1-слойный autoregressive transformer-head, который на вход получает — feature на шаге и embedding следующего токена — и предсказывает .
Loss:
- EAGLE-1: статическое дерево драфтов, 3x speedup.
- EAGLE-2: динамическое дерево по предсказанной confidence — больше принятых токенов при том же бюджете.
- EAGLE-3: убрана feature-regression регуляризация (она ограничивала draft), добавлен training-time test — моделирование ошибок драфта на обучении. До 5x на современных бенчмарках.

8. Lookahead Decoding
Другой подход — без draft-модели вообще. Использует Jacobi iteration для параллельного решения системы уравнений авторегрессии и поддерживает n-gram pool из истории — совпадения подставляются как draft-кандидаты. Удобно, когда тренировать draft неоткуда.
9. Что выбрать на практике
| Сценарий | Метод |
|---|---|
| Есть малая модель того же семейства | Vanilla speculative decoding |
| Plug-and-play поверх готовой модели | Medusa / EAGLE (тренируем только головы) |
| Код, JSON, повторяющиеся шаблоны | Prompt Lookup Decoding |
| Production-serving (vLLM, SGLang) | EAGLE-2 / EAGLE-3 |
| Очень длинный контекст | Self-speculative с layer-skip |
10. Подводные камни
- Температура. При высокой распределение размывается, падает — speedup тает.
- Batched serving. При больших batch size target уже compute-bound, выигрыш существенно меньше.
- Tree attention. Требует поддержки custom масок и position ids — не везде из коробки.
- Потолок acceptance. Даже идеальный драфт ограничен энтропией — для творческих задач редко выше 0.8.
- KV-cache. Отклонённые токены требуют отката KV-кэша target модели — реализация неаккуратно может съесть весь выигрыш.
11. TL;DR
Speculative decoding — это rejection sampling над авторегрессивной генерацией, эксплуатирующее тот факт, что target forward pass на K токенах почти так же дёшев, как на 1. Корректность доказывается одной строчкой (), ускорение задаётся формулой . Современная линия развития — feature-level prediction + динамические деревья (EAGLE-2/3), дающая 3–5x без потери качества.
Все ли понятно
- Да100% · 1
- Нормально, но можно попроще0% · 0
- Нет, надо проще писать0% · 0
1 голос · войди, чтобы проголосовать