← 返回 2026-11-05

D3D:面向异步投机解码的解耦扩散起草 D3D: Decoupled Diffusion Drafting for Asynchronous Speculative Decoding

Baoyou Chen, Ruiqiao Mei, Guancong Lin, Tao Song, Weihao Yuan, Qun Liu, Siyu Zhu 📅 2026-11-04 👍 19 2026-11-11 18:30
LLM推理加速 异步计算 扩散语言模型 投机解码 模型剪枝

独立扩散起草器结合接受度引导剪枝与异步打包起草,最高7.48倍无损解码加速

前置知识

投机解码

一种无损加速大模型解码的范式:轻量起草模型一次并行猜测多个后续词元,目标模型用一次前向并行验证这些候选;通过拒绝采样接受前缀,并在首个拒绝位置从残差分布补采一个词元,保证输出分布与目标模型独立解码完全一致。整体加速比取决于接受长度、起草延迟与验证成本三者的平衡。

全文的问题定义、方法设计和评价指标都建立在『接受长度 vs 起草延迟』这一核心权衡之上。

目标条件扩散起草器

把扩散模型用作起草器的做法(代表如 DFlash):候选块的每个位置被视为待去噪的掩码词元,一次前向即可并行生成整块候选;同时把目标模型的中间表示投影后注入起草器各层的注意力键值作为条件以提升接受率。代价是每轮起草都必须等目标模型完成验证、产出新词元的隐状态。

D3D 的『解耦』正是针对这一条件依赖,理解它是看懂本文问题定义的前提。

接受长度 τ

每轮验证平均向输出添加的词元数(含目标模型自己补采的那一个),同时反映起草准确率与候选块长度,是投机解码最核心的质量指标。由于验证只保留首个拒绝之前的候选,块内越靠前的位置对 τ 贡献越大,这也是训练时用 $w_j=\exp(-(j-1)/\gamma)$ 做指数衰减位置加权的原因。

它是论文训练加权、层剪枝选层和所有消融实验的统一度量,读懂 τ 才能读懂实验。

接受度引导的渐进剪层

逐个试删起草器的每一层,测量删除后验证集接受长度的下降幅度,每轮删掉影响最小的层,随后做蒸馏恢复训练,并在恢复后的新模型上重新评估各层重要性,如此循环。相比按输入输出表征相似度或 Fisher 信息选层的通用剪枝方法,它直接以投机解码的任务指标为选层依据。

该流程把 D3D-8B 从 36 层减到 31 层,是压缩起草延迟、让起草塞进验证窗口的关键一环。

异步起草与缓存命中

目标模型验证当前候选块期间,起草器用一次打包前向为多种可能的验证结果(各拒绝位置配合若干备选锚点,以及全接受情形)预生成后续候选块;下一轮若实际验证前缀与某条预生成分支的开头完全一致即缓存命中,直接复用该分支的剩余草稿词元,起草延迟被完全隐藏。

这是论文标题中『异步』的含义,也是其平均加速超过所有同步基线的核心机制。

研究动机

投机解码的速度由三个因素决定:每轮接受的词元数、起草延迟和验证成本。以 DFlash 为代表的目标条件并行起草器虽然能把整块候选一次前向生成出来,但它的每个注意力层都注入目标模型的中间表示作为条件,这意味着每一轮起草都必须等目标模型完成上一轮验证、产出新接受词元的隐状态之后才能开始,起草与验证被迫严格串行。后果是 DFlash 在 Qwen3-8B/32B 目标上的平均加速只有 4.03× 和 3.67×,起草延迟直接叠加进每轮耗时。此外扩散起草器还有深度与延迟的权衡:近期研究显示更深的起草器接受率更高,但每次打包起草的前向耗时也更长,串行执行时这部分额外开销会抵消多接受词元的收益,形成质量与速度互斥的两难。

