← 返回 2026-10-12

投机解码中并行草稿的上下文校正(DCOCO) Contextual Correction of Parallel Draftsfor Speculative Decoding

Roy Eisenstadt, Harel Lidar, Tal Gonen, Omer Luxembourg, Itamar Zimerman, Lior Wolf, Eli David, Ilan Naiman 📅 2026-10-08 👍 28 2026-11-11 18:30
LLM推理加速 并行草稿 扩散语言模型 投机解码 高并发服务

用并行批量打分恢复扩散草稿块内依赖,前缀优先选路,投机解码吞吐最高提升6.6倍

前置知识

投机解码(Speculative Decoding)

LLM 推理加速技术:轻量草稿模型一次提出多个未来 token,目标大模型在一次前向中并行验证。验证从左到右接受最长一致前缀,在首个拒绝处停止并由目标模型补采一个 token。接受/拒绝规则经过精心设计,保证最终输出分布与目标模型完全一致(无损)。加速效果取决于被接受的平均长度与草稿生成延迟之间的权衡。

本文的全部设计(前缀优先、接受长度 τ、吞吐指标)都建立在投机解码的草稿—验证框架和'首错即停'这一结构性质之上,不理解它就无法理解为什么校正应该优先前缀。

并行扩散草稿器(DFlash)

一类基于离散扩散式并行预测的草稿模型:不同于自回归草稿器逐个生成 token,DFlash 在目标模型特征的条件下,用一次前向同时去噪/预测整个 16 token 的草稿块,把草稿延迟压缩到单次前向。代价是块内每个位置看不到前面槽位最终选定的 token,会出现单个合理但组合不连贯的输出(如同时有 'New York' 与 'San Diego' 概率时输出 'New Diego')。

DFlash 是 DCOCO 的直接宿主:校正器的全部输入(隐状态、候选 id、logit)都来自同一次 DFlash 前向,理解它的并行性与缺陷是理解本文动机的前提。

接受长度 τ 与 top-k 覆盖率

τ = E[A(ŷ)] + 1,其中 A(ŷ) 是每轮被验证器接受的最长前缀长度,τ 决定每轮提交的 token 数,是解释吞吐变化的机制指标。top-k 覆盖率指草稿器 top-k 候选中包含验证器最终提交 token 的槽位比例。本文实测 Qwen3-8B 上 top-1 平均覆盖 0.400 而 top-16 达 0.755;最后一个槽位 top-1 仅 0.154 而 top-16 仍有 0.608。

覆盖率实验证明'正确 token 已在候选池中、只是没被选中',是'重选择而非重新生成'这一核心思路的实证依据;τ 则是读懂所有实验表格的钥匙。

点质量提议与随机验证

若草稿器确定性地输出某个 token,其提议分布是点质量 $p_j(v|x,\hat{y}_{<j}) = \mathbf{1}[v = \hat{y}_j]$。标准投机采样以 $\min\{1, q_j(\hat{y}_j)/p_j(\hat{y}_j)\} = q_j(\hat{y}_j)$ 的概率接受,拒绝时从残差分布 $r_j(v) = q_j(v)\mathbf{1}[v \neq \hat{y}_j]/(1 - q_j(\hat{y}_j))$ 重采样,可证明仍精确保持目标分布。

论文附录 G 专门证明 DCOCO 的确定性提议在温度 T=1 的随机解码下依然无损,因此转移分数无需 softmax 归一化、无需采样——这是方法正确性的关键一环。

研究动机

基于 DFlash 等并行扩散草稿器的投机解码虽然把草稿延迟压缩到一次前向,但块内每个位置都是在不知道前面槽位最终选了什么 token 的情况下预测的,丢掉了自回归草稿天然具备的块内依赖。结果是各自看似合理的预测拼在一起却不连贯——例如草稿器同时给 'New York' 和 'San Diego' 概率时可能输出 'New Diego'——直接压低草稿接受率。已有两条修正路线:DSpark 在并行骨干上加轻量串行模块做半自回归草稿,Domino 用因果校正模块借助前缀信息精炼草稿,两者都能恢复接受率,但它们的校正模块都是逐位置串行递推的,其延迟坐在每个草稿周期的关键路径上。在 vLLM 批量服务下,并发越高、验证器周期被摊薄得越厉害,这块串行开销的相对占比就越大:论文实测在 32 路并发时 Domino 和 DSpark 的吞吐甚至跌破不加校正的 DFlash 本身,校正收益在真实服务负载下完全消失。

