Нейронные сети нетрадиционного ускорения

от автора

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

Решением этой проблемы стало спекулятивное декодирование: лёгкая модель-черновик (drafter) быстро генерирует последовательность токенов, а большая целевая модель проверяет весь блок за один параллельный проход.

Два наиболее продвинутых подхода такого декодирования на сегодняшний день: MTP (Multi-Token Prediction) и DFlash 2. Если MTP-подход известе уже почти 2 года, то второму поколению параллельного драфтера DFlash от Inco AI и z-lab нет ещё и недели. Давайте их сравним.

MTP

Подход MTP отказывается от идеи отдельной внешней модели. Вместо этого добавляются последовательные “головы” предсказания, обученные вместе с моделью или дообученные поверх неё. Этот метод используется в архитектурах уровня DeepSeek V3/V4 и Gemma.

Принцип работы MTP довольно прост: поверх скрытых состояний целевой модели обучаются k дополнительных лёгких LM-голов. k-я голова предсказывает токен t+k, опираясь на скрытые состояния и предыдущие предсказанные токены. Это позволяет основной модели за один проход провалидировать предсказания всех таких голов. При таком подходе не нужна внешняя модель-черновик, что обеспечивает минимальные накладные расходы на VRAM и идеальное совпадение с распределением токенов целевой модели.

Но такая генерация черновика внутри MTP всё ещё последовательна, так как предсказание идёт голова за головой, и с увеличением длины блока точность предсказания на дальних позициях резко падает. По независимым замерам AMD на DeepSeek V3 с MTP-модулем NextN в SGLang, ускорение в реальной serving-нагрузке составляет примерно 1.25–2.11x на синтетическом Random-датасете и 1.36–1.8x на ShareGPT [1]. Это заметно скромнее, чем маркетинговые цифры 4.66–7.28x из DeepSeek-V3 Technical Report [2].

DFlash 2

DFlash 2 использует принципиально другой подход: вместо последовательного угадывания токенов небольшая drafter-модель за один проход предсказывает кандидатов сразу для всех позиций блока. Такой подход даёт более чем 6-кратное ускорение в точности и в 2.5 раза обгоняет метод EAGLE-3 (поэтому методы EAGLE-2/EAGLE-3 не рассматриваются в данной статье, в этом уже нет смысла) [3].

Вместо “жадного” Top-1 (как в MTP) на каждую позицию DFlash 2 хранит топ-16 кандидатов. При таком подходе, по заявлениям разработчиков, на первой позиции блока верный токен присутствует в 99.5% случаев (Recall@16), тогда как Top-1 угадывает верно лишь в 85.4% [4].

Сама drafter-модель довольно лёгкая (примерно +2M параметров и +0.6% к латентности цикла). Она оценивает все соседние пары кандидатов и находит наилучший связный путь вместо того, чтобы просто брать лучший токен на каждой позиции независимо. Но это ещё не всё: перед и после attention- и MLP-слоёв драфтера добавлены лёгкие depthwise-свертки, устраняющие сильное падение точности предсказания на дальних позициях без раздувания основной модели.

Сравнение MTP и DFlash 2

Давайте сравним цифры из релиза DFlash 2 для Qwen3.8-27B с родными MTP-головами модели (блок размером 8, дефолтный сэмплинг модели). Сравнивать будем по средней длине принятия. Средняя длина принятия (Mean Accepted Length, MAL) представляет собой среднее количество токенов, которые главная (целевая) модель одобряет и оставляет за один проход верификации черновика. Чем больше MAL, тем быстрее работает модель.

Метрика

MTP

DFlash 2

Принцип черновика

Последовательный (голова за головой)

Параллельный блок (1 прогон)

Формирование кандидатов

Top-1 на каждую голову

Top-16 кандидатов на слот

Выбор последовательности

Жадный выбор голов

Оптимизация графа путей (Path Selector)

Требование к базовой модели

Нужна архитектурная поддержка и обучение головок

Работает с готовыми моделями через отдельный drafter

Средняя длина принятия (GSM8K)

5.02

5.46

Средняя длина принятия (HumanEval)

3.91

4.39

Итоговое ускорение

базовая точка сравнения

2.7–3.4x

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

Что выбрать?

Логика в данном случае простая:

  • Выбирайте MTP, если ваша базовая модель уже содержит нативные головки предсказания (DeepSeek V3/V4, Gemma 4) и вы не хотите держать в памяти отдельную модель-черновик.

  • Выбирайте DFlash 2, если вы запускаете стандартные open-source модели (Qwen, Llama, Muse Glimmer и т. д.) в vLLM/SGLang/llama.cpp. DFlash 2 не требует изменения весов базовой модели, даёт более высокий коэффициент принятия токенов и ускоряет генерацию почти в 3 раза без потери точности.

Как это запустить?

Ниже приведены рабочие команды на момент публикации (август 2026). Часть функциональности всё ещё живёт в PR-ветках, а не в релизных версиях. На релизе команды и параметры могут измениться.