本文的目标是本文要让一个完全不依赖目标隐状态的独立扩散起草器,达到甚至超过目标条件起草器的接受长度,并把起草延迟完全藏进目标验证的时间里。可量化的目标有三条:其一,块大小 $B=16$ 时,接受长度 $\tau$ 在数学、代码、对话共七个基准上全面超过 DFlash、DSpark、PARD-2、SSD 等基线;其二,按各层对验证接受长度的影响渐进剪掉冗余层(36 层剪至 31 层,深度减少 13.9%),保持 99% 以上的平均接受长度,同时切实降低起草延迟;其三,实现异步投机解码,使 Qwen3-8B 和 Qwen3-32B 目标上的平均解码加速分别达到 5.00× 和 5.71×,且全程保持与目标模型独立解码一致的无损输出分布。

与已有工作不同的是,已有的异步方案 SSD 用自回归起草器逐步串行生成候选,难以在验证窗口内为多种验证结果打包完成起草;而 DFlash、D2SD、DeLS-Spec、DFlare 等扩散起草器又全部保留目标特征注入,结构上无法解耦。D3D 抓住的空档是:独立起草器接受长度不够的根源并非『必须』依赖目标隐状态,而是训练目标没有对齐目标分布——只要在目标模型自己生成的回复上同时做块去噪与辅助自回归监督,独立起草器也能学到长接受前缀。再配合以接受长度(而非困惑度或表征相似度)为直接依据的层剪枝压低起草延迟,单次前向的扩散起草恰好适合在验证期间为各种可能结果并行预生成,从而首次打通独立扩散起草器的异步化。

核心方法

直觉上,D3D 像一个不再索要领导批注的代笔助手:过去每写一段都要等领导批完上一段、拿到最新批注才能动笔(目标条件起草依赖目标隐状态);现在助手研读了领导过往的全部成稿(用目标模型生成的回复做训练数据),凭前文就能独立一次写出一整段草稿,而且在领导批阅当前草稿的同时,它已经把各种可能批改结果对应的后续段落全部备好。技术路线分三步:先从预训练 Qwen3-8B 初始化起草器,在目标生成的回复上用块状去噪损失 $\mathcal{L}_{\text{diff}}$ 加辅助自回归损失 $\mathcal{L}_{\text{AR}}$ 做目标对齐训练,块内双向注意力、前缀共享因果编码;再按『删除该层后验证接受长度下降最小』的标准渐进剪层,每删一层做一次蒸馏恢复训练;推理时在验证期间用一次打包前向为各拒绝位置和全接受情形预生成后续候选块,命中缓存即复用,未命中才同步补draft,起草与验证由此重叠执行。

核心创新是彻底切断起草器对目标隐状态的依赖。DFlash 把投影后的目标特征注入起草器每一层的注意力键值,接受长度虽高,但每轮起草都要等最新验证结果,异步化在结构上就不可能;PARD-2 虽支持无目标特征推理,但没有针对独立条件做系统训练与剪枝。D3D 的做法是在目标模型生成的回复上组合两种监督:块状去噪教会模型并行预测整块候选;辅助自回归目标 $\mathcal{L}_{\text{AR}}$ 继续用未掩码前缀做下一词元预测,逼着起草器从自己的前缀表示(而非目标特征)中学习条件化,消融显示 $\lambda=1$ 时 $\tau$ 比纯扩散训练高 0.24–0.40 个词元。第二个关键点是把层剪枝的评价标准从通用语言建模质量换成验证接受长度,直接回答『这层对起草还有多大用』,并配合向监督词元调整的教师分布蒸馏做恢复:36 层剪到 31 层仍保留 99% 以上接受长度。两者叠加,使一次前向的打包起草既快又准,能塞进验证窗口。

方法步骤详情

