DFlash 项目
问:能加快 model 运行吗?
能。 DFlash 是一个专门用于加速大语言模型推理的项目,通过 Speculative Decoding(投机解码) 技术显著提升Token生成速度。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
核心原理分析:
标准 LLM 推理是 自回归 的——每次只生成 1 个 token,每个 token 都需要完整的 target model forward pass,这是瓶颈所在(GPU 利用率低,受 memory bandwidth 限制)。
DFlash 的做法是 Block Diffusion + Speculative Decoding:
轻量级 Draft Model(草稿模型):一个很小的 diffusion 模型,它不是独立的 LM,而是复用 target model 的 embedding 层和 lm_head,只有几层自己的 transformer layers。
并行草拟一个 block:Draft model 一次性并行生成 block_size(通常 15-16)个候选 token,而不是逐个生成。它通过以下方式实现:
- 从 target model 的中间层提取 hidden states(extract_context_feature 从指定的 target_layer_ids 拼接隐藏状态)
- 将这些 hidden states 作为条件,对一个 masked block 做去噪(类似 diffusion),一步生成整个 block 的预测
Target Model 并行验证:Target model 对这 block_size 个候选 token 做一次 forward pass(而非 block_size 次),验证哪些是正确的。
接受/拒绝:从左到右找到第一个不匹配的位置,接受之前所有 token,拒绝之后的。关键代码: python acceptance_length = (block_output_ids[:, 1:] == posterior[:, :-1]).cumprod(dim=1).sum(dim=1)[0].item()
循环:rollback KV cache 到接受位置,继续下一轮。
为什么快?
| 传统自回归 | DFlash |
|---|---|
| 每步 1 token,N 步 = N 次 target forward | 每步验证 block_size 个 token,1 次 target forward |
| GPU 计算利用率低 | 批量验证充分利用 GPU 并行能力 |
假设 draft 的平均接受长度是 5 个 token,那么 target model 的 forward 次数减少约 5 倍,整体吞吐量提升 2-4x(取决于模型大小和 acceptance rate)。
DFlash 相比传统 Speculative Decoding 的优势
传统方法用一个小的自回归 LM 做 draft(逐 token 生成),DFlash 用 block diffusion 一步并行生成整个 block,draft 本身也更快。而且 draft model 极轻量(只有几层 + 一个 fc 投影层),参数量远小 于 target,开销很低。
推荐这个项目:
https://github.com/z-lab/dflash
Supported Models
| Model | DFlash Draft |
|---|---|
| gemma-4-26B-A4B-it | z-lab/gemma-4-26B-A4B-it-DFlash |
| gemma-4-31B-it | z-lab/gemma-4-31B-it-DFlash |
| Qwen3.6-27B | z-lab/Qwen3.6-27B-DFlash |
| Qwen3.6-35B-A3B | z-lab/Qwen3.6-35B-A3B-DFlash |
| MiniMax-M2.5 (Preview) | z-lab/MiniMax-M2.5-DFlash |
| Kimi-K2.5 | 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-27B | z-lab/Qwen3.5-27B-DFlash |
| Qwen3.5-35B-A3B | z-lab/Qwen3.5-35B-A3B-DFlash |
| Qwen3.5-122B-A10B | z-lab/Qwen3.5-122B-A10B-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-4B (non-thinking) | z-lab/Qwen3-4B-DFlash-b16 |
| Qwen3-8B (non-thinking) | z-lab/Qwen3-8B-DFlash-b16 |
| Llama-3.1-8B-Instruct | z-lab/LLaMA3.1-8B-Instruct-DFlash-UltraChat |
| DeepSeek-V4-Flash | Coming soon |
| DeepSeek-V4-Pro | Coming soon |
| MiniMax-M2.7 | Coming soon |
| GLM-5.1 | Coming soon |
可以用来提速自部署模型的速度