本文的目标是本文要回答的核心问题是:能否在不重新引入任何串行神经模块的前提下,恢复并行草稿丢失的块内依赖?具体目标分三层。其一,校正所需信息必须全部来自已有的一次 DFlash 前向(隐状态、候选 id、logit),不增加任何草稿前向次数,使神经打分完全并行。其二,把'修正'重新表述为在草稿器已有的 top-K 候选池内做重选择,而不是重新生成 token——实证依据是 Qwen3-8B 上在 top-1 选错的槽位中,59% 的情况下正确 token 就躺在 top-16 候选里。其三,选择规则必须尊重投机验证'接受连续前缀、首错即停'的结构,优先保证块首位置的质量,而非整块聚合分数最优。最终目标是在贪心与随机解码、开/关扩展思考的全部组合以及 1–32 路并发下都取得最高平均吞吐。

与已有工作不同的是,本文切入点的独特性在于两个被前人忽视的观察的组合。第一,并行草稿器'往往已经猜到了正确答案、只是没选它':top-16 覆盖率比 top-1 高出巨大(15 槽平均 0.755 对 0.400),且越深入块内差距越大(末槽 0.608 对 0.154,差距从首槽的 0.12–0.14 增至 0.38–0.45),因此校正可以从'逐位重新生成'降维成'在 K 个候选间重选',而相邻槽位间的 $K^2$ 个候选转移可以一次批量打分。第二,验证的不对称性:第 5 个槽位改得再好,只要第 1 槽被拒就完全无效,所以优化目标应是前缀生存质量而非整条路径的分数和。DSpark 和 Domino 只看到了第一点(恢复依赖),却用逐位置串行模块支付延迟代价;DCOCO 把所有神经计算并行化,唯一串行的只是 $O(BK)$ 的网格游走——纯 argmax、无任何网络前向——从而在高并发下仍保有优势,而串行竞争者反被开销吞没。

核心方法

DCOCO(DFlash Contextual Corrector)分两步工作。第一步是并行重打分:对一次 DFlash 前向产出的 $B=15$ 个草稿槽位(另有一个作为上下文锚点的槽位),每槽保留 top-$K=16$ 个候选,构成 $B \times K = 240$ 个节点的稠密一阶网格;对每对相邻槽位间的所有 $K^2 = 256$ 个候选转移计算分数 $S_p(a,b) = \ell_{p+1}(b) + \Delta_θ(\cdot)$,其中后继候选的草稿 logit 提供基础分,一个在槽位间共享参数的两层 MLP 给出上下文修正项;全部 $(B-1)K^2 = 14 \times 256 = 3584$ 个转移分数在一个批量操作内并行算完。第二步是前缀优先选路:第一个槽位取草稿的 argmax,之后每个槽位从已选前驱出发选分数最高的后继 $k_{p+1} = \arg\max_b S_p(k_p, b)$,逐步向右走出最终提议块。直觉上,这是让草稿器'回头看一眼'每个候选与前文的搭配是否协调,再按验证器消费草稿的顺序(从左到右、遇错即停)挑选最佳组合。

核心创新有二。第一是'重选择而非重生成':不从头重新生成草稿,而是利用覆盖率实验揭示的事实——正确 token 大概率已在 top-$K$ 池中——把块内依赖恢复问题转化为对 $K^2$ 个候选转移的打分问题。所有转移分数由同一组共享参数(候选表示 + 槽对状态 + 两层 MLP,Qwen3-8B 上仅 2,229,505 个参数)一次并行算出,没有任何逐位置运行的神经递推,这与 DSpark/Domino 必须沿块串行运行的校正模块有本质区别。第二是'前缀优先贪心选路':与其最大化整条路径的转移分数之和(后面的高分无法弥补前面被拒的损失),不如从左到右逐步贪心,每一步都在已选前驱的条件下选最优后继——这与验证'首错即停'的消费结构严格对齐。此外 MLP 输出层零初始化,训练开始时 $\Delta_θ \equiv 0$,每个转移分数退化为后继草稿 logit,选路严格还原草稿器自身的 argmax 提议,保证训练起点即基线、增加的任何收益都来自学到的修正项。

