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 架构图
打开网易新闻 查看精彩图片
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 已经适配了三大主流推理框架:vLLMSGLangTransformers

vLLM(推荐生产环境)

# 安装(需要 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
SGLang

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

制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个,谢谢你看我的文章,我们下篇再见!