前文介绍了
然后发现 DFlash 更猛:加速高达 6 倍 ⚡
同等输出质量、完全无损,开源、即插即用 ⚡
DFlash 其实我之前简单介绍过:
本文事无巨细把 DFlash 这个项目掰开揉碎讲一遍
简介
大模型生成的本质是「自回归」 —— 第 N 个 token 必须等第 N-1 个 token 算完才能开始,token 之间是串行的,怎么也快不起来
业界目前最主流的解法叫 Speculative Decoding(投机解码):
找一个小的 draft 模型先飞快地"猜"出一串 token
大的 target 模型并行验证这串 token
验证通过的直接采纳,验证不过的丢掉重来
理论上能把吞吐拉很高,但目前最强的 EAGLE-3 也只能做到 2-3× 加速,因为 draft 模型自己也是自回归的,仍然是一个 token 一个 token 出,draft 这步本身就是瓶颈
DFlash 干的事很狠:把 draft 模型从自回归换成了 block diffusion(块扩散)模型
一次前向传播直接生成一整块 16 个 token,不再串行
结果就是:
Qwen3-8B 上做到 6× 无损加速
比 EAGLE-3 快 2.5×
推理模型(开 thinking)上也有 4.5× 加速
直接把 diffusion 模型缩小当 drafter,效果其实很一般(5 层的朴素扩散 drafter 加速只有 3× 左右)—— 因为它太小了,想从零预测未来 token 不现实
但作者发现了一个白吃的午餐:大的 target 模型在生成第 N 个 token 时,hidden states 里其实已经隐含了第 N+1、N+2、N+3...的信息
那思路就清晰了 —— 把 target 的 hidden features 喂给 draft,让 draft "站在巨人的肩膀上"猜,而不是从零猜
为什么 diffusion 才是最佳形态
自回归 drafter 的成本随 token 数线性增长,所以 EAGLE-3 不得不把网络砍到只剩 1 层 transformer,质量自然受限
扩散 drafter 一次前向出全部 token,成本和 token 数几乎无关
❝ 一个多层的 DFlash 生成 16 个 token,比 1 层 EAGLE-3 生成 8 个 token 还快
更深的网络 + 更多的 token + 更低的延迟,听起来像作弊但确实成立
draft 模型直接复用 target 的 embedding 和 LM head,只有中间几层是新训练的,参数量保持极低
整套流程分三步:
Feature Fusion :从 target 模型多层均匀采样 hidden features,经过一个轻量级投影融合
KV Injection :融合后的特征直接注入 draft 模型 每一层 的 K/V 投影里,存进 KV cache —— 这是和 EAGLE-3 最关键的区别。EAGLE-3 只在第一层喂特征,越往后稀释越严重;DFlash 每层都灌,acceptance length 随深度 正向 增长
Parallel Drafting :基于这套丰富 context 一次性预测下一块 token
Qwen3-8B 在各类 benchmark 上的 greedy decoding 加速倍数(DFlash 用 block 16 + 1 步去噪,EAGLE-3 用 spec 长度 7):
任务
原速
EAGLE-3
DFlash
GSM8K
1×
2.13×
5.20×
MATH-500
1×
2.18×
6.17×
AIME24
1×
2.25×
5.91×
AIME25
1×
2.18×
5.85×
HumanEval
1×
2.48×
5.20×
MBPP
1×
2.27×
4.75×
LiveCodeBench
1×
2.24×
5.43×
SWE-Bench
1×
1.90×
2.92×
MT-Bench
1×
1.94×
2.79×
Alpaca
1×
1.88×
2.27×
数学和代码场景下,DFlash 直接是 EAGLE-3 的 2 倍以上速度
温度采样(temp=1)以及开 thinking 模式下,DFlash 同样有 ~4.5× 的稳定加速
已支持的模型
DFlash 把现在的开源主力基本兜住了:
类别
模型
Gemma 系列
gemma-4-26B-A4B-it / gemma-4-31B-it
Qwen 系列
Qwen3.6-27B / Qwen3.6-35B-A3B / Qwen3.5-4B/9B/27B/35B-A3B/122B-A10B
Coder 系列
Qwen3-Coder-Next / Qwen3-Coder-30B-A3B
大厂模型
MiniMax-M2.5(preview)/ Kimi-K2.5
OSS
gpt-oss-20b / gpt-oss-120b
即将到来
DeepSeek-V4-Flash / V4-Pro / MiniMax-M2.7 / GLM-5.1
要新模型?GitHub 提 issue 就行,作者也表示会开源训练 recipe,到时候你自己训一个 draft 模型加速任意 LLM
安装
DFlash 同时支持四个后端 —— vLLM、SGLang、Transformers、MLX(M 系列 Mac),按需选
# Transformers
uv pip install -e ".[transformers]"
# SGLang
uv pip install -e ".[sglang]"
# vLLM(v0.20.1+ 已经核内核支持)
uv pip install -e ".[vllm]"# MLX(Apple Silicon)
pip install -e ".[mlx]"
Gemma 4 的 vLLM 支持还在 PR 阶段,作者直接给了 docker 镜像:
docker pull ghcr.io/z-lab/vllm-openai:gemma4-dflash-cu130
使用 vLLM 启服务(以 Qwen3.5-27B 为例)vllm serve Qwen/Qwen3.5-27B \
--speculative-config '{"method": "dflash", "model": "z-lab/Qwen3.5-27B-DFlash", "num_speculative_tokens": 15}' \
--attention-backend flash_attn \
--max-num-batched-tokens 32768
Gemma 4 用 docker 一把梭docker run --rm -it \
--gpus all --ipc=host --shm-size=16g \
-p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
ghcr.io/z-lab/vllm-openai:gemma4-dflash-cu130 \
google/gemma-4-26B-A4B-it \
--host 0.0.0.0 --port 8000 \
--speculative-config '{"method": "dflash", "model": "z-lab/gemma-4-26B-A4B-it-DFlash", "num_speculative_tokens": 15, "attention_backend": "flash_attn"}' \
--attention-backend triton_attn \
--max-num-batched-tokens 32768 \
--trust-remote-code
SGLangTransformers (Qwen3 / LLaMA-3.1)export SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1python -m sglang.launch_server \
--model-path Qwen/Qwen3.5-35B-A3B \
--speculative-algorithm DFLASH \
--speculative-draft-model-path z-lab/Qwen3.5-35B-A3B-DFlash \
--speculative-num-draft-tokens 16 \
--tp-size 1 \
--attention-backend trtllm_mha \
--speculative-draft-attention-backend fa4 \
--mem-fraction-static 0.75 \
--trust-remote-code
MLX(M5 Pro 实测可用)from transformers import AutoModel, AutoModelForCausalLM, AutoTokenizer
draft = AutoModel.from_pretrained("z-lab/Qwen3-8B-DFlash-b16",
trust_remote_code=True, dtype="auto", device_map="cuda:0").eval()
target = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-8B",
dtype="auto", device_map="cuda:0").eval()
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-8B")
messages = [{"role": "user", "content": "How many positive whole-number divisors does 196 have?"}]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt",
add_generation_prompt=True, enable_thinking=False).to(draft.device)output = draft.spec_generate(
input_ids=input_ids, max_new_tokens=2048, temperature=0.0,
target=target, stop_token_ids=[tokenizer.eos_token_id])
print(tokenizer.decode(output[0], skip_special_tokens=False))
from dflash.model_mlx import load, load_draft, stream_generate
model, tokenizer = load("Qwen/Qwen3.5-4B")
draft = load_draft("z-lab/Qwen3.5-4B-DFlash")
messages = [{"role": "user", "content": "How many positive whole-number divisors does 196 have?"}]
prompt = tokenizer.apply_chat_template(messages, tokenize=False,
add_generation_prompt=True, enable_thinking=True)tps = 0.0
for r in stream_generate(model, draft, tokenizer, prompt,
block_size=16, max_tokens=2048, temperature=0.6):
print(r.text, end="", flush=True)
tps = r.generation_tps
print(f"\nThroughput: {tps:.2f} tok/s")
Mac 用户终于能在本地享受到 5× 推理加速了,这条对苹果用户非常友好
总结
DFlash 这个项目最大的价值,老章总结成一句话:
❝ 它把扩散模型的角色重新定义了 —— 扩散模型不需要去和自回归 LLM 比生成质量,它只要做好「极快极准的 drafter」就够了,质量由 target 模型最后做投机验证来兜底
适合谁用?
生产环境部署 LLM 的同学 :vLLM / SGLang 都已经原生支持,加个
--speculative-config就能上,开发成本极低手头有 Apple Silicon 的同学 :MLX 后端实测可用,本地大模型一夜之间快 5 倍
做推理加速 / 投机解码方向研究的同学 :论文 + 代码 + 训练 recipe 即将全开源,是个好的二次创新基础
不适合谁?
单卡显存吃紧的同学要注意,draft 模型也要占显存
极小模型(< 3B)加速空间本身就不大,性价比一般
支持的模型清单还在快速扩张,DeepSeek-V4 系列、GLM-5.1 都在 coming soon 里,未来一段时间值得持续关注
制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个,谢谢你看我的文章,我们下篇再见!
热门跟贴