Speculative Decoding: как LLM научились генерировать текст в 3 раза быстрее
Speculative Decoding — техника ускорения вывода LLM без потери качества. Объясняем просто: черновик + верификация = скорость × 3.
Что такое Speculative Decoding?
Представьте, что вы проверяете чужую рукопись. Автор-ассистент быстро набрасывает целый абзац, а редактор-эксперт читает его один раз и либо одобряет, либо исправляет. Это намного эффективнее, чем если бы редактор диктовал каждое слово по отдельности — именно так работает Speculative Decoding.
Проблема, которую решает эта техника
Любая авторегрессионная языковая модель (GPT, Llama, Gemini и другие) по умолчанию генерирует текст по одному токену за шаг. Каждый новый токен требует полного прохода через миллиарды параметров модели. Это узкое место делает генерацию медленной, особенно для длинных ответов.
«Однотокенный процесс — не жёсткое требование природы, а лишь следствие стандартного способа генерации. Speculative Decoding разрывает эту цепочку.»
Главная причина медлительности — аппаратная: при малых размерах батча GPU большую часть времени тратит на загрузку весов модели из памяти, а не на вычисления. Маленькая черновая модель требует несравнимо меньшей полосы пропускания памяти.
Как это работает: шаг за шагом
Архитектура Speculative Decoding строится на двух участниках:
- Draft model (черновая модель) — маленькая и быстрая. Обычно в 10–50 раз меньше целевой. Предлагает последовательность из K токенов вперёд.
- Target model (целевая модель) — большая и качественная. Верифицирует все K токенов за один параллельный проход.
Цикл выглядит так:
- Черновая модель быстро генерирует, например, 5 токенов-кандидатов.
- Целевая модель берёт исходный контекст + эти 5 токенов и проверяет их все сразу.
- Принятые токены попадают в выходную последовательность; отвергнутый заменяется вариантом от целевой модели.
- Цикл повторяется.
Ключевое свойство: целевая модель верифицирует черновые токены, не изменяя своего распределения вероятностей. Итоговый текст математически эквивалентен тому, что модель сгенерировала бы самостоятельно, без всяких «черновиков».
Сравнение методов ускорения вывода LLM
| Метод | На что влияет | Качество вывода | Сложность внедрения |
|---|---|---|---|
| Speculative Decoding | Задержка последовательной генерации | Не снижается (lossless) | Средняя |
| Квантизация | Размер модели и объём памяти | Незначительно снижается | Низкая |
| Continuous Batching | Пропускная способность при параллельных запросах | Не снижается | Средняя |
| Дистилляция | Размер и скорость модели | Снижается умеренно | Высокая |
| Medusa / EAGLE | Задержка (без отдельной черновой модели) | Не снижается | Средняя |
Speculative Decoding, квантизация и батчинг решают разные узкие места — в продакшене их часто комбинируют.
Варианты реализации
Со временем появились разные подходы к «черновику»:
- Draft-model — отдельная небольшая модель той же архитектурной семьи.
- N-gram speculation — черновые токены берутся из повторяющихся паттернов в уже сгенерированном тексте (отлично работает для кода и структурированных данных).
- Medusa — несколько лёгких «голов декодирования» прикрепляются прямо к целевой модели, убирая нужду в отдельном черновике.
- EAGLE — черновая голова обучается с учётом неопределённости признаков целевой модели, что увеличивает acceptance rate.
- Self-speculative decoding (SWIFT) — модель сама пропускает промежуточные слои при черновой фазе, без какой-либо вспомогательной модели.
Реальные примеры применения
- AI-агенты с длинными ответами — чем длиннее генерируемый текст, тем ощутимее выигрыш от Speculative Decoding.
- Генерация кода — структурированные повторяющиеся паттерны отлично принимаются черновой моделью, acceptance rate растёт.
- Chatbot с низкой задержкой — пользователь видит ответ быстрее, ощущение «живого» диалога усиливается.
- Cloud inference API — снижение задержки при том же железе = больше запросов в секунду = дешевле обслуживание.
Ограничения
- Выигрыш зависит от acceptance rate: если черновая модель плохо угадывает токены целевой, накладные расходы перевешивают ускорение.
- Техника наиболее эффективна при маленьком размере батча и когда узким местом является именно последовательная генерация, а не prefill или очередь запросов.
- Требует держать в памяти две модели одновременно (целевую + черновую), что увеличивает потребление GPU-памяти на 1–8 ГБ.
См. также: Инференс (Inference), Токен (Token), Квантизация модели, Авторегрессионная генерация, KV-кэш