文章摘要
2026 年 6 月 15 日,Z Lab、Modal 和 SGLang 联合发布 DFlash + Spec V2——推测解码的下一代方案。DFlash 用块扩散替代自回归草稿,用 KV 注入复用 target 特征,在 Qwen 3.5 397B 上实现 4.3x 基线吞吐。Spec V2 通过 overlap 调度消除 Host 开销,GPU 利用率从 70% 提升到 95%。本文从原理到部署完整拆解:块扩散工作机制、KV 注入实现、Spec V2 调度策略、SGLang 完整部署命令、草稿模型训练流程、与 EAGLE-3/MTP 的全面对比。
一、推测解码的下一个范式:从自回归草稿到块扩散草稿
2026 年 6 月 15 日,Z Lab、Modal 和 SGLang 团队联合发布了 DFlash + Spec V2——推测解码(Speculative Decoding)的下一代方案。
如果说 EAGLE-3 在 2025 年用「直接 Token 预测」统一了推测解码的赛道,那么 DFlash 则在 2026 年用「块扩散 + KV 注入」打破了自回归草稿模型的天花板。
核心数据:
- Qwen 3.5 397B-A17B 上,DFlash 实现 4.3x 基线吞吐(HumanEval 数据集,并发 1)
- 对比原生 MTP(Multi-Token Prediction),DFlash 快 1.5x
- 对比 EAGLE-3(5 层),DFlash 在相同接受长度下快 1.5x
为什么 DFlash 能赢?
核心创新是两个:块扩散(Block Diffusion) 和 KV 注入(KV Injection)。
- 块扩散:草稿模型不再逐 token 生成,而是一次性并行生成一整个 block(4/8/16 个 token)。这完美匹配 GPU 的并行计算能力。
- KV 注入:将 target model 的隐藏状态直接注入草稿模型的 KV Cache,让草稿模型「站在巨人的肩膀上」预测下一个 block。
二、DFlash 架构拆解:块扩散 + KV 注入的工作原理
DFlash 的论文(arXiv:2602.06036)提出了一个反直觉的洞察。 草稿模型不需要自己理解上下文,target model 已经理解得够好了。
2.1 传统方案的瓶颈
EAGLE-3 的做法是:从 target model 最后一层提取隐藏状态,输入到一个轻量 MLP 草稿模型中,逐 token 预测。问题是:
- 草稿模型需要自己建模上下文——即使只有 5 层,它也需要理解「当前对话在说什么」
- 逐 token 生成是串行的——生成 8 个 token 需要 8 次前向传播
- 草稿模型越深,延迟越高——但浅了又影响接受率
2.2 DFlash 的解法:KV 注入
DFlash 的核心创新是把 target model 的隐藏状态直接注入到草稿模型每一层的 KV Cache 中。
具体来说:
- Target model 正常执行前向传播,产生每一层的 K、V 张量
- 这些 K、V 张量通过一个轻量线性投影(KV Projection),转换为草稿模型可用的格式
- 注入到草稿模型对应层的 KV Cache 中
- 草稿模型只需要「关注」这些已有的 KV,专注于预测下一个 block
这意味着草稿模型不需要自己建模上下文——它直接复用 target model 的理解。
2.3 块扩散:并行生成 block
草稿模型使用块扩散(Block Diffusion) 而非自回归来生成 token:
- 初始化一个全为 [MASK] 的 block(长度 4/8/16)
- 单次前向传播,预测所有位置的 token 概率
- 迭代去噪(通常 2-3 轮),逐步确定每个位置的 token
- 输出完整的 block
关键优势:无论 block 大小,扩散过程只需要 2-3 次前向传播。 生成 16 个 token 和生成 4 个 token 的延迟几乎相同。
2.4 性能对比
在 Qwen 3-4B 上,5 层 DFlash vs 5 层 EAGLE-3 的详细对比:
| 指标 | EAGLE-3 | DFlash | 提升 |
|---|---|---|---|
| GSM8K 接受长度 | 4.2 | 4.2 | 持平 |
| GSM8K 加速比 | 2.1x | 3.3x | +57% |
| HumanEval 接受长度 | 4.3 | 4.0 | -7% |
| HumanEval 加速比 | 2.2x | 3.2x | +45% |
| MT-Bench 接受长度 | 3.1 | 3.0 | -3% |
| MT-Bench 加速比 | 1.4x | 2.2x | +57% |
接受长度相近,但加速比大幅提升——这就是块扩散并行化的威力。
💡 一句话理解
KV 注入的思想可以推广到其他场景。如果你有一个大模型和一个小模型,可以让小模型复用大模型的中间表示,而不是让小模型自己理解输入。这在知识蒸馏、模型压缩中都有应用。
⚠️ 常见踩坑
DFlash 的 KV 注入需要草稿模型和 target model 的隐藏维度兼容。目前官方支持的组合有限(见第六节),自定义组合需要修改 KV 投影层。
三、Spec V2 引擎:消除 Host 开销的 overlap 调度
DFlash 的草稿模型已经够快了,但 SGLang 团队发现:Host 端的调度开销才是更大的瓶颈。
3.1 Host 开销问题
在推测解码中,调度器(Scheduler)运行在 Host(CPU)上,模型执行在 GPU 上。每个 batch 完成后,Host 需要:
这些操作看似很快,但在高并发(32+ 请求)下,Host 的串行处理成为瓶颈。GPU 在等待 Host 指令时处于空闲状态。
3.2 Spec V2 的 Overlap 调度
Spec V2 引擎的核心思想是让 Host 工作和 GPU 工作重叠执行:
- Batch N-1 清理 ∥ Batch N 执行:GPU 开始执行 Batch N 时,Host 同时清理 Batch N-1 的结果(stop token 检测、元数据更新)
- Batch N KV 分配 ∥ Batch N-1 执行:GPU 执行 Batch N-1 时,Host 同时为 Batch N 分配 KV Cache
效果:Host 开销被完全隐藏,GPU 利用率从 ~70% 提升到 ~95%。
在 Qwen 3-8B 单 B200、并发 32 的测试中,Spec V2 将吞吐从 11.4 ktok/s 提升到 15.3 ktok/s,提升 33%。
3.3 DFlash + Spec V2 的叠加效果
DFlash 和 Spec V2 解决的是不同层面的问题:
- DFlash:加速草稿模型本身(GPU 层面)
- Spec V2:消除调度开销(Host-GPU 交互层面)
两者叠加后,在 Qwen 3.5 397B-A17B 上实现了 4.3x 基线吞吐和 1.5x MTP 吞吐。
# SGLang Spec V2 + DFlash 部署命令(Qwen 3.5 397B-A17B)
# 硬件:8xB200 GPU
export SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1
python -m sglang.launch_server \
--model-path Qwen/Qwen3.5-397B-A17B \
--trust-remote-code \
--speculative-algorithm DFLASH \
--speculative-draft-model-path modal-labs/Qwen3.5-397B-A17B-DFlash \
--speculative-dflash-block-size 8 \
--speculative-draft-attention-backend fa4 \
--attention-backend trtllm_mha \
--linear-attn-prefill-backend triton \
--linear-attn-decode-backend flashinfer \
--mamba-scheduler-strategy extra_buffer \
--tp-size 8 \
--max-running-requests 32 \
--cuda-graph-max-bs-decode 32 \
--cuda-graph-backend-prefill tc_piecewise \
--enable-flashinfer-allreduce-fusion \
--mem-fraction-static 0.8 \
--host 0.0.0.0💡 一句话理解
四、实战:在 Qwen 3-4B 上训练 DFlash 草稿模型
官方已经提供了多个模型的 DFlash 草稿模型,但如果你需要在自己的模型或数据集上训练,以下是完整流程。
4.1 训练数据准备
DFlash 草稿模型的训练数据来自 target model 的执行轨迹:
关键:训练数据的分布必须与推理时的分布一致。 如果 target model 主要用于代码生成,训练数据也应该以代码为主。
4.2 训练配置
DFlash 草稿模型非常轻量——只有 5 层,参数量约为 target model 的 1-2%。
训练超参数建议:
4.3 评估指标
训练完成后,需要评估:
- 接受长度(Acceptance Length):草稿 block 中被 target 接受的平均 token 数
- 端到端加速比(Speedup):对比无推测解码的基线
- 不同并发下的表现:并发 1/8/32 的加速比可能差异很大
经验法则:接受长度 > 3.0 就算合格,> 4.0 算优秀。
# DFlash 草稿模型训练伪代码
import torch
from torch.optim import AdamW
from dflash import DFlashDraftModel, BlockDiffusionTrainer
# 1. 加载 target model(冻结参数)
target_model = load_target_model("Qwen/Qwen3-4B")
target_model.eval()
for param in target_model.parameters():
param.requires_grad = False
# 2. 初始化草稿模型(5 层,轻量配置)
draft_model = DFlashDraftModel(
hidden_size=target_model.config.hidden_size,
num_layers=5,
block_size=8, # 每次生成 8 个 token
diffusion_steps=2, # 2 轮去噪
kv_projection_dim=target_model.config.hidden_size,
)
# 3. 准备训练数据
training_data = collect_target_trajectories(
model=target_model,
prompts=load_prompts("data/code_prompts.jsonl"),
max_samples=10000,
)
# 4. 训练
trainer = BlockDiffusionTrainer(
draft_model=draft_model,
target_model=target_model,
optimizer=AdamW(draft_model.parameters(), lr=1e-4),
block_size=8,
diffusion_steps=2,
)
trainer.train(
dataset=training_data,
batch_size=256,
num_epochs=5,
eval_every=500,
)
# 5. 评估
metrics = trainer.evaluate(
eval_dataset=load_prompts("data/eval_prompts.jsonl"),
)
print(f"Acceptance Length: {metrics['acceptance_length']:.2f}")
print(f"Speedup: {metrics['speedup']:.2f}x")💡 一句话理解
训练数据的质量比数量更重要。1000 条高质量、与目标场景匹配的样本,效果通常好于 10000 条随机样本。优先使用 target model 实际会遇到的提示分布。
⚠️ 常见踩坑
训练草稿模型时需要 target model 的每一层隐藏状态,这会占用大量显存。对于 70B+ 的模型,建议使用 gradient checkpointing 或在多个 GPU 上分布式收集。
五、DFlash vs EAGLE-3 vs MTP:完整对比与选型指南
DFlash 不是要替代 EAGLE-3 或 MTP,而是在特定场景下提供更优选择。
5.1 详细对比
| 维度 | EAGLE-3 | MTP | DFlash |
|---|---|---|---|
| 草稿方式 | 自回归逐 token | 原生多头 | 块扩散并行 |
| 草稿模型 | 独立轻量 MLP | 模型内置 | 独立扩散模型 |
| KV 复用 | 仅输入层 | 无(独立头) | 每层注入 |
| 最大 block | 4(受限于自回归) | 模型定义 | 16(可配置) |
| 最佳加速 | 2.2x(HumanEval) | 2.8x(通用) | 4.3x(HumanEval) |
| 显存开销 | ~4% | ~2% | ~5% |
| 训练数据 | 中等(需要特征) | 无需(内置) | 中等(需要特征) |
| 支持模型 | 广泛 | 仅 Gemma 4/DeepSeek-V4 | 多个主流模型 |
| 引擎支持 | vLLM, SGLang | vLLM, SGLang | SGLang(主) |
5.2 选型决策
选 DFlash 的场景:
- ✅ 追求极致加速比(4x+)
- ✅ 使用 SGLang 引擎
- ✅ 有 GPU 资源训练草稿模型(或官方已提供)
- ✅ 并发场景(高吞吐需求)
选 EAGLE-3 的场景:
选 MTP 的场景:
- ✅ 使用 Gemma 4 或 DeepSeek-V4
- ✅ 不想额外训练/加载草稿模型
- ✅ 需要最简单的部署(零额外组件)
5.3 混合策略
在实际生产中,可以根据场景动态选择:
SGLang 支持在同一服务中配置多种推测策略,按请求类型路由。
💡 一句话理解
六、可用的 DFlash 草稿模型与部署资源
Z Lab、Modal 和 LMSYS 联合发布了多个模型的 DFlash 草稿模型,可以直接下载使用。
6.1 已发布的草稿模型
| Target Model | Draft Model | HuggingFace |
|---|---|---|
| Qwen 3.5 397B-A17B | DFlash Draft | modal-labs/Qwen3.5-397B-A17B-DFlash |
| Qwen 3-4B | DFlash Draft | z-lab/Qwen3-4B-DFlash |
| Qwen 3-8B | DFlash Draft | z-lab/Qwen3-8B-DFlash |
| Llama 3-70B | DFlash Draft | z-lab/Llama3-70B-DFlash |
所有模型都在 HuggingFace 上公开,可以免费下载使用。
6.2 部署硬件建议
| 模型规模 | 最低 GPU | 推荐 GPU | 预期加速 |
|---|---|---|---|
| 4B | 1x A100 40G | 1x A100 80G | 3.0-3.5x |
| 8B | 1x A100 80G | 2x A100 80G | 3.0-3.5x |
| 70B | 4x A100 80G | 8x A100 80G | 2.5-3.0x |
| 397B (MoE) | 8x B200 | 8x B200 | 4.0-4.3x |
6.3 性能调优参数
启动命令中的关键参数:
--speculative-dflash-block-size:block 大小(4/8/16)。越大接受长度越高,但草稿延迟也越高。建议从 8 开始调。--speculative-draft-attention-backend:草稿模型的注意力后端。fa4(FlashAttention 4)最快,但需要 Ampere+ GPU。--max-running-requests:最大并发请求数。影响 Spec V2 的 overlap 效果。建议设为 GPU SM 数量。--mem-fraction-static:静态 KV Cache 占比。0.8 是安全值,可以试 0.85。
# 使用 OpenAI 兼容 API 测试 DFlash 加速效果
import openai
import time
client = openai.OpenAI(
base_url="http://localhost:30000/v1",
api_key="dummy"
)
# 测试 HumanEval 中的一个代码生成任务
prompt = """
Write a Python function that finds all prime numbers up to n using the Sieve of Eratosthenes.
"""
start = time.time()
response = client.chat.completions.create(
model="Qwen/Qwen3-4B",
messages=[{"role": "user", "content": prompt}],
max_tokens=512,
temperature=0,
)
elapsed = time.time() - start
print(f"Generated {response.usage.completion_tokens} tokens in {elapsed:.2f}s")
print(f"Throughput: {response.usage.completion_tokens / elapsed:.1f} tok/s")
# 预期输出: Throughput: ~120 tok/s (DFlash) vs ~35 tok/s (baseline)💡 一句话理解
Block size 的选择需要实验。代码场景可以试 16(接受率高),对话场景用 8(平衡),短回复场景用 4(减少浪费)。
七、推测解码的未来:从 DFlash 到并行生成
DFlash 代表了推测解码 2.0 时代,但终点远未到达。
7.1 推测解码的三代演进
| 代际 | 时间 | 代表方案 | 核心思想 |
|---|---|---|---|
| 1.0 | 2023 | SpecInfer, Medusa | 概念验证,工程化探索 |
| 2.0 | 2024-2025 | EAGLE-1/2/3 | 特征级预测,直接 Token 预测 |
| 3.0 | 2026 | DFlash, SpecGen | 块扩散,自推测,并行生成 |
7.2 下一步:完全并行生成
DFlash 仍然需要 target model 验证草稿,这意味着它没有完全摆脱自回归的束缚。真正的终极方案是完全并行生成(Fully Parallel Generation)——target model 一次性输出所有 token,无需验证。
这可能需要的架构突破:
- 非自回归 LLM:如 Diffusion Transformer(DiT)用于语言
- 一致性解码:确保并行生成的 token 之间语义一致
- 硬件协同:GPU 架构需要适配大规模并行输出
7.3 短期趋势(2026 H2)
在完全并行生成到来之前,2026 下半年的趋势是:
⚠️ 常见踩坑
完全并行生成(非自回归 LLM)目前还处于研究阶段,距离生产可用至少 1-2 年。不要为了等待它而推迟当前的推理优化工作。
八、总结:DFlash 的核心贡献与实践建议
DFlash + Spec V2 是 2026 年推测解码领域的最大突破。 它将 LLM 推理加速从 2x 时代推入 4x 时代,为实时 AI 应用铺平了道路。
核心要点回顾
- DFlash 的两个创新:块扩散(并行生成 block)+ KV 注入(复用 target 特征)
- Spec V2 的贡献:overlap 调度消除 Host 开销,GPU 利用率从 70% → 95%
- 实际效果:Qwen 3.5 397B 上 4.3x 基线吞吐,1.5x MTP 吞吐
- 部署门槛:需要 SGLang 引擎 + 兼容 GPU + 草稿模型(已开源)
实践建议
⚠️ 常见踩坑
DFlash 的性能高度依赖 GPU 型号。在 B200 上效果最好,A100 上次衰 30-40%,V100 上可能只有 1.5-2x。确保在目标硬件上实测后再做决策。