DFlash 是一种新颖的推测解码方法,它利用轻量级 块扩散 模型进行草稿生成。该方法支持高效、高质量的并行草稿生成,突破了推理速度的极限。
本模型是 草稿生成器 组件。它必须与目标模型 Qwen/Qwen3.5-27B 配合使用。其训练上下文长度为 4096 个 token。
vLLM:
uv pip install vllm
uv pip install -U vllm --torch-backend=auto --extra-index-url https://wheels.vllm.ai/nightlySGLang:
uv pip install "git+https://github.com/sgl-project/sglang.git@refs/pull/20547/head#subdirectory=python"vLLM:
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 32768SGLang:
# Optional: enable schedule overlapping (experimental, may not be stable)
# export SGLANG_ENABLE_SPEC_V2=1
# export SGLANG_ENABLE_DFLASH_SPEC_V2=1
# export SGLANG_ENABLE_OVERLAP_PLAN_STREAM=1
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提示: 对于长上下文或智能体类工作负载,可添加
--speculative-dflash-draft-window-size WINDOW_SIZE以启用草稿模型的滑动窗口注意力机制。
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)测试环境:单张 NVIDIA B200 显卡,SGLang 框架,启用思考模式,最大输出长度 4096。我们报告的是端到端吞吐量,包含预填充时间。如需复现脚本,请参见我们的 GitHub 仓库。
每秒令牌数(相对自回归基线的加速比)
块大小 = 16
| 任务 | 并发数 | AR | MTP | DFlash |
|---|---|---|---|---|
| Math500 | 1 | 84 | 243 (2.9x) | 397 (4.7x) |
| 8 | 625 | 1457 (2.3x) | 2270 (3.6x) | |
| 16 | 1121 | 2224 (2.0x) | 3135 (2.8x) | |
| 32 | 1949 | 2504 (1.3x) | 3712 (1.9x) | |
| GSM8K | 1 | 83 | 215 (2.6x) | 330 (4.0x) |
| 8 | 625 | 1303 (2.1x) | 1868 (3.0x) | |
| 16 | 1109 | 1773 (1.6x) | 2589 (2.3x) | |
| 32 | 1914 | 2170 (1.1x) | 3152 (1.6x) | |
| HumanEval | 1 | 83 | 236 (2.9x) | 427 (5.2x) |
| 8 | 602 | 1345 (2.2x) | 2079 (3.5x) | |
| 16 | 1031 | 1921 (1.9x) | 2748 (2.7x) | |
| 32 | 1720 | 2234 (1.3x) | 3198 (1.9x) | |
| MBPP | 1 | 84 | 200 (2.4x) | 347 (4.2x) |
| 8 | 627 | 1049 (1.7x) | 1826 (2.9x) | |
| 16 | 1075 | 1729 (1.6x) | 2479 (2.3x) | |
| 32 | 1832 | 1933 (1.1x) | 2808 (1.5x) | |
| MT-Bench | 1 | 84 | 169 (2.0x) | 255 (3.0x) |
| 8 | 622 | 1035 (1.7x) | 1444 (2.3x) | |
| 16 | 1113 | 1550 (1.4x) | 1984 (1.8x) | |
| 32 | 1900 | 1772 (0.9x) | 2391 (1.3x) |
块大小 = 8
| 任务 | 并发数 | AR | MTP | DFlash |
|---|---|---|---|---|
| Math500 | 1 | 84 | 273 (3.2x) | 335 (4.0x) |
| 8 | 625 | 1673 (2.7x) | 2020 (3.2x) | |
| 16 | 1121 | 2731 (2.4x) | 3646 (3.3x) | |
| 32 | 1949 | 3739 (1.9x) | 4288 (2.2x) | |
| GSM8K | 1 | 83 | 243 (2.9x) | 301 (3.6x) |
| 8 | 625 | 1539 (2.5x) | 1814 (2.9x) | |
| 16 | 1109 | 2472 (2.2x) | 2896 (2.6x) | |
| 32 | 1914 | 3431 (1.8x) | 3822 (2.0x) | |
| HumanEval | 1 | 83 | 258 (3.1x) | 350 (4.2x) |
| 8 | 602 | 1486 (2.5x) | 1856 (3.1x) | |
| 16 | 1031 | 2302 (2.2x) | 2749 (2.7x) | |
| 32 | 1720 | 2477 (1.4x) | 3412 (2.0x) | |
| MBPP | 1 | 84 | 234 (2.8x) | 311 (3.7x) |
| 8 | 627 | 1375 (2.2x) | 1757 (2.8x) | |
| 16 | 1075 | 2159 (2.0x) | 2661 (2.5x) | |
| 32 | 1832 | 2885 (1.6x) | 3309 (1.8x) | |
| MT-Bench | 1 | 84 | 210 (2.5x) | 250 (3.0x) |
| 8 | 622 | 1300 (2.1x) | 1495 (2.4x) | |
| 16 | 1113 | 2105 (1.9x) | 2403 (2.2x) | |
| 32 | 1900 | 2873 (1.5x) | 3256 (1.7x) |
格式:MTP / DFlash(跨并发级别取平均值)
| 任务 | B8 | B16 |
|---|---|---|
| Math500 | 5.73 / 5.90 | 7.14 / 7.93 |
| GSM8K | 5.54 / 5.57 | 6.84 / 7.22 |
| HumanEval | 5.81 / 6.34 | 7.38 / 9.18 |
| MBPP | 5.10 / 5.60 | 5.94 / 7.27 |
| MT-Bench | 4.60 / 4.54 | 5.30 / 5.47 |
特别感谢 David Wang 为本项目提供的卓越工程支持。我们也感谢 Modal、InnoMatrix 和 Yotta Labs 提供用于训练此 draft 模型的计算资源。
如果您发现 DFlash 有用,请引用我们的工作。如需分享关于 DFlash 的反馈或请求新的模型支持,请填写此表单:DFlash Feedback。
@article{chen2026dflash,
title = {{DFlash: Block Diffusion for Flash Speculative Decoding}},
author = {Chen, Jian and Liang, Yesheng and Liu, Zhijian},
journal = {arXiv preprint arXiv:2602.06036},
year = {2026}
}