第一步,构造目标对齐数据:以 Open-PerfectBlend 的 142 万条指令为提示,用目标模型(Qwen3-8B/32B)在非思考模式下按推荐采样重新生成回复。第二步,目标对齐训练:对每条回复随机采 128 个锚点,构造 $B=16$ 的扩散块(锚点词元可见、其后 15 个位置掩码),所有块打包进一个序列,前缀共享因果编码、块内双向注意力;去噪损失按 $w_j=\exp(-(j-1)/\gamma)$ 指数衰减加权以强调块前部预测;再对整条未掩码回复加自回归损失,总目标 $\mathcal{L}_{\text{train}}=\mathcal{L}_{\text{diff}}+\lambda\mathcal{L}_{\text{AR}}$,取 $\lambda=1$;用 2 张 H800、8-bit AdamW、BF16 训练 3 个 epoch,约 360 GPU 小时。第三步,接受度引导剪层:逐层试删并在验证集测 $\tau$,删影响最小的一层,用固定的未剪枝教师蒸馏恢复 1 万步;教师分布按 $\tilde{q}^{(0)}=(1-\eta)q^{(0)}+\eta\mathbf{e}_y$ 向监督词元调整($\eta$ 取使监督词元概率超过其他词元固定边际的最小值),再在新模型上重估各层重要性,从 36 层剪至 31 层。第四步,异步推理:验证当前 16 词元候选块的同时,一次打包前向为前 $C-1=11$ 个拒绝位置各备 $F=2$ 个备选锚点的续写块,外加一个全接受块,预算 $N_{\text{async}}=B[(C-1)F+2]=384$ 词元;下一轮验证前缀命中某分支即复用,未命中则同步起草;AIME25 上的扫描表明 $C=12,F=2$ 最优,约 5.0×。

技术新颖性

与目标条件扩散起草(DFlash、D2SD、DFlare)的本质区别是去掉特征注入通道,靠目标对齐数据上的双重监督让独立起草器达到同量级接受长度;与 SSD 的区别在于 SSD 依赖自回归起草器的多步串行生成,而 D3D 单次前向即可产出整块候选,使『为多种验证结果打包预生成』的异步策略成本可控;与 ShortGPT(输入输出表征相似度)、SDFP(Fisher 信息)等剪层工作的区别在于直接以验证接受长度为选层标准,且每轮删层后先恢复训练再重估,决策始终反映当前模型;与 DeLS-Spec 的『解耦』不同,后者只解耦组件训练、主干仍消费目标特征。辅助自回归目标与块去噪的组合本身也是新配方,为独立扩散起草器补上了『从自己的前缀表示做预测』这一条件化模式,而位置覆盖 C 与词元扇出 F 的预算公式 $N_{\text{async}}=B[(C-1)F+2]$ 则把异步开销变成可扫描调优的显式旋钮。

Overview of D3D
Figure 1: Overview of D3D

实验结果

