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

Когда вы задаёте вопрос в поиске Google и получаете сводку от ИИ сверху страницы, ответ часто собирает не одна модель, а две.
Маленькая быстро набрасывает черновик из нескольких слов, большая за один проход проверяет его и оставляет только то, что написала бы сама. Метод называется спекулятивным декодированием, Google применяет его в AI Overviews. В исходной работе 2022 года он ускорил генерацию в 2–3 раза, причём ответ остаётся точно таким же, как без ускорения. Разбираем, как это устроено, почему качество не страдает и где у метода предел.
Почему нейросеть пишет по одному слову
Языковая модель генерирует текст авторегрессивно: по одному токену за шаг. Токен — это кусочек текста, иногда целое слово, иногда его часть или знак препинания. Чтобы получить токен номер 12, модели нужно знать токены с 1 по 11. Значит, фраза из 12 токенов требует 12 последовательных шагов, и параллелить их напрямую нельзя.
Каждый шаг означает полный проход через всю нейросеть. Причем дорогое в этом проходе не вычисления, а чтение весов модели из памяти.
Посчитаем на круглых числах. Модель на 70 млрд параметров в 16-битном формате весит около 140 ГБ. На каждом шаге генерации эти веса нужно прочитать из видеопамяти в вычислительные блоки. Пропускная способность памяти у NVIDIA H100 SXM составляет около 3,35 ТБ/с. Даже в идеальных условиях одно только чтение весов занимает около 40 миллисекунд на токен, то есть не больше 25 токенов в секунду. Вычислительные блоки в это время в основном простаивают: ускорители выполняют сотни триллионов операций в секунду, а память отдаёт данные со скоростью в несколько триллионов байт в секунду. Разница составляет примерно два порядка.
Отсюда главная идея. Если узкое место в чтении весов, а не в вычислениях, то проверить за один проход пять токенов стоит почти столько же, сколько сгенерировать один. Веса всё равно читаются один раз, а дополнительные вычисления укладываются в простаивающие мощности. Осталось найти, откуда взять эти пять токенов-кандидатов.
Как работает спекулятивное декодирование
Черновик и проверка
В классической схеме работают две модели:
- черновая модель (draft): маленькая и быстрая, например в сто раз меньше основной;
- целевая модель (target): та самая большая модель, ответ которой мы хотим получить.
Один цикл выглядит так:
- Черновая модель последовательно генерирует несколько токенов вперёд, обычно от 3 до 8. Она маленькая, поэтому эти шаги дешёвые.
- Целевая модель получает весь черновик и за один проход вычисляет свои вероятности для каждой позиции. Это возможно, потому что все токены черновика уже известны, и их можно обработать параллельно, как обрабатывается обычный промпт.
- Токены черновика проверяются слева направо. Пока целевая модель «согласна», токены принимаются. На первом несогласии черновик обрезается, а на место отвергнутого токена встаёт токен, выбранный целевой моделью.
- Если приняты все токены черновика, целевая модель бесплатно добавляет ещё один, следующий: его вероятности она уже посчитала в том же проходе.
Название пришло из устройства процессоров. Современный процессор выполняет инструкции спекулятивно: угадывает, куда пойдёт ветвление, и начинает работу заранее. Угадал — время сэкономлено, не угадал — результат выбрасывается. Языковые модели делают то же самое с токенами.
Почему маленькая модель вообще может угадывать за большую? Потому что значительная часть текста предсказуема. После «Москва — столица» почти наверняка идёт «России». Закрывающая скобка, окончание слова, служебные конструкции в коде — всё это маленькая модель угадывает не хуже большой. Большая модель нужна на сложных местах, и именно там черновик отбрасывается.
Почему результат не меняется
Главное свойство метода: итоговый текст статистически неотличим от того, что выдала бы целевая модель сама. Это не эвристика, а математическая гарантия, и держится она на модифицированной выборке с отклонением (rejection sampling).
Для каждого токена черновика есть две вероятности: q — с какой вероятностью его выбрала черновая модель, и p — с какой вероятностью его выбрала бы целевая. Правило проверки такое:
- если p больше или равно q, токен принимается всегда;
- если p меньше q, токен принимается с вероятностью p/q;
- если токен отвергнут, новый выбирается из скорректированного распределения: берётся разность p − q там, где она положительна, и нормируется.
Смысл в том, что черновая модель «переоценила» некоторые токены, и проверка срезает этот перекос ровно настолько, насколько нужно. А скорректированное распределение при отказе добирает вероятность тех токенов, которые черновик недооценил. В сумме получается в точности распределение целевой модели. Авторы оригинальной работы Google формулируют это так: метод даёт идентичные выходы без переобучения и изменения архитектуры.
При жадной генерации (когда модель всегда выбирает самый вероятный токен) всё ещё проще: токен черновика принимается, если он совпадает с самым вероятным токеном целевой модели.
Сколько токенов удаётся угадать
Эффективность метода определяют два параметра: доля принятия α (какую долю токенов черновика целевая модель принимает) и длина черновика k.
Ожидаемое число токенов, которое даёт один проход большой модели, считается по формуле из работы Левиатана и соавторов: (1 − α в степени k+1) / (1 − α).
Эволюция метода: от двух моделей к одной
Первые работы: Google и DeepMind
Метод почти одновременно описали две команды. Янив Левиатан, Матан Калман и Йосси Матиас из Google опубликовали работу «Fast Inference from Transformers via Speculative Decoding» в ноябре 2022 года и получили ускорение в 2–3 раза на T5-XXL. В феврале 2023 года команда DeepMind во главе с Чарли Ченом выпустила «Accelerating Large Language Model Decoding with Speculative Sampling»: на модели Chinchilla с 70 млрд параметров генерация ускорилась в 2–2,5 раза в распределённой конфигурации.
У классической схемы два неудобства. Нужна вторая модель, которую надо держать в памяти и которая должна быть обучена на похожих данных, иначе доля принятия будет низкой. А для каждой новой большой модели приходится подбирать или обучать свой черновик.
Medusa: головы вместо второй модели
В январе 2024 года Тианле Цай, Три Дао и соавторы предложили Medusa. Вместо отдельной черновой модели к большой модели добавляются несколько лёгких «голов», каждая из которых предсказывает токен на позицию вперёд: первая — следующий, вторая — через один, и так далее. Головы дают несколько вариантов продолжения, которые складываются в дерево и проверяются за один проход с помощью древовидного внимания (tree attention).
Medusa-1 обучает только головы поверх замороженной модели и даёт ускорение больше 2,2 раза без потери качества. Medusa-2 дообучает головы вместе с моделью и достигает ускорения в 2,3–3,6 раза.
EAGLE: угадывать признаки, а не слова
Семейство EAGLE пошло дальше: черновая часть работает не с токенами, а со скрытыми представлениями самой большой модели, то есть с тем, что модель «думает» перед выбором слова. Это даёт черновику гораздо больше информации, чем голая последовательность токенов.
EAGLE-3 вышла в марте 2025 года. Авторы отказались от предсказания признаков в пользу прямого предсказания токенов и стали использовать признаки сразу с нескольких слоёв модели. По данным статьи, ускорение достигает 6,5 раза, а прирост относительно EAGLE-2 составляет около 1,4 раза.
У EAGLE осталось ограничение: черновые токены генерируются по одному, и задержка черновика растёт вместе с его длиной. Инженеры AWS и NVIDIA предложили P-EAGLE (Parallel EAGLE), где все черновые токены создаются за один проход. Метод встроили в популярный движок инференса vLLM начиная с версии 0.16.0. На ускорителях B200 и модели GPT-OSS 20B он добавляет от 5 до 69% скорости поверх обычного EAGLE-3.
Multi-token prediction: модель сразу учат смотреть вперёд
DeepSeek в модели V3 (декабрь 2024 года) встроила предсказание нескольких токенов прямо в обучение. Модуль multi-token prediction (MTP) учится угадывать сразу два токена: следующий и тот, что идёт за ним. Изначально это делалось ради качества: модель, которая планирует на шаг дальше, лучше понимает структуру текста. А при генерации тот же модуль служит готовым черновиком. По данным технического отчёта, второй предсказанный токен принимается в 85–90% случаев, что даёт ускорение около 1,8 раза по числу токенов в секунду.
Замеры на движке SGLang, опубликованные в блоге LMSYS в июле 2025 года, показали рост выходной пропускной способности DeepSeek V3 до 60% на конфигурации из 16 ускорителей H200. При черновике из 3–4 токенов в среднем принималось 2,2–2,4 токена за проход.
Подсказка из контекста: Predicted Outputs
Черновик не обязательно генерировать моделью. Если вы просите переименовать переменную в файле на 300 строк, 290 строк ответа будут совпадать с исходником. Их можно просто подставить как черновик.
Так работает функция Predicted Outputs, которую OpenAI добавила в API в ноябре 2024 года. Разработчик передаёт ожидаемый текст ответа, модель проверяет его кусками параллельно и генерирует заново только изменённые места. Сейчас функция доступна для GPT-4o, GPT-4o mini и семейства GPT-4.1. Похожий приём в открытых движках называется prompt lookup decoding: черновик ищется среди n-грамм самого промпта.
Когда ускорение не работает
Большой батч
Весь выигрыш строится на том, что вычислительные блоки простаивают, пока читаются веса. Когда сервер обрабатывает одновременно десятки запросов, простоя уже нет: один и тот же проход по весам обслуживает много пользователей сразу, и ускоритель загружен вычислениями. Проверка черновиков начинает отнимать мощности у полезной работы.
Это хорошо видно по цифрам EAGLE-3: до 6,5 раза ускорения в лучших условиях, но в фреймворке SGLang при размере батча 64 прирост пропускной способности составил 1,38 раза. В крупной конфигурации LMSYS (128 ускорителей) MTP дал всего 14% против 60% на малой.
Непредсказуемый текст
Доля принятия зависит от того, насколько текст предсказуем. Код, таблицы, переводы, пересказы и шаблонные ответы черновик угадывает хорошо. Творческий текст с высокой температурой выборки угадывается хуже: целевая модель сама выбирает каждый раз по-разному, и черновик чаще промахивается.
Слабый черновик
Если черновая модель обучена на других данных или слишком мала, доля принятия падает. При α около 0,5 выигрыш почти съедается затратами на сам черновик. Поэтому команды, которые выкатывают модели в продакшен, обычно обучают черновик специально под свою модель, а не берут первый попавшийся.
Скорость в обмен на деньги
Отклонённые токены тоже вычислялись, и кто-то за них платит. В Predicted Outputs токены, которые не вошли в ответ, тарифицируются как обычные выходные. Разработчик Саймон Уиллисон проверил это на примере из документации: ответ пришёл за 3,3 секунды вместо 5,2, то есть на 36% быстрее, но стоил на 72% дороже, потому что из 156 предсказанных токенов принято было только 49.
Что это значит для тех, кто пользуется нейросетями
Спекулятивное декодирование работает на стороне провайдера, и пользователь его не включает и не видит. Но оно объясняет несколько вещей, которые заметны в повседневной работе.
- Почему одна и та же модель отвечает с разной скоростью. Скорость зависит от загрузки серверов и от того, насколько предсказуем ваш ответ. Переписать готовый текст с мелкими правками модель может заметно быстрее, чем сочинить новый текст той же длины.
- Почему у провайдеров появились «быстрые режимы» за отдельные деньги. Например, у Claude Opus 5.5 есть быстрый режим, который работает в 2,5 раза быстрее при двойной стоимости. Каким именно способом ускоряется этот режим, Anthropic не раскрывает, но логика компромисса та же: скорость покупается дополнительными вычислениями.
- Почему маленькие модели вроде GPT-6 Luna или Gemini 3.5 Flash так популярны для массовых задач. Они дёшевы и быстры сами по себе, а большие модели оправданы там, где черновик бы постоянно ошибался: в сложных рассуждениях и нестандартных задачах.
Для практики из этого следует простой вывод: скорость и цену модели стоит измерять на своём продукте, а не брать из рейтингов. Одна и та же модель на ваших запросах может работать быстрее или медленнее заявленного: всё зависит от того, насколько предсказуемы ответы и в какое время идёт нагрузка.
Сравнивать модели проще всего через единый API. У SpeShu.AI один ключ открывает больше 300 нейросетей, включая GPT-6, Claude, Gemini и DeepSeek V4. API совместим с форматом OpenAI, поэтому, чтобы переключить модель, достаточно поменять одну строку с её названием. Всё остальное в интеграции остаётся как было. Так можно прогнать один и тот же набор запросов через несколько моделей и замерить три вещи: время до первого токена, скорость генерации в токенах в секунду и стоимость ответа. После этого видно, где хватит быстрой модели вроде GPT-6 Luna или Gemini 3.5 Flash, а где нужна флагманская. Для бизнеса это ещё и бухгалтерски удобно: оплата в рублях, закрывающие документы и учёт расходов по каждому проекту, без валютных платежей зарубежным провайдерам.
Подарок
Гайд «Как выжать 1000% из текстовых нейросетей» про то, как формулировать запросы, чтобы модель реже ошибалась и меньше «лила воду». Короткий и точный ответ экономит токены и время независимо от того, какие ускорения работают на стороне провайдера.
Частые ошибки
Ошибка 1: считать, что спекулятивное декодирование делает ответы хуже. Это не сжатие и не упрощение модели. Метод математически гарантирует то же распределение ответов, что и у целевой модели. Если ответ ускоренной модели хуже, причина в чём-то другом: в квантизации, другой версии модели или настройках генерации.
Ошибка 2: думать, что за большую модель отвечает маленькая. Маленькая модель только предлагает варианты. Каждый токен проходит проверку большой моделью, и всё, с чем она не согласна, отбрасывается.
Ошибка 3: путать ускорение генерации с ускорением обучения. Спекулятивное декодирование работает только при инференсе, то есть когда готовая модель отвечает на запросы. На скорость обучения оно не влияет. Исключение — MTP: там дополнительный модуль учится вместе с моделью, но ускорение всё равно проявляется только при генерации.
Ошибка 4: ждать одинакового ускорения на любых задачах. Цифры вроде «в 6,5 раза» получены в лучших условиях: одиночные запросы и предсказуемый текст. На загруженном сервере и творческих задачах прирост может составить десятки процентов.
Ошибка 5: считать, что быстрее значит дешевле. Отклонённые токены тоже требуют вычислений. В Predicted Outputs за них платит пользователь, в быстрых режимах провайдеры берут дороже за ту же модель.
Ошибка 6: путать спекулятивное декодирование с кэшированием. Кэш промпта ускоряет обработку повторяющегося начала запроса и снижает его цену. Спекулятивное декодирование ускоряет генерацию ответа. Это разные механизмы, и они работают одновременно.
Заключение
Спекулятивное декодирование использует простое наблюдение: большая модель тратит время на чтение собственных весов, а не на вычисления, поэтому проверить пять токенов почти так же дёшево, как сгенерировать один. Черновик даёт кандидатов, проверка с отклонением гарантирует, что итог не отличается от ответа большой модели, а ускорение в 2–3 раза давно стало стандартом. Следующие поколения метода (Medusa, EAGLE-3, MTP) убрали отдельную черновую модель и подняли потолок ускорения, но физика осталась прежней: чем загруженнее сервер и чем непредсказуемее текст, тем меньше выигрыш.
Сравнить скорость и стоимость ответов разных моделей на своих задачах можно в SpeShu.AI. По промокоду KODTSNIS действует бонус 15% к сумме пополнения.
Частые вопросы
Что такое спекулятивное декодирование простыми словами?
Это способ ускорить генерацию текста нейросетью. Маленькая быстрая модель угадывает несколько следующих слов, а большая модель за один проход проверяет их и оставляет только те, которые выбрала бы сама. Если угадано много, ответ приходит в 2–3 раза быстрее.
Влияет ли спекулятивное декодирование на качество ответа?
Нет. Проверка с отклонением устроена так, что итоговый текст статистически неотличим от ответа большой модели без ускорения. Это доказано в оригинальных работах Google и DeepMind.
Чем Medusa и EAGLE отличаются от классического спекулятивного декодирования?
В классической схеме черновик пишет отдельная маленькая модель. Medusa добавляет к большой модели несколько лёгких голов, которые предсказывают токены на несколько позиций вперёд. EAGLE строит черновик на скрытых представлениях самой большой модели, поэтому угадывает точнее и даёт ускорение до 6,5 раза в лучших условиях.
Почему спекулятивное декодирование хуже работает на загруженных серверах?
Метод использует вычислительные мощности, которые простаивают, пока модель читает веса из памяти. Когда сервер обрабатывает много запросов одновременно, простоя нет, и проверка черновиков начинает конкурировать с полезной работой. Поэтому при больших батчах ускорение снижается до десятков процентов.
Можно ли включить спекулятивное декодирование самому?
В чат-интерфейсах нет: этим управляет провайдер. Разработчики могут использовать Predicted Outputs в API OpenAI, а при запуске открытых моделей на своём сервере включить спекулятивное декодирование в движках vLLM или SGLang.
Erid: 2Vtzqw8FKJd. Реклама. ООО «ЦНИС», ИНН: 9704271170