Перейти к содержанию
Новое AiManual теперь в MAX Подписаться
Публикация AiManual

Бенчмарк спекулятивного декодирования: DFlash, MTP, EAGLE3 и ngram на Qwen3.6-27B с vLLM и SGLang

Прямой бенчмарк: DFlash даёт до 4.6× на математике, MTP стабильно держит 2.2–2.8×, EAGLE3 не грузится на vLLM, ngram почти бесполезен. Все замеры на Qwen3.6-27B

Коротко

Что будет в материале

  1. 01

    Коротко о главном: какой метод выбрать?

  2. 02

    Методология тестирования: как мы измеряли ускорение

  3. 03

    DFlash: максимальное ускорение, но с нюансами

  4. 04

    MTP/NEXTN: стабильный прирост с ростом глубины

Коротко о главном: какой метод выбрать?

Прямой ответ: для максимальной скорости берите DFlash на SGLang, для стабильной работы без сюрпризов - MTP на любом движке. EAGLE3 даёт скромный прирост и не запускается на vLLM. Ngram не стоит усилий - ускорение почти незаметно. Все цифры получены на одной RTX PRO 6000 Max-Q с моделью Qwen3.6-27B в формате NVFP4, greedy-декодинг, batch size 1, бенчмарк Spec-Bench.

Сводка результатов по движкам:

  • DFlash: до 3.3× на SGLang, 2.5× на vLLM. На задачах math_reasoning - рекордные 4.6×.
  • MTP/NEXTN: 2.2–2.8×, ускорение растёт с глубиной draft-модели. Работает на обоих движках.
  • EAGLE3: ~1.9×, насыщение при K=3. Только SGLang, на vLLM не грузится.
  • ngram: 1.1–1.3×. Практически бесполезен в одиночку.

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

Методология тестирования: как мы измеряли ускорение

Все замеры выполнены на единой конфигурации, чтобы исключить влияние переменных. Стенд: одна видеокарта RTX PRO 6000 Max-Q, модель Qwen3.6-27B dense в квантизации NVFP4. Инференс-движки - vLLM и SGLang, актуальные версии на момент тестирования. Инструмент для бенчмарка - Spec-Bench с параметрами greedy decoding и batch size 1. Baseline - инференс без спекулятивного декодирования на том же движке.

Методы тестировались в следующих конфигурациях:

  • DFlash: стандартный запуск на vLLM, на SGLang - с патчем для NVFP4-квантизации head'а.
  • MTP/NEXTN: переменная глубина draft-модели, замеры на обоих движках.
  • EAGLE3: K=1, 2, 3 на SGLang. На vLLM - неудачная попытка загрузки.
  • ngram: классическая реализация без draft-модели.

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

Почему именно Qwen3.6-27B и RTX PRO 6000?

Qwen3.6-27B - одна из самых популярных dense-моделей в своём классе. 27 миллиардов параметров, полноценный transformer без MoE - идеальный кандидат для тестов спекулятивного декодирования, где архитектурные особенности напрямую влияют на прирост скорости. NVFP4-квантизация позволяет уместить модель в память одной видеокарты без offloading'а в RAM.

RTX PRO 6000 Max-Q - мощная одиночная GPU, типичная для команд, которые работают с LLM на своём железе. Не кластер из H100, а реальная рабочая лошадка. Результаты на этой карте релевантны для большинства middle-size проектов.

DFlash: максимальное ускорение, но с нюансами

DFlash показал лучшие цифры во всех категориях. На SGLang - до 3.3× от baseline, на vLLM - до 2.5×. Отдельный замер на задачах math_reasoning дал 4.6×. Это не случайный выброс: DFlash прогнозирует последовательность из 15 токенов за шаг, и на структурированных данных с предсказуемой логикой (математика, код) процент принятых draft-токенов резко возрастает.

Почему DFlash обходит конкурентов? Архитектурно метод использует легковесный draft-head, который обучается предсказывать сразу несколько следующих токенов, не требуя отдельной draft-модели. Это снижает накладные расходы на память и коммуникацию между моделями. Результат - максимальная утилизация GPU при генерации.