方法步骤详情

(1)单次 DFlash 前向产出每槽隐状态 $h_i$、top-16 候选 id 与草稿 logit $\ell_i(k)$。(2)构造候选表示:$b_i^k = \mathrm{LN}(W_{cand} E[c_i^k])$、$g_i = \mathrm{LN}(W_{ctx} h_i)$ 采用非仿射 LN(token 嵌入与隐状态尺度差两个数量级以上),融合为 $z_i^k = \mathrm{LN}_{\gamma,\beta}(W_{fuse}[b_i^k; g_i])$,宽度 $r=128$。(3)槽对状态 $s_p = W_{pair}[h_p; h_{p+1}]$ 每对槽只算一次、被其间 $K^2$ 个转移复用。(4)转移打分 $S_p(a,b) = \ell_{p+1}(b) + \Delta_θ([s_p; z_p^a; z_{p+1,b}; \ell_p(a); \ell_{p+1}(b)])$,$\Delta_θ$ 为 386→256→1 的 GELU 两层 MLP,全部 3584 个分数一次批量算出。(5)前缀优先游走 $O(BK)$:首槽取草稿 argmax,其后逐槽选 $\arg\max_b S_p(k_p,b)$。(6)训练:从 6 epoch 的 DFlash 检查点出发,草稿器与校正器联合再训 6 epoch;标签是教师强制下验证器在相邻两槽的 argmax token 对(都需在各自 top-K 内,否则掩码剔除),损失为对 $K^2$ 个转移联合 softmax 的交叉熵,并按 $e^{-(p-1)/\rho}$($\rho=4$)对靠前位置指数降权以近似前缀生存;token 嵌入表冻结,AdamW 学习率 $6\times10^{-4}$、cosine 加 4% warmup、8 卡、约 75 万 token/优化器步。

技术新颖性

技术新颖性体现在四个层面。架构上,此前恢复块内依赖的方法(Hydra 的串行依赖头、DSpark 的半自回归模块、Domino 的因果校正编码器)都需要一个沿块逐位递推的学习模块坐在关键路径上;DCOCO 的神经打分完全并行且参数全局共享(2.2M 参数对比五层草稿骨干),唯一串行的是不含任何参数的 argmax 游走。目标上,论文首次把投机验证的前缀结构明确引入草稿校正:训练损失用指数降权($\rho=4$)作为前缀生存的固定代理,推理用前缀优先贪心,且作者论证联合交叉熵的监督严格强于解码时需支持的条件决策——它不仅把真后继排到真前驱所在行的首位,还同时压制所有竞争行。理论上,附录 G 证明确定性点质量提议在标准投机采样下依然无损:接受概率化为 $q_j(\hat{y}_j)$,残差分布有闭式解 $r_j(v) \propto q_j(v)\mathbf{1}[v \neq \hat{y}_j]$,因此分数无需归一化、无需从候选分布采样。实验方法论上,通过'同一组分数、三种选路规则'(Table 3)和'同预算训练对照'(Table 4)两个控制实验,把收益干净地归因于校正器本身而非训练预算或选择技巧。

DCOCO: parallel scoring, prefix-first selection.
Figure 2: DCOCO: parallel scoring, prefix-first selection.

实验结果

