Draft-OPD从验证失败处重放蒸馏,思考模式再快13%

Draft-OPD: On-Policy Distillation for Speculative Draft Models

Haodi Lei, Yafu Li, Haoran Zhang, Shunkai Zhang, Qianjia Cheng, Xiaoye Qu, Ganqu Cui, Bowen Zhou, Ning Ding, Yun Luo, Yu Cheng

cs.CL

2026-05-28

Draft-OPD从失败位置重放蒸馏,同时学被接受和被拒提案;思考模式均加速4.88×,比DFlash快13%。

这篇在解决什么

投机解码用轻量草稿模型先猜一截 token,目标模型再并行验证。加速比几乎完全取决于每次验证能吞下多长:草稿越贴目标分布,接受长度 τ 就越大,昂贵的目标模型前向就越少。

EAGLE-3 和 DFlash 这类训练式草稿,主流配方是拿目标模型自己生成的轨迹做监督微调。热身之后继续堆离线 SFT,测试集上的接受长度就不再涨;把后来 OPD 用的 prompt 再拿去 SFT,接受长度甚至会掉。算力不是瓶颈。SFT 见到的前缀全是目标模型走出来的,推理时目标模型验证的是草稿自己提出的块。训练状态和决定加速的状态不是同一批。

标准 on-policy distillation 本该补这个缺口,草稿模型却接不住。EAGLE / DFlash 式模块只负责在目标模型指引下猜短块,独立 rollout 整段会重复、崩质量;换成目标模型辅助生成,验证后的轨迹又回到目标分布,被拒掉的错刚好被扔掉。草稿最该学的错误,训练时看不见。

方法

Draft-OPD 把轨迹质量和 on-policy 信号拆开处理:目标模型负责把序列走完,错误位置重放负责把草稿自己的动作捞回来。

正向 KL 按教师分布加权,适合已经通过验证的位置;反向 KL 按学生峰值加权,适合打草稿自己拧着目标的那些模式。全正向会把错误当可靠状态学,全反向会把已经对上的位置当错误打。

训练从 DFlash 草稿第 6 个 SFT epoch 接着做 8 个 epoch OPD。基线把同等 FLOPs 全部砸进 10 个 epoch SFT,数据混合物和 DFlash 原论文对齐。OPD 用 16K prompt 池(GSM8K 2K、MATH 5K、AoPS 4K、CodeAlpaca 5K),只取题面,回复在线由目标模型生成。优化器用 AdamW,学习率 3×10^{-4}。SFT 走 SpecForge,OPD 走 verl。Qwen3-4B / 8B 草稿 5 层 Transformer,Qwen3-30B-A3B 用 8 层。

结果

主实验在 Qwen3-4B 和 8B 上,thinking 打开、温度 0、训练 FLOPs 对齐。七项基准(GSM8K、MATH-500、AIME25、MBPP、HumanEval、SWE-bench Lite、MT-Bench)平均如下。

模型方法平均加速平均 τ
Qwen3-4BEAGLE-33.87×5.33
Qwen3-4BDFlash4.33×5.51
Qwen3-4BDraft-OPD4.86×5.96
Qwen3-8BEAGLE-34.06×5.64
Qwen3-8BDFlash4.34×5.19
Qwen3-8BDraft-OPD4.89×5.73

两模型平均加速 4.88×,相对 EAGLE-3 高 23%,相对 DFlash 高 13%;平均 τ 从 DFlash 的 5.35 提到 5.85。温度 0.6 时仍最快,平均 4.17×。EAGLE-3 在 Qwen3-8B、温度 0.6 时 τ 最高,串行起草拖了墙钟,OPD 打在 DFlash 这种并行草稿上更划算。

关掉 thinking 之后数字更高:平均 τ 6.33,平均加速 5.17×。Qwen3-8B 在 MATH-500、温度 0 上到 7.64×。论文不报生成质量,理由是只改草稿、不改验证协议,输出分布仍等于目标模型。

SGLang 加 FA3 后端、并发 1 到 32,吞吐增益没有被并发吃掉。Qwen3-30B-A3B-Thinking 在 AIME25、并发 32 时相对 DFlash 从 4014 提到 4718 tok/s,快 17%,τ 从 4.54 到 5.32。跨模型任务平均 τ 提升 11.2%。

消融在 Qwen3-4B thinking 上。同样 OPD prompt 池继续 SFT 解释不了涨幅:MATH-500 上 Draft-OPD 5.55×,DFlash 加 OPD 数据再 SFT 只有 5.14×。去掉位置衰减、全正向 KL、全反向 KL、随机锚点,MATH-500 分别掉到 5.13×、5.34×、5.11×、5.04×。朴素目标辅助 rollout 扔掉被拒提案后,三项平均加速从 4.63× 掉到 4.29×,相对少 7.3%。

为什么重要

已经上了 EAGLE 或 DFlash 的人,SFT 平台期更像训练分布不对,不像草稿容量到顶。把验证时被扔掉的错捞回来再蒸一次,匹配算力还能再抠一截加速,推理协议不用改。

能直接套的场景很窄:Qwen3 系、DFlash 式并行草稿、无损投机解码。代码和权重已经公开。SGLang 上并发升高相对增益没缩,不是单请求测速虚高。

这是训练配方上的渐进改进,不是新的解码算法。投机解码这块,改训练信号往往比再叠一层草稿结构便宜。

局限与存疑

thinking 模式训练最长 4096 token,评测放到 8192,长推理后半段的验证错误训练时可能没见过。主实验几乎全在 Qwen3,草稿结构跟 DFlash;换模型家族、换 EAGLE 式串行草稿能不能直接搬,没有证据。方法只服务无损验证,近似或有损投机解码没做。

摘要里的「thinking 模型超过 5×」比正文松。thinking、温度 0 的七项平均是 4.88×,过 5× 的是单任务,比如 MATH-500 的 5.55× 和 5.80×;关掉 thinking 才稳定过 5×。OPD 的 16K prompt 几乎全是数学和代码,MT-Bench 上加速仍最低,thinking、温度 0 约 3.18×,域外头没抬起来。评测也没给接受长度的方差:草稿变差会让目标模型更频繁回退,墙钟抖动论文没量化。

术语

原文与代码

社区讨论

相关论文

全部论文解读