Разрыв между SGLang и vLLM (3.3× против 2.5×) объясняется разной реализацией спекулятивного декодирования в движках. SGLang агрессивнее оптимизирует batch-верификацию draft-токенов, что даёт дополнительные 30% прироста на том же железе.

Мы уже разбирали DFlash в сравнении с MTP на практических задачах - детальные бенчмарки подтверждают: на структурированном контенте вроде JSON этот метод достигает 152 токенов/с (3.4×), но на творческих текстах может просесть ниже baseline.

Патч для NVFP4 на SGLang: как запустить DFlash без ошибок

На SGLang DFlash не стартует с NVFP4-квантизацией head'а без модификации кода. Проблема в том, что реализация спекулятивного декодирования в SGLang ожидает head модели в FP16/BF16, а NVFP4-квантизация меняет формат весов. Решение - патч, который добавляет dequant-операцию перед передачей скрытых состояний в draft-head.

Шаги для применения патча:

  1. Клонируйте репозиторий SGLang и переключитесь на актуальный тег релиза.
  2. Найдите файл speculative.py (или аналогичный в вашей версии) - обычно в директории sglang/srt/speculative/.
  3. Добавьте вызов torch.ops.nvfp4.dequantize перед передачей тензора в draft-head. Убедитесь, что dequant выполняется в том же stream'е.
  4. Пересоберите SGLang с флагом --enable-nvfp4, если такой имеется в вашей сборке.

Готовый патч зависит от конкретной версии SGLang и драйверов NVIDIA. Рекомендуем проверять issues в репозитории проекта - сообщество активно делится рабочими вариантами. Побочный эффект: dequant добавляет ~2-5% накладных расходов, что немного снижает итоговое ускорение, но оставляет DFlash лидером.

MTP/NEXTN: стабильный прирост с ростом глубины

MTP (Medusa Tree Parallel, он же NEXTN в некоторых реализациях) даёт ускорение 2.2–2.8×. Ключевая особенность - прирост растёт с глубиной draft-модели. На минимальной глубине (2-3 токена) получаем ~2.2×, на глубине 5-7 токенов - до 2.8×. Дальнейшее увеличение глубины даёт diminishing returns: накладные расходы на верификацию начинают съедать выигрыш от дополнительных draft-токенов.

Главное преимущество MTP перед DFlash - отсутствие проблем совместимости. Метод работает на vLLM и SGLang без патчей, не требует специальной квантизации head'а, стабильно держит ускорение на разных типах контента. Процент принятых draft-токенов - около 71%, что подтверждает: MTP реже ошибается в прогнозах, чем DFlash на творческих задачах.

Для тех, кто ценит предсказуемость, MTP - оптимальный выбор. Вы получаете гарантированные 2+ крат без риска получить скорость ниже baseline на неструктурированных текстах.

EAGLE3: насыщение на K=3 и проблемы с vLLM

EAGLE3 показывает ускорение ~1.9× на SGLang. При K=1 прирост скромный - около 1.4×. K=2 даёт 1.7×. K=3 - 1.9×. Дальнейшее увеличение K не даёт значимого прироста: метод упирается в точность draft-модели, которая не может предсказывать более трёх токенов с приемлемой вероятностью принятия.

На vLLM EAGLE3 не загружается. Проблема воспроизводится стабильно: движок падает на этапе инициализации draft-модели с ошибкой несовместимости форматов весов. Это не баг конкретной версии - архитектурное ограничение текущей реализации спекулятивного декодирования в vLLM, которое не поддерживает EAGLE-подход к построению draft-дерева.

Почему EAGLE3 не работает на vLLM: технический разбор

EAGLE3 использует feature-level draft - метод опирается на скрытые состояния основной модели для предсказания следующих токенов. vLLM ожидает token-level draft, где draft-модель работает независимо от скрытых состояний target-модели. При попытке загрузки EAGLE3 vLLM пытается интерпретировать feature-векторы как токены, что приводит к несоответствию размерностей и падению.