实验覆盖 4 个验证器(Qwen3-4B/8B/Coder-30B-A3B、Llama-3.1-8B)×10 个基准,贪心/随机、开/关扩展思考,vLLM 0.27.0 单卡 B200。Qwen3-8B 无思考 T=0:DCOCO 平均 959.7 tok/s(3.62×),领先最强基线 Domino(839.3,3.16×)14.3%,T=1 领先 13.6%;单套件最高 MATH-500 6.13×,全文最高 6.6×(Qwen3-4B AIME-25)。Table 2 的 12 个配置格中 DCOCO 平均加速全部第一,领先各自最强基线 8–19%,11/12 格平均接受长度第一(Qwen3-8B T=0 τ=4.985,对 Domino 4.613、DSpark 4.254、DFlash 3.913);机制上对最强基线是 7–8% 更长前缀 ×6% 更短周期,对 DFlash 是每周期 3–4% 开销换 18–27% 更长接受。并发 4–32 路下 DCOCO 每格吞吐最高:T=0 峰值领先 23%(16 路)、32 路仍 +19.2%(11512 对 DFlash 9655),而 Domino(9014)与 DSpark(9490)跌破不加校正的 DFlash;T=1 领先从 +18% 收窄到 +12.4%。控制实验:基线多训 6 epoch 接受长度仅 +≤1.9%,DCOCO 联合阶段 +27.4% τ、+22.6% 吞吐,排除预算解释。消融:去槽对状态 τ −7.3%,去候选表示 −4.8%,冻结骨干仍比 DFlash 高 4.4% 但比联合训练低 15.9%。选路对照(Table 3):Global-Sum 全部套件更差;Geometric(λ=0.75) 接受率持平(5.258 对 5.254)但 Greedy 每套件吞吐都更高(平均 +2.8%)。

Throughput (output tokens/s, per-stream) and speedup over no-spec decoding, Qwen3-8B, thinking off, concurrency 1, max 2048 generated tokens.
Table 1: Throughput (output tokens/s, per-stream) and speedup over no-spec decoding, Qwen3-8B, thinking off, concurrency 1, max 2048 generated tokens.
All configurations at a glance: average speedup over vanilla decoding, unweighted mean over the ten evaluation suites.
Table 2: All configurations at a glance: average speedup over vanilla decoding, unweighted mean over the ten evaluation suites.
Path selection over identical trained scores (Qwen3-8B from-pretrained corrector, T=0, no thinking, 2048 max tokens).
Table 3: Path selection over identical trained scores (Qwen3-8B from-pretrained corrector, T=0, no thinking, 2048 max tokens).
Extending baseline training to match our total budget (Q8B no-thinking, max generated tokens 2048, T=0, averaged across the 10 benchmarks).
Table 4: Extending baseline training to match our total budget (Q8B no-thinking, max generated tokens 2048, T=0, averaged across the 10 benchmarks).
Ablations: throughput (output tokens/s, per-stream), Qwen3-8B, thinking off, concurrency 1, max 2048 generated tokens, all ten suites.
Table 5: Ablations: throughput (output tokens/s, per-stream), Qwen3-8B, thinking off, concurrency 1, max 2048 generated tokens, all ten suites.
Ablations: accepted length τ, Qwen3-8B, thinking off, concurrency 1, max 2048 generated tokens, all ten suites.
Table 6: Ablations: accepted length τ, Qwen3-8B, thinking off, concurrency 1, max 2048 generated tokens, all ten suites.
Coverage by verifier: means over the 15 drafted slots of Figure 1, with the first and last slot shown per verifier.
Table 18: Coverage by verifier: means over the 15 drafted slots of Figure 1, with the first and last slot shown per verifier.
Aggregate throughput (output tokens/s) as concurrency grows, Qwen3-8B, thinking off, averaged over the ten suites per concurrency workload.
Table 19: Aggregate throughput (output tokens/s) as concurrency grows, Qwen3-8B, thinking off, averaged over the ten suites per concurrency workload.
At high concurrency, DCOCO achieves the highest throughput, while Domino and DSpark fall below DFlash.
Figure 3: At high concurrency, DCOCO achieves the highest throughput, while Domino and DSpark fall below DFlash.
At high concurrency, overhead outweighs acceptance gains for Domino and DSpark, while DCOCO remains faster than DFlash.
Figure 4: At high concurrency, overhead outweighs acceptance gains for Domino and DSpark, while DCOCO remains faster than DFlash.
At high concurrency, DCOCO achieves the highest throughput, while Domino and DSpark fall below DFlash (Qwen3-4B).
Figure 5: At high concurrency, DCOCO achieves the highest throughput, while Domino and DSpark fall below DFlash (Qwen3-4B).
DCOCO achieves the highest throughput at every concurrency, while Domino falls increasingly behind DFlash as load grows (Llama-3.1-8B).
Figure 7: DCOCO achieves the highest throughput at every concurrency, while Domino falls increasingly behind DFlash as load grows (Llama-3.1-8B).
Domino's acceptance gain is consumed by per-cycle overhead as concurrency grows, and DSpark never matches DFlash's acceptance, while DCOCO remains faster than DFlash (Qwen3-4B).
Figure 8: Domino's acceptance gain is consumed by per-cycle overhead as concurrency grows, and DSpark never matches DFlash's acceptance, while DCOCO remains faster than DFlash (Qwen3-4B).
At high concurrency, overhead outweighs Domino's acceptance gain and DSpark gains no acceptance over DFlash, while DCOCO remains faster than DFlash (Qwen3-Coder-30B-A3B).
Figure 9: At high concurrency, overhead outweighs Domino's acceptance gain and DSpark gains no acceptance over DFlash, while DCOCO remains faster than DFlash (Qwen3-Coder-30B-A3B).
As concurrency grows, Domino's acceptance gain is consumed by per-cycle overhead, while DCOCO remains faster than DFlash (Llama-3.1-8B).
Figure 10: As concurrency grows, Domino's acceptance gain is consumed by per-cycle overhead, while DCOCO remains faster than DFlash (Llama-3.1-8B).
查看结构化数据
任务指标本文基线提升
文本生成吞吐(Qwen3-8B,10 套件平均,无思考) tokens/s(括号内为对无投机解码的加速比) DCOCO 959.7(3.62×) Domino 839.3(3.16×)、DFlash 783.1(2.95×)、DSpark 765.6(2.88×) +14.3%(T=0)/ +13.6%(T=1),对最强基线
数学推理(Qwen3-8B,MATH-500,T=0) 输出 tokens/s 及加速比 1625.2(6.13×) Domino 1412.3(5.33×)、DFlash 1293.8(4.88×) +15.1%;全文最高 6.6× 加速出现在 Qwen3-4B 的 AIME-25(1811.7,6.59×)
平均接受长度 τ(Qwen3-8B,T=0,无思考) 每轮平均提交 token 数 4.985 Domino 4.613、DSpark 4.254、DFlash 3.913 对 Domino +8.1%,对 DFlash +27.4%
高并发服务(Qwen3-8B,32 路并发,T=0,无思考) 聚合吞吐 tokens/s 11512.4 DFlash 9655.0、DSpark 9490.3、Domino 9013.9(两者均低于不加校正的 DFlash) +19.2%;峰值在 16 路并发时领先最强基线 +23.0%
Llama-3.1-8B 平均吞吐(10 套件,T=0,无思考) tokens/s 加速比 1042.4(3.75×) Domino 900.8(3.24×)、DFlash 844.2(3.03×) +15.7%;但 T=1 优势减半为 +8%

