Введение
Большие языковые модели находят применение в широком спектре приложений, но их масштабное развёртывание требует тщательной оптимизации. Стандартное авторегрессивное декодирование — это базовый метод, который используют большинство систем обслуживания LLM. Модель генерирует один токен, добавляет его к последовательности, затем использует обновленную последовательность для генерации следующего токена. Этот процесс прост и надёжен, но цикл обслуживания по-прежнему продвигается вперёд одним токеном за раз, поскольку выходные токены должны производиться строго в порядке слева направо.
Спекулятивное декодирование [1] надстраивается над этим базовым методом через механизм предложения и проверки. Легкий компонент предложения выдвигает кандидатуры возможных будущих токенов, а целевая модель проверяет эти кандидатуры перед их фиксацией. Когда несколько предложенных токенов принимаются, система может зафиксировать несколько выходных токенов из одного шага проверки целевой моделью, сохраняя при этом поведение выходных данных целевой модели.
В этой статье рассматривается, как спекулятивное декодирование работает в vLLM и представлены измерения из тестовой среды. Сначала пересматривается базовое авторегрессивное декодирование и процесс предложения-проверки. Затем изучаются пять подходов к спекулятивному предложению: встроенное MTP, Gemma 4 MTP, EAGLE-3, DFlash и DSpark. Эти методы различаются тем, как компонент предложения получает информацию от целевой модели и генерируются ли кандидатуры токенов последовательно, авторегрессивно, параллельно или гибридным подходом. Наконец, показано, как включить протестированные методы, приведены результаты измерений экспериментов на AMD Instinct™ MI300X и MI355X GPU с использованием открытой платформы программного обеспечения ROCm™, и обсуждаются практические соображения по настройке и наблюдаемости.
Базовое авторегрессивное декодирование
При стандартном авторегрессивном декодировании каждый шаг декодирования производит и фиксирует один новый токен. Например, генерация четырёх выходных токенов требует четырёх последовательных шагов декодирования:
После каждого шага генерируемый токен добавляется к последовательности и становится частью входных данных для следующего шага. Это делает цикл декодирования понятным, но также требует один проход модели для каждого выходного токена. Во время длительных генераций этот цикл токен-за-токеном может доминировать в задержке и ограничивать пропускную способность обслуживания.
Ключевой вопрос, на который отвечает спекулятивное декодирование, таков:
Можно ли сохранить поведение выходных данных исходной модели, одновременно уменьшив частоту, с которой генерация продвигается на один токен за раз?
Спекулятивное декодирование решает эту проблему, разделяя предложение и проверку. Компонент предложения сначала выдвигает несколько кандидатур возможных будущих токенов. Исходная модель, действуя как целевая модель, затем проверяет эти кандидатуры перед их фиксацией.
Основная идея спекулятивного декодирования
Спекулятивное декодирование не заменяет исходную модель. Вместо этого исходная модель остаётся целевой моделью, несущей ответственность за окончательный выход, а перед ней добавляется более быстрый этап предложения.
Процесс состоит из двух частей:
- Предложение: выдвинуть несколько кандидатур возможных будущих токенов.
- Проверка: использовать целевую модель для проверки этих кандидатур.
Во время каждого раунда спекулятивного декодирования, как показано на рисунке 1, легкий компонент предложения выдвигает один или несколько будущих токенов. Эти токены — только кандидатуры и не фиксируются немедленно. Целевая модель затем оценивает последовательность кандидатур в одном проходе проверки.
Проверка происходит слева направо. Каждый предложенный токен проверяется с использованием результата целевой модели в соответствующей позиции. Принятые токены фиксируются в выходной последовательности. Когда предложенный токен отклоняется, более поздние кандидатуры из того же предложения больше не принимаются.
Если предложенный токен отклонён, целевая модель выдаёт следующий токен. Оставшиеся предложенные токены отбрасываются, и генерация продолжается с обновленной последовательности.
Концептуально стандартное авторегрессивное декодирование продвигается так:
Спекулятивное декодирование вместо этого позволяет оценивать несколько кандидатур вместе:
Это может уменьшить количество раундов декодирования целевой модели, когда принимаются несколько кандидатур. Когда компонент предложения производит токены, которые целевая модель принимает, несколько выходных токенов можно зафиксировать из одного шага проверки целевой моделью. Когда предложение отклоняется, результат со стороны целевой модели определяет, как продолжается генерация.
Простой пример принятия/отклонения
На рисунке 2 представлен пример одного раунда спекулятивного декодирования. Зелёные поля — это предложенные токены, пережившие проверку, красное поле отмечает первый отклонённый предложенный токен, а серое поле — это более поздний предложенный токен, который был отброшен. Синий токен в выходных данных поступает от целевой модели, а не от предложения.
Предположим, текущая подсказка выглядит так:
Компонент предложения выдвигает несколько будущих токенов:
Целевая модель проверяет предложенные токены слева направо:
Первые два предложенных токена — солнечная и и — принимаются. На третьей позиции предложение выдвигает тёплая, но целевая модель выбирает ясная. Оставшаяся кандидатура снаружи отбрасывается, поскольку она следует за первой отклонённой позицией.
Следующий раунд декодирования, таким образом, продолжается с:
Как работают методы предложения
Хотя все методы спекулятивного декодирования следуют одному и тому же процессу предложения-проверки, они различаются в том, как разработан компонент предложения и как он работает с целевой моделью.
Основные различия:
- Тип информации, полученной от целевой модели.
- То, как эта информация включается в процесс предложения.
- Генерируются ли кандидатуры последовательно или параллельно.
На основе этих различий методы предложения, обсуждаемые в этой статье, можно разделить на три широкие категории: встроенные модули MTP, отдельные модули MTP и выделенные сети предложения, обусловленные целевой моделью.
- Встроенные модули MTP: встроены непосредственно в архитектуру целевой модели; используют встроенный вспомогательный путь предсказания модели; генерируют кандидатуры токенов последовательно.
- Отдельные предложители MTP: используют отдельную контрольную точку, связанную с конкретной целевой моделью; используют активации целевой модели и информацию общего KV-cache во время вывода; генерируют кандидатуры токенов последовательно.
- Выделенные сети предложения, обусловленные целевой моделью: используют отдельные модели спекулятора, обученные для конкретной целевой модели, включая EAGLE-3, DFlash и DSpark. EAGLE-3 выдвигает авторегрессивно из скрытых состояний целевой модели, DFlash выдвигает параллельные блоки из скрытых состояний целевой модели, а DSpark добавляет лёгкую причинную коррекцию и выбор префикса на основе уверенности.
Эти категории описывают архитектуру компонента предложения, а не семейство целевой модели. Целевая модель может поддерживать встроенное MTP, одновременно имея отдельно обученные модели EAGLE-3, DFlash или DSpark.
Компонент предложения не работает полностью независимо. В зависимости от метода компонент предложения может получать:
- Скрытое представление от целевой модели.
- Скрытые состояния из нескольких выбранных слоёв целевой модели.
- KV cache целевой модели.
- Особенности, полученные путём комбинирования нескольких представлений целевой модели.
В следующих разделах объясняется, как каждый метод использует эту информацию и как он генерирует кандидатуры токенов.
Встроенное MTP
Multi-Token Prediction (MTP) обозначает семейство встроенных в модель механизмов для предсказания токенов за пределами непосредственно следующего токена. В vLLM встроенное MTP доступно, когда целевая модель включает совместимый вспомогательный компонент предсказания [2]. Точная архитектура MTP варьируется в зависимости от семейства модели, но каждая реализация предоставляет вспомогательный путь для выдвижения будущих токенов.
На первом спекулятивном шаге компонент MTP комбинирует скрытое представление из целевой модели с информацией от текущего токена для предсказания первого предложенного токена. На последующих шагах новый предложенный токен и скрытое состояние, полученное на предыдущем шаге MTP, используются для предсказания следующей кандидатуры. После выдвижения настроенного количества кандидатур целевая модель оценивает их вместе в одном проходе проверки.
Первый предложенный токен
Последующие предложенные токены
Многие реализации встроенного MTP следуют схожему паттерну. Скрытое представление из целевой модели или из предыдущего предсказания MTP комбинируется с вложением смещённого входного токена или последнего предложенного токена:
Две входа служат разным целям: (1) скрытое представление несёт информацию о предшествующей последовательности; и (2) вложение токена определяет последний токен, из которого продолжается предложение. В распространённых реализациях они комбинируются вдоль размерности скрытого слоя и трансформируются перед входом во вспомогательный слой предсказания.
Количество физических слоёв MTP и настроенная спекулятивная глубина — это отдельные концепции. Когда num_speculative_tokens превышает глубину предсказания, непосредственно предоставленную контрольной точкой, vLLM может повторно использовать путь MTP через дополнительные прямые проходы. Больший результат, таким образом, выдвигает больше кандидатур перед проверкой, но также вводит больше последовательной работы предложения.
Встроенное MTP тесно связано с архитектурой целевой модели. Во многих реализациях части пути MTP используют общие компоненты с целевой моделью, что может держать дополнительные расходы памяти относительно скромными. Однако генерирование нескольких спекулятивных токенов всё ещё требует последовательного предложения перед проверкой.
Gemma 4 MTP
Gemma 4 использует отдельно упакованный компонент предложения MTP, связанный с конкретной целевой моделью [3]. Хотя компонент предложения имеет свою собственную контрольную точку, он остаётся тесно связанным с целевой моделью во время вывода.
Компонент предложения использует активации, произведённые целевой моделью, и использует общий KV cache целевой модели. Это позволяет ему повторно использовать контекстную информацию, которую целевая модель уже вычислила, вместо обработки принятого префикса независимо.
Как и с встроенным MTP, количество слоёв в компоненте предложения отделено от настроенной спекулятивной глубины. Когда запрашиваются несколько кандидатур токенов, компонент предложения генерирует их последовательно:
EAGLE-3
EAGLE-3 использует выделенную сеть предложения, обученную для конкретной целевой модели. Компонент предложения имеет собственный путь выполнения, но он остаётся тесно обусловленным информацией, полученной целевой моделью [4].
Во время прямого прохода целевой модели EAGLE-3 записывает скрытые состояния из трёх этапов целевого Трансформера: близко к началу, около середины и близко к концу. Это контекстные представления той же принятой последовательности на разных этапах обработки целевой моделью.
Три скрытых состояния конкатенируются и проецируются в одну слитую особенность целевой модели. Это слитое представление затем комбинируется с вложением семплированного токена перед входом в декодер предложения EAGLE-3.
Два входа служат разным целям:
- Слитая особенность целевой модели суммирует принятую последовательность, используя информацию из нескольких этапов прямого прохода целевой модели.
- Вложение семплированного токена определяет токен, из которого продолжается предложение.
EAGLE-3 генерирует предложенные токены авторегрессивно. Для первого предложенного токена используется слитая особенность целевой модели, вычисленная из принятой последовательности, вместе с вложением семплированного токена. После производства предложенного токена его вложение подаётся на следующий этап предложения.
Поскольку целевая модель ещё не обработала более поздние спекулятивные позиции, скрытые состояния целевой модели для этих позиций недоступны. EAGLE-3, таким образом, использует предыдущий выход компонента предложения при продолжении последовательности предложения.
Первый предложенный токен
Последующие предложенные токены
Эта последовательная обратная связь даёт более поздним предложенным токенам прямую зависимость от более ранних предложенных токенов вдоль предложенной последовательности. Однако генерирование большего количества спекулятивных токенов также требует больше последовательной работы предложения перед проверкой.
DFlash
DFlash использует выделенную сеть предложения, обученную для конкретной целевой модели. В отличие от MTP и EAGLE-3, которые генерируют кандидатуры токенов последовательно, DFlash предсказывает целый блок будущих позиций параллельно [5].
DFlash начинает каждый блок предложения с якорного токена. Якорь — это известный токен, произведённый или подтверждённый целевой моделью, поэтому DFlash не нужно его предсказывать. Вместо этого он обеспечивает известную начальную точку для замаскированных позиций, которые следуют. В более поздних раундах декодирования это, как правило, дополнительный токен целевой модели, возвращённый предыдущим проходом проверки.
Якорь занимает первую позицию в блоке, в то время как оставшиеся позиции замаскированы и предсказаны параллельно:
Блок предложения начинается с подтверждённого якорного токена, сопровождаемого замаскированными позициями:
Здесь якорь — это известный токен целевой модели, в то время как замаскированные позиции предсказаны DFlash.
Один прямой проход DFlash предсказывает все замаскированные позиции вместе:
Как EAGLE-3, DFlash сначала комбинирует скрытые состояния из нескольких слоёв целевой модели в слитое представление.
Основное различие заключается в том, как используется это слитое представление. EAGLE-3 комбинирует его с вложением семплированного токена на входе своей авторегрессивной сети предложения. DFlash вместо этого преобразует слитый контекст целевой модели в дополнительные представления Key и Value, доступные в каждом слое сети предложения.
Запросы из замаскированных позиций предложения могут, таким образом, обращать внимание как к:
- Представлениям Key и Value, полученным из целевой модели.
- Представлениям Key и Value, произведённым из блока предложения.
Доступно в каждом слое предложения
Контекст целевой модели, таким образом, остаётся доступным на протяжении всей сети предложения, вместо того чтобы поставляться только один раз на её входе.
После того как блок предложения был сгенерирован, целевая модель оценивает все предложенные токены в одном проходе проверки. Решение о принятии затем применяется слева направо: принятые токены фиксируются до первого отклонения, а остальные кандидатуры отбрасываются.
Здесь токен целевой модели заменяет первый отклонённый предложенный токен, в то время как оставшиеся предложенные токены отбрасываются.
Отличительной характеристикой DFlash является то, что все замаскированные позиции предсказаны вместе в одном прямом проходе сети предложения.
Это отличается от последовательного предложения:
Поскольку все замаскированные позиции предсказаны вместе, более поздняя позиция не обусловлена семплированным выходом более ранней позиции во время того же прохода. Это исключает обратную связь токен-за-токеном, используемую авторегрессивным предложением. Эффективность более поздних позиций, таким образом, зависит от обученной контрольной точки и рабочей нагрузки, особенно при использовании более длинных блоков предложения.
DSpark
DSpark расширяет параллельное предложение двумя дополнительными механизмами:
- Лёгкая последовательная головка, которая вводит зависимость между токенами в блоке предложения.
- Выбор префикса на основе уверенности, отправленного для проверки целевой моделью.
DSpark использует модифицированную модель DFlash в качестве своего параллельного остова [6]. Остов выполняет главное вычисление предложения для всех позиций в одном прямом проходе, производя скрытое состояние и набор базовых логитов для каждой позиции предложения. Он, таким образом, наследует обусловливание контекста целевой модели, описанное в разделе DFlash.
Полностью параллельный компонент предложения предсказывает каждую позицию, не сначала видя токены, выбранные на более ранних позициях в том же блоке. Когда несколько продолжений правдоподобны, это может произвести несогласованные комбинации. Например, оба слова "конечно" и "нет проблем" могут быть разумными продолжениями, но независимые позиционные предсказания могут произвести "нет конечно".
DSpark решает это поведение, применяя лёгкую последовательную головку после параллельного остова. Остов по-прежнему вычисляет базовые логиты для каждой позиции вместе. Последовательная головка затем выбирает токены слева направо, корректируя каждую позицию, используя информацию из предыдущих выбранных предложенных токенов.
DSpark применяет лёгкую головку Маркова, которая вводит зависимость между выбранными предложенными токенами. Для каждой позиции головка Маркова использует непосредственно предыдущий выбранный токен для производства небольшого смещения. Это смещение регулирует базовые логиты, произведённые параллельным остовом:
Основная сеть предложения обрабатывает все кандидатуры позиций вместе в одном прямом проходе. После этого только лёгкая головка Маркова запускается слева направо для регулирования каждой позиции, используя предыдущий выбранный предложенный токен.
Это позволяет более поздним предложенным токенам зависеть от токенов, уже выбранных в том же блоке, без повторного запуска полной сети предложения для каждой позиции.
Дизайн DSpark также включает головку уверенности, которая может выбрать более короткий префикс предложения для проверки целевой моделью. Эта функция была неактивна в пути vLLM, использованном для наших экспериментов, поэтому результаты бенчмарка отражают только параллельную сеть предложения и лёгкую коррекцию Маркова.
Целевая модель оценивает предложенную последовательность в одном проходе проверки, и предложенные токены фиксируются слева направо до первого отклонения.
Сводка методов предложения
На рисунке 3 представлен визуальный вид рядом пяти методов предложения: как выглядит компонент предложения, какую информацию целевой модели он использует и генерируются ли кандидатуры токенов последовательно или параллельно. Таблица ниже рисунка повторно излагает то же сравнение в компактной форме. Во всех пяти методах целевая модель по-прежнему оценивает предложенную последовательность в одном проходе проверки, и решение о принятии применяется слева направо до первого отклонённого предложенного токена.
| Метод | Компонент предложения | Используемая информация целевой модели | Как генерируются предложенные токены |
|---|---|---|---|
| Встроенное MTP | Встроенный вспомогательный путь MTP модели | Скрытое представление целевой модели или предыдущего предсказания MTP, комбинированное с информацией о текущем предложенном токене | Последовательно через повторное использование пути MTP |
| Gemma 4 MTP | Отдельный компонент предложения MTP, связанный с целевой моделью | Активации целевой модели и общий KV cache целевой модели | Последовательно через связанный компонент MTP |
| EAGLE-3 | Выделенная авторегрессивная сеть предложения | Скрытые состояния, записанные близко к началу, около середины и близко к концу прямого прохода целевой модели, слитые в одно представление | Последовательно, при этом каждый предложенный токен влияет на следующий |
| DFlash | Выделенная параллельная сеть предложения | Слитые скрытые состояния целевой модели, предоставленные как дополнительная информация Key и Value в каждом слое предложения | Все кандидатуры позиций предсказаны вместе в одном параллельном прямом проходе |
| DSpark | Параллельная сеть предложения в стиле DFlash с лёгкой головкой Маркова | То же обусловленное целевой моделью информация, используемое параллельной сетью предложения | Один параллельный прямой проход, сопровождаемый лёгкой последовательной регулировкой выбора токена |
Как включить спекулятивное декодирование в vLLM
В vLLM спекулятивное декодирование настраивается через --speculative-config. Основные различия — это название метода, требуется ли отдельная контрольная точка предложения и количество запрашиваемых кандидатур токенов. Текущий vLLM поддерживает mtp, eagle3, dflash и dspark в качестве значений метода.
| Метод | Отдельная контрольная точка предложения | Типичная конфигурация |
|---|---|---|
| Встроенное MTP | Нет |
"method": "mtp""num_speculative_tokens": <N>
|
| Gemma 4 MTP | Да |
"method": "mtp""model": "<matching-assistant>""num_speculative_tokens": <N>
|
| EAGLE-3 | Да |
"method": "eagle3""model": "<matching-speculator>""num_speculative_tokens": <N>
|
| DFlash | Да |
"method": "dflash""model": "<matching-speculator>""num_speculative_tokens": <N>
|
| DSpark | Да |
"method": "dspark""model": "<matching-speculator>""num_speculative_tokens": <N>
|
Для встроенного MTP компонент предложения включен в целевую модель, поэтому поле model опускается:
vllm serve <target-model> \
--speculative-config '{
"method": "mtp",
"num_speculative_tokens": <N>
}'Для Gemma 4 MTP, EAGLE-3, DFlash и DSpark поле model обычно указывает на контрольную точку, обученную для целевой модели:
vllm serve <target-model> \
--speculative-config '{
"method": "<method>",
"model": "<matching-draft-checkpoint>",
"num_speculative_tokens": <N>
}'Контрольные точки ассистента Gemma 4 используют путь MTP, даже хотя они поставляются через поле model. vLLM подключает компонент ассистента к целевой модели и позволяет ему использовать общий KV cache целевой модели.
Перед включением метода убедитесь, что:
- Установленная версия vLLM поддерживает метод и архитектуру модели.
- Контрольная точка предложения совместима с целевой моделью и методом.
num_speculative_tokensсовместим с контрольной точкой.- Карточка модели поддерживает предполагаемое оборудование и механизм вывода.
Соображения по памяти
Встроенное MTP не загружает отдельную контрольную точку предложения и может использовать общие компоненты, такие как таблица встраивания или голова выхода с целевой моделью. Gemma 4 MTP, EAGLE-3, DFlash и DSpark загружают дополнительные веса предложения, поэтому должно быть зарезервировано достаточное место в памяти GPU. Фактическая нагрузка зависит от размера компонента предложения, численной точности, конфигурации параллелизма тензора и буферов среды выполнения.
Где найти предварительно обученные модели предложения
Несколько организаций теперь публикуют предварительно обученные модели предложения на Hugging Face. Google предоставляет ассистентов MTP для Gemma 4, а Z-Lab поддерживает коллекцию контрольных точек DFlash. Red Hat AI предлагает модели предложения для EAGLE-3, DFlash и DSpark, а коллекция DeepSpec от DeepSeek предоставляет согласованные контрольные точки для всех трёх методов. LightSeek сосредоточена на моделях на основе EAGLE для Kimi, а Inferact публикует модели предложения для MiniMax и Kimi.
| Издатель модели предложения | Методы | Типичные модели и целевые модели |
|---|---|---|
| Gemma 4 MTP | Контрольные точки ассистента для целевых моделей Gemma 4 E2B, E4B, 12B, 26B-A4B и 31B. [7] | |
| LightSeek Foundation | EAGLE-3 и EAGLE-3.1 | Модели предложения на основе EAGLE для Kimi-K2.5, Kimi-K2.6 и Kimi-K2.7-Coder, включая стандартные и варианты MLA. [8] |
| Red Hat AI | EAGLE-3, DFlash и DSpark | Коллекция, охватывающая семейства целевых моделей, такие как Llama, Qwen, Gemma, GPT-OSS, GLM, Nemotron и Mistral. Типичные суффиксы включают -speculator.eagle3, -speculator.dflash и -speculator.dspark. [9] |
| Z-Lab | DFlash | Контрольные точки DFlash для целевых моделей, включая Qwen3, Qwen3.5, Qwen3.6, Gemma 4, Kimi, MiniMax, GPT-OSS и Llama. Названия контрольных точек обычно следуют паттерну <target>-DFlash. [10] |
| DeepSeek AI | EAGLE-3, DFlash и DSpark | Коллекция DeepSpec предоставляет версии всех трёх методов для Qwen3-4B, Qwen3-8B и Qwen3-14B, а также Gemma 4 12B. Примеры включают eagle3_qwen3_8b_ttt7, dflash_qwen3_8b_block7 и dspark_qwen3_8b_block7. [11] |
| Inferact | EAGLE-3 и DSpark | Модели предложения, включая Inferact/MiniMax-M3-EAGLE3, его варианты GQA и Inferact/Kimi-K3-DSpark. [12] |
Экспериментальная установка и измерения
После включения спекулятивного декодирования практический вопрос заключается в том, улучшает ли дополнительная работа предложения комплексную производительность обслуживания. Кандидатуры токенов не нужно проверять на каждой позиции, поскольку целевая модель оценивает их перед фиксацией. Производительность, таким образом, зависит от того, сколько предложенных токенов принимается и перевешивает ли сэкономленная работа декодирования целевой моделью стоимость предложения и проверки.
Качество модели и производительность обслуживания оценивались с использованием бенчмарков, привязанных к задачам, а не случайных последовательностей токенов. Поведение принятия зависит от структуры и предсказуемости действительных выходных данных модели, поэтому подсказки на основе задач дают более представительный вид практической производительности.
Основные показатели производительности:
- Пропускная способность выходных токенов и ускорение над базовым показателем без спекуляции.
- Средняя принятая длина и показатели принятия предложенных токенов, если доступны.
- Качество модели относительно базового показателя без спекуляции.
Модели и охват экспериментов
Эксперименты охватывают пять подходов к спекулятивному предложению на нескольких семействах целевых моделей. Галочка указывает, что результаты бенчмарка доступны для этой комбинации целевой-метода модели; дефис указывает, что комбинация не была включена в текущие эксперименты.
| Целевая модель | Встроенное MTP | Gemma 4 MTP | EAGLE-3 | DFlash | DSpark |
|---|---|---|---|---|---|
| google/gemma-4-26B-A4B-it | - | ✓Red Hat AI | ✓Z-Lab | - | |
| google/gemma-4-31B-it | - | ✓Red Hat AI | ✓Z-Lab | ✓Red Hat AI | |
| Qwen/Qwen3-8B | - | - | ✓Red Hat AI | ✓Z-Lab | ✓DeepSeek |
| Qwen/Qwen3.5-27B | ✓Встроенное | - | - | ✓Z-Lab | - |
| Qwen/Qwen3.5-122B-A10B | ✓Встроенное | - | - | ✓Z-Lab | - |
| Qwen/Qwen3.6-27B | ✓Встроенное | - | - | ✓Z-Lab | - |
| Qwen/Qwen3.6-35B-A3B | ✓Встроенное | - | - | ✓Z-Lab | - |
| moonshotai/Kimi-K2.5 | - | - | ✓LightSeek | ✓Z-Lab | - |
| MiniMaxAI/MiniMax-M3-MXFP8 | - | - | ✓Inferact | - | - |
Таблица суммирует комбинации целевой-метода модели, включённые в эксперименты, и показывает, как спекулятивное декодирование ведёт себя на разных моделях, рабочих нагрузках и предложенных длинах. Каждый результат должен интерпретироваться в его конфигурации тестирования, так как архитектура модели, количество активных параметров, размер компонента предложения, рабочая нагрузка и условия обслуживания могут все повлиять на производительность.
Измерения пропускной способности
Для пропускной способности измеряется количество сгенерированных токенов в секунду в сравнении со стандартным авторегрессивным базовым показателем и развёртывается количество спекулятивных токенов для изучения того, как глубина спекуляции влияет на комплексную пропускную способность обслуживания.
Основные наблюдения
Измерения варьировались в зависимости от целевой модели, метода предложения, рабочей нагрузки и предложенной длины.
Для gemma-4-26B-A4B-it, наибольшие измеренные соотношения пропускной способности в тестируемом диапазоне составили 2,74× и 2,62× для Gemma 4 MTP на GSM8K и MBPP соответственно, и 2,87× и 2,79× для DFlash на MATH500 и HumanEval. Измерения EAGLE-3 варьировались от 2,11× до 2,27× в четырёх наборах данных.
Для gemma-4-31B-it, измерения Gemma 4 MTP достигали 2,00× на GSM8K и 1,99× на MBPP, в то время как DFlash достигал 2,34× на MATH500 и 2,05× на HumanEval. Измерения EAGLE-3 и DSpark были также выше базового показателя в четырёх оценённых наборах данных. Предложенная длина, связанная с наибольшей измеренной пропускной способностью, варьировалась в зависимости от рабочей нагрузки.
Для Qwen3-8B, измерения DSpark варьировались от 1,15× на MATH500 до 1,63× на GSM8K. Измерения DFlash варьировались от 1,08× до 1,27×. EAGLE-3 был выше базового показателя на GSM8K, HumanEval и MBPP, в то время как его наибольшее измеренное значение MATH500 оставалось ниже базового показателя.
Для Qwen3.5-27B, Qwen3.5-122B-A10B и Qwen3.6-27B, наибольшие измеренные встроенные-MTP значения в тестируемых диапазонах были выше, чем соответствующие наибольшие значения DFlash. Наибольшее соотношение в этой группе составило 2,20× для Qwen3.5-122B-A10B на MATH500. Предложенная длина встроенного MTP, связанная с наибольшей измеренной пропускной способностью, варьировалась от N=4 до N=7, в зависимости от модели и набора данных.
Для Qwen3.6-35B-A3B, измерения DFlash варьировались от 1,77× до 2,06×, при этом наибольшее значение встречалось в N=7 для каждого из четырёх наборов данных. Измерения встроенного MTP варьировались от 1,28× до 1,49×, при этом наибольшие значения встречались в N=6. Разница от измерений Qwen3.6-27B показывает, что результаты могут варьироваться между моделями в одном семействе.
Для MiniMax-M3-MXFP8, измерения EAGLE-3 достигали 2,09× на HumanEval при N=4. Для Kimi-K2.5, измерения EAGLE-3 достигали до 2,33× и измерения DFlash достигали до 2,68×. В тестируемых диапазонах наибольшие значения EAGLE-3 обычно встречались при N=4, в то время как наибольшие значения DFlash встречались при N=7.
Во всех экспериментах предложенная длина, связанная с наибольшей измеренной пропускной способностью, не была постоянной. Для методов последовательного предложения, пропускная способность часто увеличивалась в течение первых нескольких значений N перед выходом на плато. Для DFlash и DSpark, N=7 часто было среди параметров с более высокой пропускной способностью, в то время как более крупные значения не последовательно увеличивали пропускную способность.
Эти наблюдения отражают оборудование, программное обеспечение, целевую модель, контрольную точку предложения, рабочую нагрузку и параметры развёртывания, используемые в этом исследовании.
Соображения по настройке
Спекулятивное декодирование должно рассматриваться как оптимизация среды выполнения, а не как фиксированная установка, которая одинаково хорошо работает для каждой рабочей нагрузки. Значение num_speculative_tokens, связанное с наибольшей пропускной способностью, зависит от того, сколько предложенных токенов принимается и перевешивает ли сэкономленная работа декодирования целевой моделью стоимость предложения и проверки.
Наблюдаемость, таким образом, важна. Рекомендация на карточке модели или пример конфигурации обеспечивают полезную начальную точку, но окончательная установка должна быть выбрана с использованием представительных рабочих нагрузок и измерений комплексной производительности. Полезные сигналы включают пропускную способность, среднюю принятую длину, общий коэффициент принятия и коэффициент принятия для каждой позиции.
Большее окно предложения даёт системе больше возможностей для фиксации нескольких токенов в одном проходе проверки. Однако принятие может снизиться на более поздних позициях предложения. Когда это происходит, дополнительные кандидатуры способствуют мало, в то время как всё ещё добавляют работу предложения и проверки, вызывая выравнивание пропускной способности или регрессию.
Начните с поддерживаемой конфигурации
Для встроенного MTP N=1 является консервативной начальной точкой, поскольку вводит минимальную дополнительную последовательную работу предложения:
{"method": "mtp", "num_speculative_tokens": 1}После подтверждения корректности и стабильности, развёртывание большими значениями, такими как 2, 3, 4, 5, 6 и 7.
В наших измерениях, установка встроенного MTP, связанная с наибольшей измеренной пропускной способностью, варьировалась в зависимости от целевой модели и рабочей нагрузки. Для Qwen3.5-27B, наибольшая измеренная пропускная способность встречалась при N=5 для GSM8K и MATH500, N=4 для HumanEval и MBPP, и N=3 для MT-Bench. Для Qwen3.5-122B-A10B, наибольшая измеренная пропускная способность в четырёх указанных наборах данных рассуждений и кода встречалась при N=7.
Измерения Qwen3.6 также показывают, что эта установка может варьироваться между моделями в одном семействе. Для Qwen3.6-27B, наибольшие измеренные значения встречались при N=4 или N=5, в то время как пропускная способность для протестированных конфигураций Qwen3.6-35B-A3B увеличивалась до N=6.
Для Gemma 4 MTP и EAGLE-3, увеличение N также добавляет последовательную работу предложения. Короткое развёртывание, таким образом, полезно даже когда контрольная точка предоставляет рекомендуемую конфигурацию. В наших экспериментах Gemma 4 и EAGLE-3, измеренная пропускная способность обычно увеличивалась в течение первых нескольких значений N перед выходом на плато.
Для DFlash, начните с предложенных длин, рекомендуемых или поддерживаемых контрольной точкой предложения. Многие контрольные точки DFlash обучены с фиксированным размером блока. Например, когда:
block_size = 16максимальная предложенная длина, как правило:
num_speculative_tokens = 15потому что первая позиция — это подтверждённый якорный токен, а оставшиеся 15 позиций — кандидатуры предложения.
Это максимальная поддерживаемая предложенная длина, необязательно параметр с наибольшей пропускной способностью. На практике полезно протестировать меньшие значения, такие как:
N = 3, 7, 11, 15Во всех экспериментах DFlash, N=7 часто было среди параметров с более высокой пропускной способностью. Для некоторых рабочих нагрузок, наибольшая измеренная пропускная способность встречалась при N=11.
Для DSpark, num_speculative_tokens устанавливает количество кандидатур токенов, генерируемых в каждом спекулятивном раунде. В наших экспериментах vLLM, полная настроенная предложение была отправлена для проверки целевой моделью, поэтому значения, такие как N=3 и N=7, должны быть сравнены с использованием комплексной пропускной способности.
Мониторинг поведения принятия
Соответствующие сигналы для мониторинга включают:
| Сигнал | Что показывает |
|---|---|
| Пропускная способность | Как комплексная производительность обслуживания меняется относительно базового показателя без спекуляции |
| Средняя принятая длина | Сколько предложенных токенов фиксируется за спекулятивный раунд в среднем |
| Общий коэффициент принятия | Какая пропорция предложенных предложенных токенов принимается |
| Коэффициент принятия для каждой позиции | Остаются ли полезными более поздние позиции в предложении |
Принятие для каждой позиции особенно полезно при настройке предложенной длины. Если первые несколько позиций часто принимаются, но более поздние позиции способствуют очень мало, сокращение num_speculative_tokens может повысить пропускную способность, избегая ненужной работы предложения.
Метрики принятия должны интерпретироваться вместе с пропускной способностью. Метод может показать более высокую пропускную способность относительно базового показателя даже с более низким коэффициентом принятия, когда генерация предложения дешева. Напротив, высокий коэффициент принятия не обязательно соответствует более высокой пропускной способности, когда компонент предложения добавляет дополнительные нагрузки.
Согласуйте развёртывание с рабочей нагрузкой
Различные рабочие нагрузки могут произвести различные паттерны принятия.
В нашем измерениях GSM8K и MATH500, средние или большие предложенные длины часто связывались с более высокой измеренной пропускной способностью в тестируемых диапазонах. Для встроенного MTP на Qwen3.5-122B-A10B, измеренная пропускная способность увеличивалась до N=7. Для DFlash, более высокие измеренные значения часто встречались при N=7 или N=11.
Для HumanEval и MBPP, умеренные предложенные длины часто были среди параметров с более высокой пропускной способностью. Код содержит предсказуемую локальную структуру, но форматирование, идентификаторы и выборы реализации могут привести к тому, что иначе правдоподобное продолжение расходится.
Пример рабочего процесса настройки
-
Начните с конфигурации, поддерживаемой или рекомендуемой для контрольной точки.
-
Бенчмарк, используя представительные подсказки и параметры генерации.
-
Запишите пропускную способность, среднюю принятую длину и коэффициенты принятия.
-
Развёртывание нескольких меньших и больших предложенных длин.
-
Выберите установку на основе метрики, наиболее актуальной для предполагаемой рабочей нагрузки. В этих экспериментах, комплексная пропускная способность обслуживания была первичной метрикой выбора.
Выбранная конфигурация не обязательно имеет самое длинное предложение, наивысший коэффициент принятия или наибольшую среднюю принятую длину. Выбор должен учитывать компромисс между стоимостью предложения, стоимостью проверки, принятыми токенами и метрикой, наиболее актуальной для предполагаемой рабочей нагрузки.
Обучение спекулятора для новой целевой модели
Это руководство не охватывает обучение спекулятора в глубине. Следующий рабочий процесс суммирует практические соображения из указанных ресурсов vLLM Speculators и DeepSpec [13], [14] и [15].
Типичный рабочий процесс:
- Подготовка представительных подсказок.
- Генерирование ответов с целевой моделью.
- Выбор режима генерирования скрытого состояния.
- Сбор требуемых скрытых состояний целевой модели.
- Обучение спекулятора.
- Проверка принятия и пропускной способности обслуживания.
Подготовка представительных подсказок
Начните с подсказок, которые отражают ожидаемую рабочую нагрузку, такой как чат, математика, генерирование кода, использование инструментов или многоязычные задачи. Держите отдельный набор подсказок для оценки.
Ответы, используемые для обучения, должны быть сгенерированы точной целевой моделью, которую спекулятор будет поддерживать. Токенизатор, шаблон чата, режим мышления и конфигурация генерирования должны также соответствовать предполагаемому развёртыванию. Документация vLLM подчёркивает, что применение токенизатора или шаблона чата целевой модели к существующим ответам не делает данные целевыми; сами ответы должны приходить от целевой модели.
Выбор способа получения скрытых состояний
Спекулятор получает внутренние скрытые состояния от целевой модели во время обучения. Рабочий процесс vLLM Speculators поддерживает три способа их предоставления:
| Режим обучения | Как это работает | Основное соображение |
|---|---|---|
| Online | Скрытые состояния генерируются работающим сервером vLLM по мере необходимости и отбрасываются после | Избегает большого кэша на диске, но требует ресурсов для вывода целевой модели и обучения одновременно |
| Offline | Скрытые состояния генерируются и сохраняются перед началом обучения | Освобождает все GPU для обучения после, но требует значительное хранилище |
| Hybrid | Скрытые состояния генерируются и кэшируются во время первой эпохи, затем переиспользуются | Оплачивает стоимость генерирования один раз без требования отдельного этапа предварительной обработки |
Выбранный режим меняет, откуда приходят скрытые состояния; остальной рабочий процесс обучения в основном одинаков.
Сбор информации целевой модели
Сервер vLLM может запустить целевую модель и выставить скрытые состояния из слоёв, требуемых выбранным методом предложения. Когда выбраны пользовательские слои целевой модели, те же выборы слоёв должны также использоваться в конфигурации обучения спекулятора.
Собираемая информация зависит от метода:
- EAGLE-3 использует скрытые состояния из выбранных слоёв целевой модели для авторегрессивного предложения. [4]
- DFlash использует особенности целевой модели для обучения сети, которая предсказывает блок будущих позиций параллельно. [16]
- DSpark добавляет лёгкие последовательные и головки уверенности к сети предложения в стиле DFlash. [6]
- Обучение MTP настраивает собственный компонент MTP целевой модели и, таким образом, требует целевую модель, которая уже содержит совместимые слои MTP. [13]
Обучение и проверка спекулятора
Конфигурация спекулятора должна соответствовать размеру скрытого слоя целевой модели, словарю, токенизатору и выбранным слоям целевой модели. Параметры, специфичные для метода, такие как глубина сети предложения, размер блока, длина последовательности и скорость обучения, должны также быть выбраны.
После обучения, проверьте контрольную точку и обслуживайте её вместе с целевой моделью в vLLM. Потери обучения одни недостаточны для оценки результата; важные измерения — это принятая длина, коэффициент принятия, задержка предложения, использование памяти GPU и комплексная пропускная способность обслуживания. Руководство vLLM Speculators охватывает полный путь от подготовки данных и извлечения скрытого состояния до проверки контрольной точки и обслуживания.
Когда принятие слабо для конкретной рабочей нагрузки, смесь подсказок или конфигурация обучения могут быть отрегулированы и процесс повторён. Основной принцип — использовать ту же целевую модель, режим генерирования и представительную рабочую нагрузку, которые спекулятор должен поддерживать.
Итоговая сводка
Эта статья исследовала спекулятивное декодирование в vLLM как подход предложения-проверки для обслуживания LLM. Компонент предложения выдвигает кандидатуры возможных будущих токенов, а целевая модель оценивает предложение перед фиксацией каких-либо токенов.
Рассмотрены пять подходов к предложению: встроенное MTP, Gemma 4 MTP, EAGLE-3, DFlash и DSpark. Они различаются в основном в том, как используют информацию от целевой модели и генерируются ли кандидатуры токенов последовательно, параллельно или через комбинацию параллельного предсказания и лёгкой последовательной коррекции.
Эксперименты охватывали выбранные модели Gemma, Qwen, MiniMax и Kimi на AMD Instinct™ MI300X и MI355X GPU с использованием платформы программного обеспечения ROCm™. Измеренная пропускная способность варьировалась на разных целевых моделях, контрольных точках предложения, рабочих нагрузках, предложенных длинах и конфигурациях обслуживания.
Во всех протестированных конфигурациях, некоторые параметры произвели меньшие изменения или пропускную способность ниже базового показателя без спекуляции, в то время как несколько комбинаций целевой-рабочей нагрузки произвели соотношения пропускной способности выше 2×. Примеры на верхнем конце наблюдаемого диапазона включают 2,87× для DFlash на gemma-4-26B-A4B-it, 2,83× для Gemma 4 MTP на той же целевой модели и 2,68× для DFlash на Kimi-K2.5.
Предложенная длина была также важной переменной экспериментов. Увеличение num_speculative_tokens иногда увеличивало пропускную способность в течение первых нескольких параметров, в то время как более крупные значения могли привести к плато или более низкой пропускной способности. Рекомендации контрольной точки могут предоставить начальные точки, но измерения рабочей нагрузки представительными и метрики принятия требуются при выборе конфигурации развёртывания.
Будущая работа
Будущие бенчмарки могли бы включать несвязанные подходы, такие как спекуляция на основе n-грамм и суффиксное декодирование, особенно для рабочих нагрузок с повторяющимися паттернами токенов, такие как редактирование кода и агентские циклы.
Более широкая оценка на разных уровнях параллелизма, длинах подсказок и выходов, размерах пакетов и параметрах семплирования также помогла бы показать, как спекулятивное декодирование ведёт себя в различных условиях обслуживания.
Другое полезное направление — изучение того, как данные обучения спекулятора влияют на принятие на коде, математике, чате, многоязычных подсказках, использовании инструментов и структурированном выходе. Это могло бы предоставить более чёткие рекомендации при выборе или обучении контрольной точки предложения для конкретной рабочей нагрузки.
Наконец, более глубокое профилирование генерирования предложения, проверки целевой модели, поведения KV-cache, выполнения графа и планирования помогло бы объяснить различия производительности, наблюдаемые на разных целевых моделях и рабочих нагрузках.
Ссылки
- Документация vLLM, "Speculative Decoding" https://docs.vllm.ai/en/latest/features/speculative_decoding/
- Документация vLLM, "MTP Speculative Decoding" https://docs.vllm.ai/en/latest/features/speculative_decoding/mtp/
- Блог Google Developers, "Multi-token prediction in Gemma 4" https://blog.google/innovation-and-ai/technology/developers-tools/multi-token-prediction-gemma-4/
- Статья EAGLE-3, "Scaling up Inference Acceleration of Large Language Models via Training-Time Test" https://arxiv.org/pdf/2503.01840
- Z-Lab, "DFlash" репозиторий GitHub https://github.com/z-lab/dflash
- Статья DSpark, препринт arXiv https://arxiv.org/pdf/2607.05147
- Google, коллекция "Gemma 4" на Hugging Face https://huggingface.co/collections/google/gemma-4
- Коллекция модели LightSeek Foundation на Hugging Face https://huggingface.co/lightseekorg/models
- Red Hat AI, коллекция "Speculator Models" на Hugging Face https://huggingface.co/collections/RedHatAI/speculator-models
- Z-Lab, коллекция "DFlash" на Hugging Face https://huggingface.co/collections/z-lab/dflash
- DeepSeek-AI, коллекция "DeepSpec" на Hugging Face https://huggingface.co/collections/deepseek-ai/deepspec
- Коллекция модели Inferact на Hugging Face https://huggingface.co/Inferact/models
- Документация vLLM Speculators, "Training a Speculator" https://docs.vllm.ai/projects/speculators/en/latest/user_guide/tutorials/train/
- Проект vLLM, репозиторий "Speculators" GitHub https://github.com/vllm-project/speculators
- DeepSeek-AI, репозиторий "DeepSpec" GitHub https://github.com/deepseek-ai/DeepSpec
- Статья DFlash, препринт arXiv https://arxiv.org/pdf/2602.06036