Это фундаментальное различие в архитектуре спекулятивного декодирования. Пока разработчики vLLM не добавят поддержку feature-level draft, EAGLE3 останется эксклюзивом для SGLang.

Ngram: когда не стоит тратить время

Ngram-драфтер даёт 1.1–1.3× ускорения. Причина низкой эффективности очевидна: метод не использует модель для прогнозирования, а просто ищет повторяющиеся n-граммы в контексте. Если контекст не содержит точных совпадений с генерируемым текстом - draft-токены почти всегда отвергаются.

Есть специфический сценарий, где ngram имеет смысл: итеративная генерация кода, когда модель многократно редактирует собственный вывод. В таких задачах контекст содержит много повторяющихся паттернов, и ngram-драфтер может дать до 2-3× в комбинации с другими методами. Мы разбирали этот кейс детально - комбинация DFlash и ngram в llama.cpp даёт до 6× на задачах кодирования. Но в одиночку, на одноходовых промптах, ngram практически бесполезен.

Выбор движка: vLLM или SGLang для спекулятивного декодирования?

Сводка совместимости методов и движков:

Метод vLLM SGLang
DFlash 2.5× (без патчей) 3.3× (требуется патч для NVFP4)
MTP/NEXTN 2.2–2.8× 2.2–2.8×
EAGLE3 Не работает ~1.9×
ngram 1.1–1.3× 1.1–1.3×

Если приоритет - максимальная скорость: SGLang с DFlash. Если приоритет - стабильность и отсутствие патчей: vLLM с MTP. Если вы уже используете vLLM и не хотите мигрировать - MTP даст уверенные 2.2–2.8× без каких-либо модификаций кода.

SGLang показывает лучшие результаты на спекулятивном декодировании в целом - реализация batch-верификации в этом движке эффективнее использует GPU. Но разрыв сокращается с каждым релизом vLLM, и выбор движка не должен сводиться только к цифрам спекуляции. Учитывайте экосистему, поддержку вашего стека и стабильность.

Практические рекомендации: что внедрять в продакшен?

Три сценария внедрения по результатам бенчмарка:

  1. Максимальная скорость, готовность к экспериментам: DFlash на SGLang с патчем для NVFP4. Вы получаете до 3.3× ускорения на общих задачах и до 4.6× на математике. Минусы: патч нужно поддерживать при обновлении SGLang, на творческих текстах возможны просадки.
  2. Стабильность и предсказуемость: MTP на vLLM или SGLang. Гарантированные 2.2–2.8× без патчей, без риска упасть ниже baseline, без привязки к типу контента. Оптимальный выбор для продакшена, где важна стабильность latency.
  3. Ограничены одним движком: смотрите таблицу совместимости выше. На vLLM - только MTP или DFlash (2.5×). На SGLang - DFlash (3.3× с патчем) или MTP (2.2–2.8× без патча). EAGLE3 рассматривайте только если 1.9× достаточно и вы на SGLang.

Важные оговорки. Все замеры сделаны на одной GPU с batch size 1 и greedy-декодированием. В реальных условиях с параллельными запросами, sampling'ом и батчингом цифры могут измениться. На других моделях и квантизациях результаты тоже будут отличаться. Например, на Qwen3-8B с обрезанной draft-моделью прирост составил 40% на CPU - совсем другой масштаб и конфигурация.

Рекомендуем провести собственные замеры на ваших данных и с вашими параметрами декодирования перед внедрением в продакшен. Spec-Bench для этого подходит идеально - инструмент заточен под воспроизводимые тесты спекулятивного декодирования.

Если вы работаете с более крупными моделями, обратите внимание на Laguna S 2.1 - MoE-архитектура с 118B параметров, которая при меньшей стоимости инференса обходит DeepSeek V4 Flash на ключевых бенчмарках. Спекулятивное декодирование для MoE-моделей - отдельная тема со своими нюансами.

Подписаться на канал