局限与改进

作者承认的局限:收益幅度跟随草稿器的基础接受率——数学/代码任务可达 3.7–6.1×(T=0 无思考),而开放聊天只有 1.8–1.9×,因为聊天文本本身可预测性低、草稿 top-1 命中率差;Llama-3.1-8B 上采样解码的领先幅度减半(T=0 +16% → T=1 +8%)。我自己观察到的局限:逐套件看并非全胜——Llama-3.1-8B 上 MBPP T=0 时 DCOCO 989.7(3.51×)低于 DFlash 1036.3(3.67×)和 Domino 1128.5(4.00×),LiveCodeBench T=1 时 DCOCO 545.3(1.97×)低于 DFlash 643.3(2.32×)和 DSpark,且 Llama T=1 的平均 τ(2.671)甚至略低于 Domino(2.702),说明校正器在特定模型/任务组合上可能零收益甚至负收益;方法深度绑定 DFlash 这一类并行草稿器,且每换一个验证器都要重训草稿器加校正器;批量打分成本随块长 $B$ 线性、随候选数 $K$ 二次增长,扩大块长或候选数时开销会快速上升;一阶网格只建模相邻槽位依赖,块内长程一致性(如相隔数槽的词汇搭配)无从表达;训练每方法只用 seed 42 跑一次,未报告跨训练运行的方差;评测子集较小(多数 128 行、AIME-25 仅 30 行),百分之几量级的 τ 差异在此规模下的统计稳健性存疑。

