- 基础模型
- 大模型
- 多模态
- 模型量化
- 模型评测
- 本地部署
【免费下载链接】Qwen3.8-27B-Coder390-EfficientThink-Opus5.5-GPT6Astra-Grok4.7-DSV4Pro-K3-SFT-RLOO-MTP-DFlash2
Coder390(Qwen3.8-27B 后训练版)自带两套互斥的投机解码方案:DFlash2 外挂草稿模型与内置 MTP 头。单张 RTX PRO 6000 上实测:DFlash2 把单请求解码速度从 45.6 tok/s 提到180.3 tok/s(3.25 倍加速),MTP 提到 91.1 tok/s,两者都不能与「不开投机」相提并论。这篇文章把两套方案的原理差异、全部档位实测数据、选型与一键启动命令一次讲清,新手也能直接抄作业。
一分钟看懂:两套投机解码是什么关系
先给结论:
| MTP(多 Token 预测) | DFlash2(外挂草稿模型) | |
|---|---|---|
| 形态 | 主模型内置的 1 层 BF16 MTP 头(约 0.85 GB) | 独立草稿模型,FP8,约 2.4 GB |
| 每轮草稿量 | 3 步 × 每步 1 个 ≈3~4 个 token | 8 个 token / 轮(块大小 8) |
| 典型接受长度 | 约 2.8 | 约 4.1~4.3 |
| 单请求速度(静态 FP8,C1) | 91.1 tok/s | 180.3 tok/s |
| 依赖 | SGLang / vLLM / NInfer / llama.cpp 均可 | 目前仅 SGLang 验证(NInfer 包内自带) |
⚠️二者互斥:同一次启动只能开其中一种,不能叠加。
MTP 与 DFlash2 架构差异:为什么一个是「内置头」,一个是「外挂模型」
MTP:主模型自带的 1 层「预测头」
MTP 权重随主包发布(如 FP8/mtp-bf16.safetensors),主配置里声明mtp_num_hidden_layers: 1。它复用主干的词嵌入(mtp_use_dedicated_embeddings: false),每一步只预测下一个token,靠 3 步串联出一小段草稿,再由大模型一次验证。结构轻、显存开销小,但每轮产出的候选 token 少。
DFlash2:5 层滑动窗口草稿模型 + 候选选择器
DFlash2 是一个独立草稿模型(DFlash2DraftModel),关键设计见 FP8/DFlash2-FP8/config.json:
- 5 层滑动窗口注意力(窗口 2048),推理便宜;
- 块大小 8:一次前向并行提出 8 个候选 token;
- 候选选择器(
selector_top_k: 16,秩 256):从词表里挑 16 个高概率候选,降低「猜错」代价; - 特征融合:从目标模型第 5 / 19 / 33 / 47 / 61 层取 hidden state(共 64 层)作为输入,草稿「看得见」主模型的中间表示。
量化细节见 FP8/DFlash2-FP8/manifest.json:o_proj、gate/up/down 共 20 个张量为 FP8 E4M3(128×128 分块 scale),q/k/v 投影、fc、候选选择器、卷积与 norm 保留 BF16,与 FP8 主包同格式。BF16 / FP8 / NVFP4 各档自带的DFlash2-FP8/目录逐字节相同(2,407,384,680 字节)。
📌 小贴士:2026-10-08 起 DFlash2 草稿从「按张量 scale」换成「128×128 分块 scale」,只认旧格式的引擎(如 radiance)会加载成功但几乎不接受草稿 token,请用新版草稿。
3.25 倍加速的原理:接受率更低,为什么反而快 70%?
这是全文最值得看的一段。实测里 MTP 的接受率(0.619)其实高于 DFlash2(0.470),但 DFlash2 单请求快 70%。原因在于投机解码的成本结构:
每一轮的真正开销 =目标大模型的一次验证前向(贵)+ 草稿模型的前向(便宜)。
所以「平均每轮能白捡多少 token」比「单个 token 猜对概率」更关键:
- MTP:3 步草稿 ≈ 每轮提出 3~4 个候选,接受长度 2.858 → 平均每轮产出约2.9 个 token,代价是 3~4 次「贵」的验证步;
- DFlash2:每轮并行提出8 个候选(一次草稿前向),接受长度 4.289 → 平均每轮产出约4.3 个 token,代价只有约 1 次「贵」的验证步。
换算下来 DFlash2 的「每次验证换到的 token」约为 MTP 的2.9 倍,正好对应实测的 3.25× 与 1.82× 之比。一句话:接受率看准度,吞吐看每轮的批量——DFlash2 用「一次多猜、整批验证」赢下了单请求速度。
静态 FP8 全量实测:C1–C16 三档对比表
测试环境:单张 RTX PRO 6000 Blackwell 96GB,SGLang,32K 上下文,4096 生成上限,开思考,采样用模型默认值。C1 为主测,C4/C8/C16 为加大请求数的复测。完整原始数据见 evaluation/BENCH_STATICFP8.json,速览表见 evaluation/BENCH_STATICFP8.md。
| 投机方式 | 并发 | 总吞吐 tok/s | 单请求 tok/s(中位) | 接受长度 | 接受率 | 相对不开投机 |
|---|---|---|---|---|---|---|
| 不开投机 | C1 | 45.1 | 45.6 | — | — | 1.00× |
| 不开投机 | C16 | 422.8 | 38.4 | — | — | 1.00× |
| MTP(包内 BF16) | C1 | 82.1 | 91.1 | 2.858 | 0.619 | 1.82× |
| MTP(包内 BF16) | C8 | 380.3 | 71.1 | 2.813 | 0.604 | 1.34× |
| MTP(包内 BF16) | C16 | 612.7 | 60.1 | 2.747 | 0.582 | 1.45× |
| DFlash2 | C1 | 146.7 | 180.3 | 4.289 | 0.470 | 3.25× |
| DFlash2 | C8 | 646.3 | 113.9 | 4.131 | 0.447 | 2.28× |
| DFlash2 | C16 | 1,057.5 | 93.6 | 4.017 | 0.431 | 2.50× |
三个可以直接记住的推荐值(按「单请求速度不低于 C1 的 60% 时总吞吐最高」的规则):
| 场景 | 推荐配置 | 数据 |
|---|---|---|
| 单请求最快 | DFlash2 · C1 | 180.3 tok/s |
| 日常均衡 | DFlash2 · C8 | 总吞吐 646.3,单请求 113.9 |
| 总吞吐拉满 | DFlash2 · C16 | 1,057.5 tok/s |
| 只用 MTP · 日常 | MTP · C8 | 总吞吐 380.3,单请求 71.1 |
C1–C16 每一档,DFlash2 的总吞吐和单请求速度都高于 MTP,没有反转。
跨量化档位实测:NVFP4、NInfer、GGUF、INT8/INT4 上的表现
NVFP4 三档(SGLang)
W4A4 与 W4A4-W8A8 在 C1–C16 每一档 DFlash2 全面胜出;W4A16 只有 C4 一档是 MTP 总吞吐略高(351.4 对 315.2)。以单请求速度看差距最直观:
| 档位 | 不开投机 C1 | MTP C1 | DFlash2 C1 | DFlash2 C16 总吞吐 |
|---|---|---|---|---|
| NVFP4 W4A16 | 71.6 | 128.9 | 218.4 | 1,012.3 |
| NVFP4 W4A4 | 72.0 | 124.5 | 211.5 | 1,143.2 |
| NVFP4 W4A4-W8A8 | 63.0 | 116.3 | 216.8 | 1,146.4 |
原始数据:evaluation/BENCH_NVFP4_W4A16.json、evaluation/BENCH_NVFP4_W4A4.json、evaluation/BENCH_NVFP4_MIXED.json。
NInfer 两档(NVFP4-NInfer 包)
.ninfer包内同时内置了 Q8 MTP 头和 DFlash2 草稿,--spec mtp与--spec dflash2二选一(NInfer 并发上限 8):
| 投机方式(合计 tok/s) | C1 | C4 | C8 |
|---|---|---|---|
| 不开投机 · W4A4 | 68.1 | 195.8 | 306.8 |
| MTP(4 草稿)· W4A4 | 154.8 | 498.3 | 678.3 |
| DFlash2(8 草稿)· W4A4 | 207.1 | 539.6 | 975.9 |
| DFlash2(8 草稿)· W4A4-W8A8 | 199.1 | 650.1 | 804.9 |
GGUF 档(llama.cpp / NInfer):内置 MTP,无 DFlash2
GGUF / GGUF-NInfer 各档都内置 MTP 头(Q2/Q3/Q4 LynnStyle 为 Q4 MTP,另有 Q8 MTP 版本),但仓库不提供 GGUF 用的 DFlash2 草稿——这两档上 MTP 就是唯一投机选项:
| 档位 | llama.cpp · MTP | NInfer · MTP |
|---|---|---|
| Q2 LynnStyle | 180.1 tok/s(Q8MTP 检查) | 211.7 tok/s |
| Q3 LynnStyle | 138.3 tok/s(Q8MTP 检查);长测 C4 191.8 tok/s | 134.9 tok/s(Q8MTP 检查);短测 C8 512.3 tok/s |
| Q6_K | 快测 C1 97.2(总) | 推荐 C4 + MTP(235.5 tok/s) |
| Q8_0 | 快测 C4 190.8(总) | 推荐 C8 + MTP(486.3 tok/s) |
INT8 / INT4(vLLM):只有 MTP
- INT8 W8A8:包内无 MTP,另配 INT8/W8A8/MTP-BF16/ 草稿目录(3 个草稿 token):C1 从 31.1 →65.9 tok/s,C8 从 127.0 →389.8 tok/s,接受长度 2.74–2.90;
- INT4 W4A16:内置 MTP 头(INT4/W4A16/model_mtp.safetensors),整轮测评平均接受长度2.81,C1 单请求 135.2 tok/s(不开投机 68.4)。
两档均无 DFlash2 草稿。
选型建议:我该开 DFlash2 还是 MTP?
按部署形态对号入座即可:
- SGLang 部署 BF16 / FP8 / NVFP4 档→ 一律优先DFlash2(C1–C16 全胜);并发建议:交互 C1–C4、共用 C8、吞吐 C16。
- vLLM 部署→ 目前只有 MTP 路线:INT4 用内置头,INT8 用
MTP-BF16/草稿目录(FP8 档的 vLLM MTP 暂不可用)。 - GGUF(llama.cpp / NInfer)→ 用内置 MTP(
--spec mtp或--spec-type draft-mtp),没有 DFlash2。 - NInfer(NVFP4-NInfer 包)→ 包内二者都有,
--spec dflash2 --draft-tokens 8更快;MTP 取 1–5 个草稿 token,DFlash2 取 1–15。 - 显存紧张→ MTP 头仅 0.85 GB,比 2.4 GB 的 DFlash2 草稿轻,且接受率更高、多用户下(C8+)差距缩小。
✅ 额外保证:投机解码只改变速度,不改变输出分布——DFlash2 / MTP 生成的内容与不开投机逐字一致(同分布验证),可以放心用于生产。
快速上手:一键启动命令(SGLang)
DFlash2 与 MTP二选一,下面以 FP8 档为例(BF16 / NVFP4 档只需换--model-path)。
SGLang · DFlash2
python -m sglang.launch_server \ --model-path ./FP8 \ --context-length 32768 \ --max-running-requests 16 \ --mamba-ssm-dtype bfloat16 \ --speculative-algorithm DFLASH \ --speculative-draft-model-path ./FP8/DFlash2-FP8 \ --speculative-draft-model-quantization fp8 \ --speculative-num-draft-tokens 8SGLang · MTP(包内 BF16 头)
python -m sglang.launch_server \ --model-path ./FP8 \ --context-length 32768 \ --max-running-requests 16 \ --mamba-ssm-dtype bfloat16 \ --speculative-algorithm EAGLE \ --speculative-num-steps 3 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 4NInfer 上的对应写法(.ninfer包内置两种草稿,加一个参数即可切换):
# MTP ninfer-serve ./NVFP4-NInfer/W4A4/Qwen3.8-27B-Coder390-EfficientThink-W4A4-MTP-DFlash2.ninfer \ --max-context 102400 --kv-capacity 819200 --max-concurrency 8 --kv-dtype fp8 \ --spec mtp --draft-tokens 4 --lm-head-draft # DFlash2(把上一行最后一段换成下面这行) --spec dflash2 --draft-tokens 8 --lm-head-draft小结与注意事项
- DFlash2 = 单请求速度之王:C1 下 180.3 tok/s,是「不开投机」(45.6 tok/s)的3.25 倍、MTP(91.1 tok/s)的近 2 倍;C16 总吞吐 1,057.5 tok/s 同样全场最高。
- MTP = 轻量兜底:0.85 GB 的内置头、接受率更高,适合显存紧张、只跑 vLLM / llama.cpp 的场景,C8 下仍有 71.1 tok/s 单请求。
- 速度数字依赖测试口径(SGLang、32K 上下文、4096 生成上限、RTX PRO 6000),不同硬件与上下文下绝对值会变,但「DFlash2 ≥ MTP ≥ 不开投机」的排序在全部已测档位中成立。
- DFlash2 目前仅 SGLang 验证(NInfer 包内可用);GGUF 两档请用内置 MTP;MTP 与 DFlash2 永远互斥。
- 想核对全部数据:成绩文件 evaluation/SCORES_STATICFP8.json、evaluation/SCORES_NVFP4_W4A4.json,校验用各目录下的
SHA256SUMS。
- 基础模型
- 大模型
- 多模态
- 模型量化
- 模型评测
- 本地部署
【免费下载链接】Qwen3.8-27B-Coder390-EfficientThink-Opus5.5-GPT6Astra-Grok4.7-DSV4Pro-K3-SFT-RLOO-MTP-DFlash2
相关推荐
PaddleNLP投机解码:MTP技术推理加速
PaddleNLP投机解码:MTP技术推理加速 引言:大模型推理的瓶颈与突破 在大语言模型(LLM)的实际部署中,推理速度一直是制约应用性能的关键因素。传统的自
大模型NLP预训练微调模型推理服务模型量化分布式训练RLHF人工智能TensorFold 投机解码完全指南:MTP 草稿头、DFlash2 Drafter 与 64 并发下的接受规则
TensorFold 投机解码完全指南:MTP 草稿头、DFlash2 Drafter 与 64 并发下的接受规则 TensorFold 是一个用 Zig 编写
如何加速推理:Qwen3.8-27B-GSQ-RCO-GGUF的-mtp版本MTP投机解码完全指南
如何加速推理:Qwen3.8 27B GSQ RCO GGUF的 mtp版本MTP投机解码完全指南 Qwen3.8 27B GSQ RCO GGUF 是 IST
大模型模型量化本地部署多模态
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考