主实验在 Qwen3-8B 和 Qwen3-32B 两个目标、七个基准(GSM8K、MATH-500、AIME25、HumanEval、MBPP、LiveCodeBench-v6、MT-Bench)上对比 EAGLE-3、DFlash、DSpark、PARD-2、SSD。Qwen3-8B 上 D3D 平均加速 5.00×($\tau=7.88$),高于 DSpark 的 4.44×、PARD-2 的 4.08×、DFlash 的 4.03×;Qwen3-32B 上 D3D 达 5.71×($\tau=7.73$),比最佳基线 DSpark 的 3.92× 高出 45.7%,GSM8K 单项峰值 7.48×。接受长度在全部 14 个『目标×基准』组合上都领先,例如 Qwen3-8B/GSM8K 的 $\tau=9.87$ 对 DFlash 的 7.93。剪枝实验:36 层剪到 31 层(-13.9%),在 MATH-500、HumanEval、MT-Bench 三个基准上保留 99% 以上平均 $\tau$,平均加速从 4.44× 升至 4.69×,继续剪则 $\tau$ 与加速同降。消融一:辅助 AR 权重 $\lambda=1$ 相比 $\lambda=0$ 在四个基准上 $\tau$ 提升 0.24–0.40,$\lambda=1.5$ 无进一步收益。消融二:2.0B 的 D3D-1.7B 在 MATH-500 上 $\tau=8.16$,已超 2.3B 的 DFlash(6.87);从 1.7B→4B→8B 收益递减(9.45→9.89),这正是剪枝 8B 版本的动机。消融三:预训练初始化在 GSM8K 上 $\tau\approx9.8$,远超随机初始化的 $\approx4.5$,且优势贯穿整个训练过程。异步预算扫描(AIME25,31 层模型)最优为 $C=12$、$F=2$、384 词元预算、命中率 71.3%、约 5.0×;加大 $C$ 至 16 命中率升至 78.3%、$F$ 至 5 升至 81.8%,但加速反而下降,说明冗余分支计算拖累了每轮延迟。并发服务:D3D-1.7B 配 Qwen3-32B,单请求 MATH-500 吞吐 154 词元/秒(6.1×),16 路并发升至 864 词元/秒但相对加速滑落至 2.7×,MT-Bench 在 16 路并发下仅 1.5×。

各方法在数学、代码与对话基准上的加速与平均接受长度 τ
Table 1: 各方法在数学、代码与对话基准上的加速与平均接受长度 τ
不同并发请求数下的解码吞吐
Table 2: 不同并发请求数下的解码吞吐
辅助 AR 权重与起草器规模对平均接受长度 τ 的影响
Table 3: 辅助 AR 权重与起草器规模对平均接受长度 τ 的影响
以 Qwen3-8B 为目标时 D3D-8B 深度与初始化的消融
Figure 2: 以 Qwen3-8B 为目标时 D3D-8B 深度与初始化的消融
AIME25 上解码加速与缓存命中率随异步起草预算的变化
Figure 3: AIME25 上解码加速与缓存命中率随异步起草预算的变化
查看结构化数据
任务指标本文基线提升
Qwen3-8B 七基准平均 解码加速 / 接受长度 τ 5.00×(τ=7.88) DSpark 4.44×,DFlash 4.03×,PARD-2 4.08× 较最佳基线 +12.6%
Qwen3-32B 七基准平均 解码加速 / 接受长度 τ 5.71×(τ=7.73) DSpark 3.92×,DFlash 3.67×,SSD 3.54× 较最佳基线 +45.7%
GSM8K(Qwen3-32B 目标) 解码加速 7.48×(τ=9.58) PARD-2 5.62×,DSpark 4.59×,EAGLE-3 4.08× 全文最高单项加速
MT-Bench 对话(两目标) 解码加速 2.68×(8B)/ 3.01×(32B) DSpark 3.17×(8B)/ DFlash 3.00×(32B) 8B 上落后 DSpark,仅 32B 上领先,为最弱项
D3D-8B 层剪枝 平均 τ 保留率 / 平均加速 36→31 层保留 >99% τ,加速 4.69× 未剪枝 36 层 4.44× 深度 -13.9%,加速 +5.6%
辅助 AR 监督消融(D3D-1.7B) 平均接受长度 τ λ=1:GSM8K 8.29 λ=0:GSM8K 7.89 四基准提升 +0.24 至 +0.40 词元
并发服务吞吐(16 路并发) 词元/秒(相对加速) MATH-500 864(2.7×) 单请求 154(6.1×) 吞吐随并发上升,相对加速由 6.1× 降至 2.7×

局限与改进

