
DFlash原理深度剖析块扩散如何用一次前向并行起草整块token【免费下载链接】dflashDFlash: Block Diffusion for Flash Speculative Decoding项目地址: https://gitcode.com/GitHub_Trending/df/dflashDFlash 是一款开源的块扩散Block Diffusion推测解码模型专为大模型推理加速而生草稿模型不再逐词生成而是借助块扩散机制一次前向并行起草一整块 token再交给目标大模型一次性验证从而显著缩短 LLM 逐字输出的等待时间。本文将拆解 DFlash 的起草 → 验证 → 接受全流程并给出在 vLLM / SGLang / MLX 中快速启用 DFlash 加速的方法。一、问题背景大模型逐词自回归为何慢大语言模型LLM默认是自回归生成每写出 1 个 token就要对整份 KV 缓存做一次前向计算再采样下一个词。生成 1000 字就要串行跑 1000 多轮GPU 大部分时间在等内存搬运算力严重吃不饱。推测解码Speculative Decoding是公认最有效的解法让一个轻量的草稿模型先猜一段内容再让目标大模型一次前向并行验证整段猜测——猜对的部分直接收下等于用 1 次前向换回了多个 token。方案每轮前向产出特点普通自回归1 个 token逐词串行GPU 利用率低传统小模型起草猜 k 个需 k 次前向草稿模型本身也是自回归起草同样慢DFlash 块扩散起草1 次前向出整块并行起草 极轻参数草稿开销趋近于零DFlash 的关键创新就在第三行它把扩散模型去噪的思想搬进了起草环节——整块 token 并行生成而不是逐个猜。二、核心原理块扩散如何一次前向起草整块 token1. 把填空当作去噪mask 块并行预测传统起草是第 2 个词必须等第 1 个词出来天然串行。DFlash 的块扩散改换思路取上一个已确认 token N-1 个 mask 占位符组成一个草稿块默认块大小 16即 1 个已知 token 15 个 mask草稿模型一次前向同时预测所有 mask 位置的内容直接得到 15 个候选 token。这就像扩散图像模型从一整张噪声图一步还原出细节DFlash 是从一整块噪声mask一步还原出一整块文字所以叫块扩散。2. 块内双向注意力是并行的前提能做到一次前向出整块靠的是草稿块内部使用非因果注意力源码中is_causalFalse见 dflash/model.py块内每个 mask 位置都能同时看到全部上下文和块内其他位置彼此之间没有先后依赖因此 15 个位置可以同一步算完。这与自回归只能看左边的约束完全不同。3. 借目标模型搭便车草稿模型极轻DFlash 的草稿模型并不闭门造车而是复用目标模型的三样东西中间层隐藏状态从目标模型中段若干层抽取上下文特征层号由 build_target_layer_ids 均匀选取经一层线性投影 RMSNorm 后注入草稿模型dflash/model.py词嵌入与输出头直接绑定目标模型的embed_tokens和lm_headdflash/model_mlx.py草稿模型自身不重复携带这两大块参数KV 缓存草稿侧维护独立缓存并随接受结果同步裁剪保证下一轮草稿与真实前文严格对齐。因此 DFlash 草稿模型只有极少的 Transformer 层参数量与显存开销都很小——闪Flash就闪在起草这一步几乎不花成本。三、完整工作流程起草 → 验证 → 接受第 1 步草稿模型一次前向并行起草整块 token每轮循环开始时取出最后 1 个已确认 token 15 个 mask送进草稿模型1 次前向拿到整块候选主循环见 dflash/model.py。第 2 步目标模型单次前向验证整块把整块候选一次性喂给目标大模型。得益于注意力机制的并行性目标模型只需1 次前向就能同时算出块内每个位置自己本来会生成什么dflash/model.py。这一步与普通解码的代价相同却验证了 16 个位置。第 3 步从最长前缀开始接受还免费多得 1 个 token验证时逐位比对草稿与目标模型的采样结果用累积乘积找出连续匹配的最长前缀dflash/model.py首个不匹配位置之前草稿 token 全部接受首个不匹配位置改用目标模型自己的 token——它无论如何都正确相当于每轮至少白拿 1 个 tokenbonus token接受后立即把两个模型的 KV 缓存裁剪到已确认长度dflash/model.py丢弃被拒绝部分的缓存状态永远与真实前文一致。由于拒绝时总是回退到目标模型的输出DFlash 的最终文本质量与目标模型直接生成完全一致加速不以质量为代价。⚡ 直观理解最坏情况每轮也得 1 个 token与原始解码持平最好情况整块 16 个全对等于 1 次目标模型前向产出 16 个 token。草稿猜得越准加速比越高。四、快速上手三步在推理框架中启用 DFlash 加速 DFlash 同时支持Transformers、vLLM、SGLang、MLXApple Silicon四个后端已为 Qwen3 / Qwen3.5、Gemma-4、Llama-3.1、gpt-oss 等模型提供现成草稿权重完整清单见 README.md。1. 克隆并安装 DFlashgit clone https://gitcode.com/GitHub_Trending/df/dflash cd dflash uv pip install -e .[vllm] # 按所选后端替换为 transformers / sglang / vllm / mlx各后端依赖定义见 pyproject.toml。2. 在 vLLM 中一行启用 DFlash 推测解码启动服务时通过--speculative-config指定方法为dflash、草稿模型与推测 token 数即可vllm serve Qwen/Qwen3.5-27B \ --speculative-config {method: dflash, model: z-lab/Qwen3.5-27B-DFlash, num_speculative_tokens: 15}3. 在 Apple Silicon 上用 MLX 体验MLX 版实现了流式生成与状态回滚含对门控 DeltaNet 等新型缓存的兼容处理dflash/model_mlx.py。只需加载目标模型 DFlash 草稿模型调用stream_generate即可边生成边看到吞吐tok/s完整示例见 README.md 的 MLX (Apple Silicon) 一节。五、验证加速效果用自带基准测试一键压测 仓库内置基准工具 dflash/benchmark.py覆盖 gsm8k、math500、humaneval、mbpp、mt-bench 五类任务数据集定义见 dflash/benchmark.py首次运行自动下载缓存。以 Transformers 后端为例torchrun --nproc_per_node8 -m dflash.benchmark --backend transformers \ --model Qwen/Qwen3-8B --draft-model z-lab/Qwen3-8B-DFlash-b16 \ --dataset gsm8k --max-samples 128报告中的acceptance_lengths统计能直接反映块扩散起草的平均接受长度——它是衡量 DFlash 加速比的核心指标。六、项目文件导航文件说明dflash/model.py核心实现草稿模型DFlashDraftModel、生成主循环与接受逻辑dflash/model_mlx.pyApple Silicon / MLX 版草稿模型与流式生成dflash/benchmark.py多后端基准测试与数据集准备README.md支持模型清单、四后端安装与启动示例pyproject.toml依赖与后端可选依赖定义小结DFlash 用块扩散 双向注意力把起草从串行变并行用复用目标模型特征把草稿模型做到极致轻量再用最长前缀接受 bonus token保证输出质量零损失——这正是它能让大模型推理加速同时保持原生成质量的原因。官方亦表示将尽快开源训练配方届时你可以为自己的任意大模型训练专属 DFlash 草稿模型。【免费下载链接】dflashDFlash: Block Diffusion for Flash Speculative Decoding项目地址: https://gitcode.com/GitHub_Trending/df/dflash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考