独立分析的弱点

独立分析三个弱点。(1)一阶马尔可夫假设:$S_p$ 只看相邻槽对,跨槽的搭配冲突(例如槽 1 选 'New' 而槽 3 选 'Diego' 这类相隔两槽才暴露的不一致)无法通过相邻转移打分捕捉,贪心游走也只是局部最优;改进方向是加入轻量跨槽注意力项,或在游走过程中对已选前缀做二次重打分。(2)贪心无前瞻且不可回退:前缀优先虽对齐验证结构,但早期一旦选中次优候选,后续只能将错就错;由于打分已全部并行完成,可几乎零成本地把单路径游走升级为 beam=2–4 的窄束搜索,复杂度仍只有 $O(BK \cdot \mathrm{beam})$。(3)逐验证器重训与全局固定超参:$B=16$、$K=16$、$\rho=4$ 对所有域共用,而覆盖率数据显示聊天任务 τ 仅 2.5–2.9,块的后半段几乎注定被丢弃,验证算力被浪费;改进方向是按草稿置信度在线截断块长或动态调整 K,并把 $K^2$ 的二次成本稀疏化(每个前驱只保留 top-$m$ 后继,降为 $O(BKm)$)。此外,训练标签完全来自教师强制下验证器正确的前缀,虽然作者论证了这正是校正器输出被消费的唯一状态,但真实解码中的分布漂移(校正后的提议导致验证器状态偏离训练分布)未被显式建模。

未来方向

作者提出或暗示的方向:把候选网格打分推广到更丰富的草稿树结构(结合 EAGLE-2 式按置信度分配的动态树);正文顺理成章的延伸包括——将上下文校正思想移植到其他并行草稿器(Medusa/Hydra 的多头、PARD、CTC 草稿),因为重选择范式只依赖'一次前向给出 top-K 候选'这一最小接口;用在线解码的真实接受/拒绝信号做 RL 或 bandit 微调转移分数,替代教师强制的验证器 argmax 标签;在更大规模 MoE(百亿级以上)和多卡张量并行下复验高并发结论;研究跨训练种子的方差与 τ 增益的统计显著性。基于本文成果还可延伸:利用覆盖率随槽位深度的衰减规律(top-1 从首槽 0.81 跌至末槽 0.15)做自适应块长——在线估计剩余槽位的期望边际收益、提前终止草稿块以省下验证算力;以及探索校正器作为可迁移通用模块(输入均为相对表示,可配适配层跨验证器共享),把'每换验证器重训'的成本摊薄。

复现评估

复现条件较好。代码在 GitHub、各验证器配套的草稿器与校正器权重在 Hugging Face 公开(论文首页附链接)。训练数据全部公开:Nemotron Post-Training Dataset v2 的 stem/math/code 子集约 80 万提示加 CodeAlpaca-20k,各验证器以贪心解码(T=0、关思考、上限 4096 token)重生成续写。训练协议完整给出:AdamW 学习率 $6\times10^{-4}$、无权重衰减、cosine 调度加 4% warmup、8 GPU、每微步每卡 4096 token 预算、23 步梯度累积(约 75.4 万 token/优化器步)、12 epoch(6 epoch DFlash + 6 epoch 联合训练),token 嵌入冻结,BF16 推理。校正器极小(Qwen3-8B 上 2,229,505 参数),推理开销只是每周期一次 3584 个转移的批量 MLP 加一次 $O(BK)$ 游走。评测环境逐项列出:vLLM 0.27.0、PyTorch 2.13.0+cu130、单卡 B200、关前缀缓存、开 CUDA Graph,T=1 用种子 42/43/44 三次运行报均值±标准差,并公布固定评测子集与抽样种子 1234(多数基准 128 行)。难点在硬件:完整复现训练需要 8 卡级别的 GPU 和 B200 级评测卡;只复现推理对比则只需下载权重加单卡,难度中等。注意每方法只用 seed 42 训练一次,严格复现表中数字应无障碍,但跨训练运行的方差论文未测量。

相似论文推荐