Nobody Knows Qwen3.5-27B Better Than Me
证据如下:
写无可写,居然还有高手——Qwen3.5-27B-DFlash
它让Qwen3.5-27B的推理速度直接起飞,最高能到5 倍加速,而且是无损加速,生成质量完全不打折
简介
用大模型写代码、做数学题,模型想半天才吐一个 token 出来,GPU 利用率低得让人心疼?
这就是自回归解码的老毛病了——一个 token 一个 token 地生,串行瓶颈在那摆着
之前业界用Speculative Decoding(推测解码)来解决这个问题:先用一个小模型快速猜一串 token,再让大模型并行验证。EAGLE-3 是这个方向的 SOTA,但它的小模型还是自回归的,加速比也就 2-3 倍,上限明显
DFlash(z-lab.ai/projects/dflash)来了,直接把「猜」的过程从自回归换成了扩散模型。一次前向传播就能并行生成一整个 block 的 token,配合大模型验证,在 Qwen3-8B 上实现了6 倍以上的无损加速,比 EAGLE-3 快了将近2.5 倍
下图是 DFlash 的系统架构:
DFlash 来自z-lab(UCSD ML Systems Group),这帮人专做「让 AI 更小、更快、更高效」的事,从算法到系统到应用全栈搞。论文已发(arXiv: 2602.06036),而且代码全开源。
为什么 DFlash 这么快?
核心原因有两个,搞懂了你就知道为什么这东西比 EAGLE-3 强这么多:
1. 扩散模型天然适合做「猜测」
EAGLE-3 的 drafter 是自回归的,猜 8 个 token 就要跑 8 次前向传播,成本线性增长。为了控制延迟,EAGLE-3 只能用极浅的模型(1 层 Transformer),猜测质量自然上不去
DFlash 用的是block diffusion模型——不管你要猜 8 个还是 16 个 token,都是一次前向传播搞定。这意味着 drafter 可以做得更深(5 层 Transformer),模型更有表达力,猜得更准,但延迟反而更低。论文里有个数据很能说明问题:一个 5 层的 DFlash 生成 16 个 token 的延迟,比 1 层的 EAGLE-3 生成 8 个 token 还低
2. 关键洞察:「大模型自己就知道未来」
光用扩散模型还不够。如果小模型完全从零开始猜,猜不准的。DFlash 的核心创新是:从大模型(target model)的隐藏层抽取特征,注入到 drafter 的每一层 KV cache 里
这跟 EAGLE-3 的做法有本质区别——EAGLE-3 只在输入层融合 target 的特征,信息随着层数增加会衰减。DFlash 是在 drafter 的每一层都注入,信息保持一致。这就是为什么 DFlash 的 acceptance length(被接受的草稿 token 数量)能随着 drafter 层数有效增长,而 EAGLE-3 加层数收益递减
Qwen3.5-27B-DFlash:最热门的版本
DFlash 系列目前覆盖了不少模型(huggingface.co/collections/z-lab/dflash),完整列表如下:
目标模型
DFlash Drafter
Kimi-K2.5 (Preview)
z-lab/Kimi-K2.5-DFlash
Qwen3.5-4B
z-lab/Qwen3.5-4B-DFlash
Qwen3.5-9B
z-lab/Qwen3.5-9B-DFlash
Qwen3.5-27Bz-lab/Qwen3.5-27B-DFlash
Qwen3.5-35B-A3B
z-lab/Qwen3.5-35B-A3B-DFlash
Qwen3-Coder-Next
z-lab/Qwen3-Coder-Next-DFlash
Qwen3-Coder-30B-A3B
z-lab/Qwen3-Coder-30B-A3B-DFlash
gpt-oss-20b
z-lab/gpt-oss-20b-DFlash
gpt-oss-120b
z-lab/gpt-oss-120b-DFlash
其中Qwen3.5-27B-DFlash是目前最热门的版本,HuggingFace 上 5200+ 下载量、47 个 likes,drafter 模型只有2B 参数,非常轻量
为什么 27B 最受欢迎?因为它是性价比最优点——27B 够强,能处理大部分任务,又不像 122B/397B 那样对显卡要求太高,配合 DFlash 加速后更是如虎添翼
实测数据
官方在单张 NVIDIA B200 上做了全面测试,数据很有说服力。以 Qwen3.5-27B 为例,block size = 16,thinking 模式开启:
吞吐量对比(tok/s,越高越好):
任务
并发
原版 (AR)
MTP
DFlash
Math500
1
84
243 (2.9x)
397 (4.7x)
Math500
8
625
1457 (2.3x)
2270 (3.6x)
HumanEval
1
83
236 (2.9x)
427 (5.2x)
HumanEval
8
602
1345 (2.2x)
2079 (3.5x)
MBPP
1
84
200 (2.4x)
347 (4.2x)
MT-Bench
1
84
169 (2.0x)
255 (3.0x)
单并发场景下,HumanEval 上直接5.2 倍加速,Math500 上4.7 倍
哪怕在并发 32 的高压场景下,依然能维持1.5-1.9 倍的加速,这在生产环境里非常有价值
对比 MTP(Multi-Token Prediction),DFlash 在所有任务上都大幅领先。而且记住——这是无损加速,输出质量跟原版一模一样。
Acceptance Length 对比:
任务
B16 (MTP / DFlash)
Math500
7.14 /7.93
HumanEval
7.38 /9.18
MBPP
5.94 /7.27
MT-Bench
5.30 /5.47
HumanEval 上 DFlash 平均每轮能被接受9.18 个 token,这意味着一次猜测就能「猜中」大部分内容,效率极高
安装与使用
DFlash 已经适配了三大主流推理框架:vLLM、SGLang和Transformers。
vLLM(推荐生产环境)
SGLang# 安装(需要 nightly 版本)
uv pip install vllm
uv pip install -U vllm --torch-backend=auto --extra-index-url https://wheels.vllm.ai/nightly# 启动服务
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
python -m sglang.launch_server \
--model-path Qwen/Qwen3.5-27B \
--speculative-algorithm DFLASH \
--speculative-draft-model-path z-lab/Qwen3.5-27B-DFlash \
--speculative-num-draft-tokens 16 \
--tp-size 1 \
--attention-backend fa3 \
--mem-fraction-static 0.75 \
--mamba-scheduler-strategy extra_buffer \
--trust-remote-code
启动后就是标准的 OpenAI 兼容 API,调用方式跟平时一样:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY")response = client.chat.completions.create(
model="Qwen/Qwen3.5-27B",
messages=[{"role": "user", "content": "Write a quicksort in Python."}],
max_tokens=4096,
temperature=0.0
)
print(response.choices[0].message.content)
Tip:对于长上下文或 Agent 场景,可以加--speculative-dflash-draft-window-size WINDOW_SIZE开启 drafter 的滑动窗口注意力。
Transformers(本地快速体验)
技术细节补充from transformers import AutoModel, AutoModelForCausalLM, AutoTokenizer
# 加载 drafter 和 target
draft = AutoModel.from_pretrained(
"z-lab/Qwen3.5-27B-DFlash",
trust_remote_code=True, dtype="auto", device_map="cuda:0"
).eval()
target = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3.5-27B", dtype="auto", device_map="cuda:0"
).eval()
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3.5-27B")
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))
几个值得关注的设计细节:
1. 训练成本极低
Drafter 模型复用了 target model 的 embedding 层和 LM head(冻结),只训练中间几层 Transformer。以 27B 版本为例,drafter 才 2B 参数,训练集用了大约 80 万条样本(来自 NVIDIA Nemotron 和 CodeAlpaca),用 target model 重新生成了响应来做训练数据,保证对齐效果
2. 只需一步去噪
DFlash 推理时只做一步去噪(single denoising step),这跟传统扩散模型需要多步迭代完全不同。因为它有 target model 的隐藏特征做条件,一步就够了。这也是它比其他扩散解码方法(如 DiffuSpec 需要 7B drafter)轻量得多的原因
3. Reasoning 模型也能加速
DFlash 对开启了 thinking mode 的推理模型同样有效。在 Qwen3-8B thinking 模式下,仍然能达到大约4.5 倍加速。对于动辄生成上千 token 思维链的推理模型来说,这个加速太有价值了
总结
DFlash 的核心贡献可以用一句话概括:扩散模型不需要跟自回归模型在生成质量上竞争,它只需要做一个优秀的「猜测者」
这个思路确实精妙——扩散模型负责高速并行猜测,自回归模型负责验证保底,两全其美
优点:
加速比碾压 EAGLE-3,实测高达 5 倍以上
完全无损,输出跟原版一模一样
drafter 极其轻量(27B 版本 drafter 才 2B 参数)
已适配 vLLM + SGLang + Transformers 三大框架
覆盖模型广泛,Qwen3、Qwen3.5、Kimi-K2.5、gpt-oss 全都有
局限:
需要 nightly 版本的 vLLM/SGLang,稳定性可能有坑
目前 drafter 训练代码还未开源(不过已经承诺即将放出)
高并发场景加速比会下降(这是 speculative decoding 的通病)
Qwen3.5-122B 和 397B 的 DFlash 版本还在路上
如果你在用 Qwen3.5-27B 做推理服务,DFlash 几乎是个无脑加分项。多加载一个 2B 的 drafter,就能让吞吐量翻好几倍,简直是免费的午餐
.5
制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个,谢谢你看我的文章,我们下篇再见!
热门跟贴