Спекулятивное декодирование

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''GPT-5.6 Thinking''' и проверена участником ~~~~}} '''Спекулятивное деко...)
(переработка, дополнение, уточнение, формулы)
 
Строка 1: Строка 1:
{{well|Статья написана с использованием LLM '''GPT-5.6 Thinking''' и проверена участником [[Участник:Egor Goroshko|Egor Goroshko]] 04:44, 18 июля 2026 (MSD)}}
{{well|Статья написана с использованием LLM '''GPT-5.6 Thinking''' и проверена участником [[Участник:Egor Goroshko|Egor Goroshko]] 04:44, 18 июля 2026 (MSD)}}
-
'''Спекулятивное декодирование''' (англ. ''speculative decoding'') — метод ускорения генерации текста [[авторегрессионная модель|авторегрессионными моделями]]. Небольшая вспомогательная модель заранее предлагает несколько следующих [[токен|токенов]], а основная модель проверяет их за один вычислительный проход. При использовании точной процедуры проверки результат имеет то же вероятностное распределение, что и при обычной генерации основной моделью.<ref name="leviathan">Leviathan Y., Kalman M., Matias Y. [https://proceedings.mlr.press/v202/leviathan23a.html Fast Inference from Transformers via Speculative Decoding] // Proceedings of the 40th International Conference on Machine Learning. 2023. P. 19274–19286.</ref><ref name="chen">Chen C., Borgeaud S., Irving G., Lespiau J.-B., Sifre L., Jumper J. [https://arxiv.org/abs/2302.01318 Accelerating Large Language Model Decoding with Speculative Sampling] // arXiv:2302.01318. 2023.</ref>
+
'''Спекулятивное декодирование''' (англ. ''speculative decoding'') — метод ускорения генерации текста [[авторегрессионная модель|авторегрессионными моделями]]. Текстовые модели обрабатывают текст в виде '''токенов''' — отдельных элементов последовательности, которыми могут быть целые слова, части слов, числа, знаки препинания или другие символы. При спекулятивном декодировании небольшая вспомогательная модель заранее предлагает несколько следующих токенов, а основная модель проверяет их за один вычислительный проход. При использовании точной процедуры проверки результат имеет то же вероятностное распределение, что и при обычной генерации основной моделью.<ref name="leviathan">Leviathan Y., Kalman M., Matias Y. [https://proceedings.mlr.press/v202/leviathan23a.html Fast Inference from Transformers via Speculative Decoding] // Proceedings of the 40th International Conference on Machine Learning. 2023. P. 19274–19286.</ref><ref name="chen">Chen C., Borgeaud S., Irving G., Lespiau J.-B., Sifre L., Jumper J. [https://arxiv.org/abs/2302.01318 Accelerating Large Language Model Decoding with Speculative Sampling] // arXiv:2302.01318. 2023.</ref>
== Мотивация ==
== Мотивация ==
-
Большинство [[большая языковая модель|больших языковых моделей]] создают текст последовательно, по одному токену. Токеном может быть слово, часть слова или знак препинания. Вероятность очередного токена зависит от всех ранее сгенерированных токенов:
+
Большинство [[большая языковая модель|больших языковых моделей]] создают текст последовательно, по одному токену. Вероятность очередного токена зависит от всех ранее сгенерированных токенов:
<tex>
<tex>
Строка 30: Строка 30:
</tex>
</tex>
-
После этого целевая модель за один проход вычисляет вероятности для всех предложенных позиций. Токены проверяются по порядку. Предложенный токен <tex>\widetilde{x}_i</tex> принимается с вероятностью
+
После этого целевая модель за один проход вычисляет вероятности для всех предложенных позиций. Предложенные токены проверяются по порядку. Для каждого токена <tex>\widetilde{x}_i</tex> вычисляются две вероятности:
<tex>
<tex>
-
a_i = \min\left\{1,\frac{p(\widetilde{x}_i \mid x_{<i})}{q(\widetilde{x}_i \mid x_{<i})}\right\},
+
p_i = p(\widetilde{x}_i \mid x_1,\ldots,x_{i-1})
</tex>
</tex>
-
где <tex>x_{<i}</tex> обозначает все токены, находящиеся перед проверяемой позицией.
+
— вероятность этого токена по оценке целевой модели, и
-
Если целевая модель считает предложенный токен не менее вероятным, чем черновая, отношение вероятностей не меньше единицы и токен принимается всегда. В остальных случаях он принимается с вероятностью, равной отношению вероятностей двух моделей.
+
<tex>
 +
q_i = q(\widetilde{x}_i \mid x_1,\ldots,x_{i-1})
 +
</tex>
 +
 
 +
— вероятность того же токена по оценке черновой модели.
 +
 
 +
Если <tex>p_i \geq q_i</tex>, предложенный токен принимается всегда. Если <tex>p_i < q_i</tex>, он принимается с вероятностью
 +
 
 +
<tex>
 +
a_i = \frac{p_i}{q_i}.
 +
</tex>
 +
 
 +
Таким образом, целевая модель чаще принимает те предложения, которые согласуются с её собственным распределением вероятностей. Проверка продолжается до первого отклонённого токена. После отклонения новый токен выбирается из корректирующего распределения
 +
 
 +
<tex>
 +
p_{\mathrm{corr}}(x) =
 +
\frac{\max(0,p(x)-q(x))}
 +
{\sum_y \max(0,p(y)-q(y))}.
 +
</tex>
Проверка продолжается до первого отклонения. После отклонения новый токен выбирается из корректирующего распределения
Проверка продолжается до первого отклонения. После отклонения новый токен выбирается из корректирующего распределения

Текущая версия

Статья написана с использованием LLM GPT-5.6 Thinking и проверена участником Egor Goroshko 04:44, 18 июля 2026 (MSD)


Спекулятивное декодирование (англ. speculative decoding) — метод ускорения генерации текста авторегрессионными моделями. Текстовые модели обрабатывают текст в виде токенов — отдельных элементов последовательности, которыми могут быть целые слова, части слов, числа, знаки препинания или другие символы. При спекулятивном декодировании небольшая вспомогательная модель заранее предлагает несколько следующих токенов, а основная модель проверяет их за один вычислительный проход. При использовании точной процедуры проверки результат имеет то же вероятностное распределение, что и при обычной генерации основной моделью.[1][1]

Содержание

Мотивация

Большинство больших языковых моделей создают текст последовательно, по одному токену. Вероятность очередного токена зависит от всех ранее сгенерированных токенов:


x_t \sim p(x_t \mid x_1, \ldots, x_{t-1}),

где x_t — очередной токен, а p — распределение вероятностей, вычисленное моделью.

Чтобы получить n токенов, обычно требуется выполнить не менее n последовательных запусков модели. Вычисления внутри одного запуска хорошо распараллеливаются на графическом процессоре, однако следующий токен нельзя начать генерировать до получения предыдущего.

При выводе больших моделей значительная часть времени также расходуется на чтение параметров модели из памяти вычислительного ускорителя. Поэтому проверка сразу нескольких предполагаемых токенов может оказаться лишь немного дороже проверки одного токена. На этом наблюдении основано спекулятивное декодирование.

Основная идея

Классический вариант метода использует две модели:

  • целевая модель — основная, обычно крупная модель, распределение которой требуется сохранить;
  • черновая модель — небольшая и более быстрая модель, предлагающая возможное продолжение текста.

Пусть целевая модель задаёт распределение вероятностей p, а черновая — распределение q. Черновая модель последовательно предлагает блок из k токенов:


\widetilde{x}_1, \widetilde{x}_2, \ldots, \widetilde{x}_k.

После этого целевая модель за один проход вычисляет вероятности для всех предложенных позиций. Предложенные токены проверяются по порядку. Для каждого токена \widetilde{x}_i вычисляются две вероятности:


p_i = p(\widetilde{x}_i \mid x_1,\ldots,x_{i-1})

— вероятность этого токена по оценке целевой модели, и


q_i = q(\widetilde{x}_i \mid x_1,\ldots,x_{i-1})

— вероятность того же токена по оценке черновой модели.

Если p_i \geq q_i, предложенный токен принимается всегда. Если p_i < q_i, он принимается с вероятностью


a_i = \frac{p_i}{q_i}.

Таким образом, целевая модель чаще принимает те предложения, которые согласуются с её собственным распределением вероятностей. Проверка продолжается до первого отклонённого токена. После отклонения новый токен выбирается из корректирующего распределения


p_{\mathrm{corr}}(x) =
\frac{\max(0,p(x)-q(x))}
{\sum_y \max(0,p(y)-q(y))}.

Проверка продолжается до первого отклонения. После отклонения новый токен выбирается из корректирующего распределения


p_{\mathrm{corr}}(x) =
\frac{\max\{0,p(x)-q(x)\}}
{\sum_y \max\{0,p(y)-q(y)\}}.

Корректирующее распределение компенсирует влияние черновой модели. Благодаря этому итоговая выборка соответствует целевой модели, хотя часть токенов была предварительно предложена другой моделью.[1][1]

Если все k предложений приняты, из распределения целевой модели можно получить ещё один токен. Таким образом, один запуск крупной модели способен добавить до k+1 токенов.

Алгоритм

Работу метода можно представить как следующую последовательность.

1. Создание черновика. Черновая модель генерирует несколько предполагаемых следующих токенов.

2. Параллельная проверка. Целевая модель за один проход вычисляет вероятности для всех предложенных позиций. Это возможно потому, что во время проверки весь черновой блок уже известен.

3. Принятие токенов. Предложения проверяются слева направо. Каждый токен принимается или отклоняется с учётом вероятностей целевой и черновой моделей.

4. Исправление при отклонении. Если один из токенов отклонён, вместо него выбирается токен из корректирующего распределения. Все более поздние предложения отбрасываются, поскольку они были получены с учётом отклонённого токена.

5. Продолжение генерации. Принятые токены добавляются к тексту, после чего процесс повторяется для следующего блока.

При жадном декодировании, когда на каждом шаге выбирается наиболее вероятный токен, применяется упрощённый вариант. Предложение принимается, если оно совпадает с токеном, который выбрала бы целевая модель. В результате получается в точности тот же текст, что и при обычном жадном декодировании.

Эффективность

Ускорение зависит от того, сколько предложенных токенов принимает целевая модель. Если черновая модель хорошо предсказывает её решения, один запуск крупной модели заменяет несколько обычных шагов генерации.

На эффективность влияют:

  • скорость черновой модели;
  • длина предлагаемого блока;
  • сходство распределений черновой и целевой моделей;
  • характеристики вычислительного оборудования;
  • число запросов, обрабатываемых одновременно.

Слишком короткий блок даёт небольшое ускорение. При слишком длинном блоке возрастает вероятность ошибки в первых позициях, после которой все оставшиеся предложения приходится отбрасывать. Поэтому размер блока обычно подбирают экспериментально или изменяют во время генерации.

В первых работах было показано ускорение генерации примерно в два–три раза для отдельных моделей и аппаратных конфигураций без изменения распределения их ответов.[1][1] Получаемый выигрыш не является постоянным: он зависит от модели, текста, размера пакета запросов и реализации.

Варианты метода

Отдельная черновая модель

В классической схеме используется самостоятельная небольшая языковая модель. Обычно она имеет тот же токенизатор, то есть тот же способ разбиения текста на токены, что и целевая модель.

Слишком слабая черновая модель часто предлагает неверные токены. Слишком крупная работает точнее, но сама требует значительных вычислений. Поэтому необходимо найти компромисс между скоростью и качеством её предсказаний.

Дополнительные предсказывающие головы

В методе Medusa к основной модели добавляются небольшие выходные модули, называемые головами. Каждая голова пытается предсказать токен на определённое число позиций вперёд. Из полученных вариантов строится дерево кандидатов, которое основная модель проверяет параллельно.[1]

Такой подход не требует отдельной полноценной языковой модели, однако дополнительные модули необходимо обучить.

Предсказание внутренних представлений

Метод EAGLE предсказывает не только будущие токены, но и внутренние представления целевой модели. Внутренним представлением называется числовое описание контекста, формируемое промежуточными слоями трансформера. На его основе лёгкий модуль строит несколько возможных продолжений, которые затем проверяет основная модель.[1]

Существуют также варианты с несколькими ветвями кандидатов, динамической длиной блока и использованием части слоёв основной модели в качестве чернового модуля.

Преимущества и ограничения

Главное преимущество точного спекулятивного декодирования заключается в ускорении генерации без изменения распределения ответов целевой модели. Метод оптимизирует вычисления, но сам по себе не делает модель точнее и не улучшает содержание её ответов.

Спекулятивное декодирование можно сочетать с другими способами ускорения, например с квантизацией, при которой параметры модели хранятся с меньшей числовой точностью, или с дистилляцией, при которой компактную модель обучают воспроизводить поведение более крупной.

Основное ограничение связано с качеством черновых предложений. Если они часто отклоняются, вычисления черновой модели не приносят пользы. Хранение отдельной модели также увеличивает расход памяти и усложняет развёртывание системы.

Метод особенно полезен при обработке одного или небольшого числа запросов, когда важна задержка получения ответа. При большом числе одновременно обрабатываемых запросов графический процессор может быть уже полностью загружен, поэтому дополнительная параллельная проверка не всегда увеличивает общую пропускную способность.

Сохранение исходного распределения гарантируется только при точном выполнении процедуры принятия и корректировки. Упрощённые эвристические правила могут ускорить генерацию, но способны изменить вероятности токенов и итоговые ответы.

Применение

Спекулятивное декодирование применяется для ускорения вывода больших языковых моделей в:

  • диалоговых системах;
  • помощниках по написанию программного кода;
  • системах автоматического дополнения текста;
  • локальных моделях, запускаемых на пользовательских устройствах;
  • серверных приложениях, для которых важна небольшая задержка ответа.

Метод наиболее эффективен в тех случаях, когда основным ограничением является последовательная генерация токенов, а вычислительное устройство может параллельно проверить несколько кандидатов.

См. также

Литература