Начнём с MTP. Важный нюанс: у MTP нет отдельного движка, это часть архитектуры конкретной модели. Поэтому запуск MTP на практике означает указание серверу пути к NextN/MTP-чекпойнту той же модели как к drafter-модели. Сервер сам распознает архитектуру и включит нативный MTP-путь.

SGLang

Пример для DeepSeek V3:

python3 -m sglang.launch_server \  --model-path deepseek-ai/DeepSeek-V3 \  --trust-remote-code \  --tp-size 8 \  --speculative-algorithm NEXTN \  --speculative-draft-model-path lmsys/DeepSeek-V3-NextN \  --speculative-num-steps 2 \  --speculative-eagle-topk 1 \  --speculative-num-draft-tokens 3

vLLM

В актуальных версиях достаточно указать в speculative_config путь до модели: если чекпойнт распознаётся как MTP-совместимый (по конфигу архитектуры), vLLM сам переключает метод на mtp внутри, без явного указания метода:

from vllm import LLMllm = LLM(    model="deepseek-ai/DeepSeek-V3",    tensor_parallel_size=8,    speculative_config={        "model": "deepseek-ai/DeepSeek-V3",  # тот же чекпойнт содержит MTP-слой        "num_speculative_tokens": 1,    },)

Проверяйте актуальный список поддерживаемых архитектур в документации vLLM, так как набор моделей с нативным MTP регулярно расширяется.

llama.cpp

В llama.cpp уже добавлена официальная поддержка MTP в виде флага --spec-type draft-mtp и контекста LLAMA_CONTEXT_TYPE_MTP. MTP-головы хранятся и загружаются из того же самого GGUF-файла основной модели.

LM Studio

В LM Studio также добавлена встроенная поддержка MTP для экосистемы GGUF. При выборе модели со встроенными MTP-головами в настройках Speculative Decoding можно включить режим MTP напрямую.

DFlash 2

SGLang

В SGLang поддержка спекулятивного декодирования DFlash 2 включается при запуске сервера sglang.launch_server через параметр --speculative-algorithm DFLASH и указанием пути к чекпоинту драфтера:

python3 -m sglang.launch_server \  --model-path Qwen/Qwen3.8-27B \  --speculative-algorithm DFLASH \  --speculative-draft-model-path z-lab/Qwen3.8-27B-DFlash2 \  --speculative-num-steps 8 \  --tp-size 1 \  --dtype bfloat16 \  --mem-fraction-static 0.8 \  --trust-remote-code

vLLM

Нужна сборка из PR-ветки для включения метода dflash в --speculative-config:

pip install -U "vllm @ git+https://github.com/vllm-project/vllm.git@refs/pull/52816/head"vllm serve Qwen/Qwen3.8-27B \  --speculative-config '{    "method": "dflash",    "model": "incoai/Qwen3.8-27B-DFlash2",    "num_speculative_tokens": 7  }'

llama.cpp

Тоже пока в PR, сборка из ветки pr-27342:

git clone https://github.com/ggml-org/llama.cpp.gitcd llama.cppgit fetch origin pull/27342/head:pr-27342git switch pr-27342# Для NVIDIA CUDAcmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_CUDA=ONcmake --build build -j# Для Apple Siliconcmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_METAL=ONcmake --build build -j./build/bin/llama-server \  -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M \  -hfd incoai/Qwen3.8-27B-DFlash2-GGUF:Q4_K_M \  --spec-type draft-dflash \  --spec-draft-n-max 7

Здесь -hf целевая модель, -hfd drafter, --spec-type draft-dflash включает параллельный блочный режим DFlash 2, а не классический авторегрессионный draft-model режим.

LM Studio

В LM Studio алгоритм DFlash 2 включается через стандартный механизм Speculative Decoding. Для работы вам потребуются два файла в формате GGUF: сама базовая модель и конвертированный драфтер DFlash 2, то есть файл draft-model нужно указывать явно в выпадающем списке Speculative Decoding.

Итого

Оба подхода решают одну и ту же проблему сериализации декодирования с разных сторон: MTP встраивает черновик в саму модель ценой архитектурных ограничений и деградации к концу блока, а DFlash 2 выносит черновик в отдельную лёгкую модель-черновик, параллелит генерацию блока целиком, находит оптимальный путь связывания токенов и использует локальную свёртку для борьбы с затуханием точности предсказания на дальних позициях.

На релизных бенчмарках DFlash 2 обгоняет MTP, предыдущий DFlash и конкурирующий DSpark практически на каждом датасете. При правильно настроенной модели использование DFlash 2 ускоряет генерацию вдвое.

References

  1. Efficient LLM Serving with MTP, AMD ROCm Blog (2025)

  2. Insights into DeepSeek-V3: Scaling Challenges and Reflections on Hardware for AI ArchitecturesConference: Proceedings of the 52nd Annual International Symposium on Computer Architecture, arXiv (2025)

  3. DFlash: Block Diffusion for Flash Speculative Decoding, arXiv (2026)

  4. DFlash 2: Keep Drafting Parallel, Inco AI (2026)

ссылка на оригинал статьи https://habr.com/ru/articles/1073504/