作者明确承认三点:其一,评估时目标与起草器各占一张 GPU(D3D、SSD、PARD-2 用两张 H800,同步基线只用一张),并未把同样的双卡预算拿去与目标模型张量并行等替代方案比较每卡吞吐;其二,缓存未命中时必须同步起草一轮,验证流水线会出现停顿;其三,实现基于 Transformers,尚未在 SGLang、vLLM 等生产框架中检验其批处理与调度优化下的表现。我的补充观察:D3D-8B 参数量约 8.2B,与 Qwen3-8B 目标几乎相当,显存与部署成本不低;训练语料要求用目标模型重新生成 142 万条回复,更换目标模型就要重跑一遍昂贵的数据生成;评测全部使用贪婪解码与非思考模式,思考型长推理场景未验证;对话类基准收益最弱(MT-Bench 仅 2.68×/3.01×,8B 上还落后 DSpark 的 3.17×),且 16 路并发下相对加速滑落至 1.5×,说明其增益主要面向低延迟单请求或轻并发场景。

独立分析的弱点

第一,双 GPU 假设削弱性价比论证:起草器独占一卡,而论文自己承认未与『同预算下目标模型张量并行』对比每卡吞吐;在批量服务场景相对加速已跌至 1.5×–2.7×,改进方向是补齐与张量并行、连续批处理的严格吞吐对比,或让起草器与目标模型共享单卡、依靠 CUDA 流重叠来省掉一卡开销。第二,缓存未命中的代价分布不均:$C=12,F=2$ 时命中率仅 71.3%,接近三成的轮次要付出一次完整同步起草,造成明显的长尾延迟;可以引入按请求状态与接受历史在线调整覆盖度 $C$ 与扇出 $F$ 的自适应策略,或在未命中时退回更小的同步块以缩短停顿。第三,独立条件化在发散文本上明显变弱:MT-Bench 的 $\tau=5.71$ 远低于 GSM8K 的 9.87,8B 目标上对话加速甚至不敌 DSpark,说明纯词元前缀条件难以刻画开放式对话的走向;改进方向是对话域微调、动态块大小或轻量目标特征旁路(仅在高不确定性时启用)。第四,训练管线与目标模型强绑定:142 万条回复需逐目标重新生成,可探索多目标共享的通用起草器,或用离线目标模型蒸馏复用已有语料以摊薄成本。

未来方向

作者提出的方向包括:把 D3D 接入 SGLang、vLLM 等生产推理框架,验证其批处理与调度优化下的真实收益;在相同 GPU 预算下与张量并行等目标模型替代用法做吞吐对比。基于其成果可自然延伸的工作有:把异步打包预生成与候选树方法(DART、DDTree、CaDDTree)结合,用扩散起草器低成本生成树形候选并联合优化树结构与预算;研究 1.7B/4B 小起草器在高并发服务下的吞吐—延迟权衡,甚至按负载动态切换起草器规模;把接受长度驱动的剪枝标准推广到其他起草架构(如自回归或混合起草器);在思考模式与更长推理链任务上检验 $\tau$ 的稳健性;以及探索缓存命中率的在线预测模型,动态调整异步预算 $N_{\text{async}}$ 以在命中率与冗余计算之间取得更细粒度的平衡。

复现评估

代码已在 GitHub 开源(fudan-generative-vision/D3D),训练提示来自公开的 Open-PerfectBlend 数据集(142 万条),但回复需用目标模型(Qwen3-8B/32B)按推荐采样重新生成,这一步本身就需要可观的推理算力。主训练成本为 2 张 H800 约 360 GPU 小时(3 epoch、每样本 128 锚点、8-bit AdamW、BF16、全局 batch 16、学习率 $10^{-5}\to10^{-6}$ 余弦调度);剪枝阶段每删一层要做 1 万步蒸馏恢复,36→31 层共 5 轮,且层选择与验证各需独立的 512 条开发集;异步评估还要求目标与起草器各占一张 GPU。复现完整 D3D-8B 流水线难度偏高,更适合的路径是先以 1 个 epoch 训练 D3D-1.7B 验证管线与指标,再决定是否上量;若作者按惯例发布对应目标的检查点,直接跑推理体验异步解码的门槛会低得多。

相似论文推荐