投机解码(Speculative Decoding)是当前大模型推理加速最重要的技术路线之一:用一个轻量草稿模型先”猜”出一段候选 token,再由完整的目标模型一次性并行验证,在无损的前提下把生成速度提升数倍。然而草稿质量和验证效率之间存在一对难以兼得的矛盾——自回归草稿质量高但速度线性变慢,并行草稿单次前向就能产出长块却因缺乏 token 间依赖而”后缀衰减”,固定长度验证又在高并发下白白浪费目标模型的批处理容量。

DeepSeek-AI 与北京大学联合发表的 DSpark 论文(arXiv:2607.05147v1)给出了自己的解法:半自回归生成(并行骨干 + 轻量顺序头)解决草稿质量问题,置信度调度验证(置信度头 + 硬件感知调度器)解决系统效率问题。这套框架不只是纸面成果——它已经被部署进 DeepSeek-V4 的生产推理系统,替换了运行许久的 MTP-1 基线。

核心结论:离线基准上,DSpark 在 Qwen3-4B/8B/14B 三个目标模型上的宏平均接受长度分别比自回归基线 Eagle3 高 30.9%/26.7%/30.0%、比并行基线 DFlash 高 16.3%/18.4%/18.3%;在 DeepSeek-V4-Flash / V4-Pro 的线上真实流量中,同等聚合吞吐下每用户生成速度提升 60%–85% / 57%–78%,并且在基线无法支撑的严格交互性 SLA 下仍维持可用吞吐,把推理服务的吞吐–交互性 Pareto 前沿整体向外推。

背景:投机解码的三个杠杆

自回归语言模型每生成一个 token 都要做一次完整的前向,推理延迟与输出长度成正比。投机解码用一个轻量草稿模型 MdM_d 为每个解码周期提出 γ\gamma 个候选 token,目标模型 MtM_t 单次前向验证整块:在每个位置按 min⁡ ⁣(1, pt(xk)/pd(xk))\min\!\bigl(1,\, p_t(x_k)/p_d(x_k)\bigr) 的概率接受,从左到右验证,第一个被拒绝的位置之后全部丢弃,并额外产生一个 bonus token。拒绝采样规则保证了输出分布与目标模型完全一致,因此加速没有质量损失。

设 τ\tau 为每周期平均接受 token 数,TdraftT_{\text{draft}} 与 TverifyT_{\text{verify}} 分别为草稿与验证的墙钟时间,则每 token 的平均延迟是:

L=Tdraft+TverifyτL = \frac{T_{\text{draft}} + T_{\text{verify}}}{\tau}

提升加速比只有三个杠杆:草稿更快(降低 TdraftT_{\text{draft}})、草稿更好(提高 τ\tau)、验证更聪明(降低有效 TverifyT_{\text{verify}})。现有草稿架构围绕前两个杠杆各走极端,而验证环节则长期被当成”固定长度”处理。DSpark 正是把这三个杠杆统一起来的框架。

两类草稿架构的固有缺陷

自回归草稿按顺序逐个采样草稿 token,每个位置都显式依赖前面采样的 token(EAGLE 系列、MTP 都属于这一类)。依赖建模能力强,但草稿耗时随块长线性增长(Tdraft∝γT_{\text{draft}} \propto \gamma),被迫使用短块和浅层网络;树形验证可以补偿,但大量验证 token 反过来压低服务吞吐。

并行草稿(Medusa、P-EAGLE、DART、DFlash 等)单次前向产出全部 γ\gamma 个草稿 token,TdraftT_{\text{draft}} 几乎与块长无关,因此能用更深的网络和更大的块(例如 γ=16\gamma=16)。但每个位置是独立预测的:当上下文允许多种合理续写(比如”of course”和”no problem”)时,并行模型会把所有可能的前驱做边缘化,可能拼出”of problem”或”no course”这类跨模式冲突(multi-modal collision),接受率沿块长快速衰减——后缀衰减(suffix decay)。

更隐蔽的问题在验证端:固定验证长度忽略了两个维度的差异。数据侧,代码这类结构化请求天然接受率高,开放聊天则低得多;系统侧,轻负载下多验证几个 token 几乎免费,高并发下每一次不必要的验证都在占用本可服务其他请求的目标模型批容量。理想验证长度应该随这两个轴动态变化——这正是 DSpark 的置信度调度要解决的问题。

一、半自回归生成:一点自回归,补上并行草稿的短板

DSpark 的核心观察是:并行草稿的首位容量优势与自回归草稿的后缀连贯性并非不可兼得。草稿生成被拆成两个阶段:

DSpark 架构与解码周期

图 1:DSpark 架构与解码周期。目标模型生成 anchor token D 后,并行骨干与顺序头联合产出草稿 token E–H 及置信度分数 c1–c4;硬件感知调度器保留前缀 E–F–G、丢弃低置信度的 H,目标模型并行验证该前缀(E、F 被接受、G 被拒绝后生成修正 token G)。*

并行阶段。 骨干是一个并行草稿(论文实例化为 DFlash):整块单次前向,产出隐藏状态 h1,…,hγh_1, \dots, h_\gamma 与基础 logits U1,…,UγU_1, \dots, U_\gamma。论文只做了一处微调——原版 DFlash 用”anchor token + γ\gamma 个 mask”预测 mask 位置,DSpark 把 anchor 本身当作第一个预测位置,于是 γ\gamma 个输入 token(anchor + γ−1\gamma-1 个 mask)产出 γ\gamma 个草稿 logits,在几乎不损失草稿质量的前提下省掉一次位置的计算。

顺序阶段。 一个轻量的顺序模块为基础 logits 补充”前缀依赖转移偏置” Bk(x0,x<k,xk)B_k(x_0, x_{<k}, x_k),把块内分布改写为自回归因子分解:

P(X∣x0)=∏k=1γpk(xk∣x0,x<k),pk(v∣x0,x<k)=exp⁡ ⁣(Uk(v)+Bk(x0,x<k,v))∑u∈Vexp⁡ ⁣(Uk(u)+Bk(x0,x<k,u))P(X \mid x_0) = \prod_{k=1}^{\gamma} p_k(x_k \mid x_0, x_{<k}), \qquad p_k(v \mid x_0, x_{<k}) = \frac{\exp\!\bigl(U_k(v) + B_k(x_0, x_{<k}, v)\bigr)}{\sum_{u \in \mathcal{V}} \exp\!\bigl(U_k(u) + B_k(x_0, x_{<k}, u)\bigr)}

推理时顺序模块从左到右采样。关键是它必须足够轻(Tsequential≪TparallelT_{\text{sequential}} \ll T_{\text{parallel}}),让总草稿延迟仍由并行阶段主导。论文给出两种实例:

  • Markov 头:偏置只依赖紧邻的上一个 token,近似成一个低秩分解 B=W1W2B = W_1 W_2(W1∈RV×rW_1 \in \mathbb{R}^{V \times r} 作 embedding 查表,W2∈Rr×VW_2 \in \mathbb{R}^{r \times V} 作 logit 投影,默认 r=256r=256)。回到”of course / no problem”的例子:位置 1 采到 “of” 后,Markov 头在位置 2 抬升 “course”、压低 “problem”,跨模式冲突被直接消解。存储与每步计算都极小,是默认选择。
  • RNN 头:用带门控的循环状态 sks_k 累积块内完整前缀历史,输入为 [sk−1; W1[xk−1]; hk]∈R2r+d[s_{k-1};\, W_1[x_{k-1}];\, h_k] \in \mathbb{R}^{2r+d},做一次门控更新(gate/candidate/output 由单个线性投影切分)。只在更长草稿块上带来边际收益,实现复杂度高,因此不作为默认。

关于这个设计,论文有一个值得注意的发现:2 层 DSpark 就胜过 5 层 DFlash(图 3)。注入局部自回归比单纯堆叠更深的并行层,能得到更好的序列连贯性——“一点自回归走得很远”。

二、置信度调度验证:把验证预算花在刀刃上

半自回归架构让 DSpark 能高效产出长草稿块,但产出更多草稿 token 并不自动等于更快。DSpark 把”验证多长”形式化为一个系统级吞吐最大化问题,由两个组件协同完成:

置信度头:预测”能活到哪一位”

置信度头对每个草稿位置输出标量 ck∈(0,1)c_k \in (0,1),建模条件存活概率——给定块内前面所有 token 都被接受时,第 kk 个 token 通过目标验证的概率。结构是一个轻量线性投影加 sigmoid:

ck=σ ⁣(w⊤[hk; W1[xk−1]])c_k = \sigma\!\bigl(\mathbf{w}^{\top} [h_k;\, W_1[x_{k-1}]]\bigr)

其中 hkh_k 是骨干隐藏状态,W1[xk−1]W_1[x_{k-1}] 是上一个草稿 token 的 Markov embedding。监督标签用分析精确的逐位接受率:它等于草稿分布与目标分布的总变差距离(TVD),

ck∗=1−12 ∥pkd−pkt∥1c^{*}_k = 1 - \tfrac{1}{2}\,\bigl\lVert p^{d}_{k} - p^{t}_{k} \bigr\rVert_{1}

与只要求排序正确的阈值式启发相比,调度器需要的是绝对量级的累积接受概率。神经网络的置信度天然过度自信(原模型 ECE 3%–8%),论文引入顺序温度缩放(STS):利用链式法则把前缀接受联合概率写成 ∏i≤kci\prod_{i \le k} c_i,在保留验证集上从左到右逐位置做一维网格搜索,找到使累积乘积的 ECE 最小的温度标量(前面位置已校准的分数保持固定)。温度缩放保持序关系不变,只把预测概率拉回经验接受率——校准后平均 ECE 降到约 1%。

硬件感知前缀调度器:一次全局吞吐优化

考虑一批 RR 个活跃请求。对请求 rr,第 jj 位草稿 token 的存活概率是累积乘积 ar,j=∏i≤jcr,ia_{r,j} = \prod_{i \le j} c_{r,i}(单调非增)。一次验证步骤里,目标模型收到的总批大小 B=∑r(1+ℓr)B = \sum_{r} (1 + \ell_r),期望接受 token 数 τ=∑r(1+∑jar,j)\tau = \sum_{r} \bigl(1 + \sum_{j} a_{r,j}\bigr)。假设引擎吞吐只由批大小决定,用 SPS(B)\mathrm{SPS}(B)(steps per second)表示——这条容量曲线在引擎初始化时离线刻画一次,存成轻量成本表。调度器最大化系统级期望吞吐:

Θ=τ⋅SPS(B)\Theta = \tau \cdot \mathrm{SPS}(B)

形式上这是组合搜索,但目标结构允许贪心求解:因为 ar,ja_{r,j} 关于 jj 单调非增,把请求 rr 的验证长度从 j−1j-1 延伸到 jj 的边际收益恰好是 ar,ja_{r,j},所以把所有候选 token 按存活概率全局排序、沿这个排序逐条”准入”,就能在批大小可变的情况下沿贪心路径枚举最优分配。

但这里有一个理论上必须守住的红线——无损性。投机解码要求准入决策满足”非预期性”(non-anticipating):第 kk 个草稿 token 是否进入验证前缀,只能取决于采样该 token 之前可见的信息。DSpark 的置信度头依赖上一个已采样 token,因此第 k+1k+1 位的存活概率显式依赖 xkx_k 的具体取值——如果做”事后全局搜索”,第 kk 位的准入就会泄漏 xkx_k 本身,产生选择偏差。论文在附录 A 里给出了一个构造性反例:同样的分布下,回顾式调度器会让输出分布从目标分布的 (0.7,0.3)(0.7, 0.3) 变成 (0.85,0.15)(0.85, 0.15),直接破坏无损性。

因此算法 1 采用早停机制:贪心准入过程中一旦吞吐不再上升(Θ≤Θbest\Theta \le \Theta_{\text{best}})立即停止,截断决策只依赖已处理的前缀,把准入事件与未来 token 隔离,恢复严格因果性(严格说,只有目标函数单峰、容量曲线平滑衰减时早停才等价于全局最优)。

三、训练配方:冻结目标,三损失联合

训练时从每条目标序列随机采样多个 anchor 位置构成 γ\gamma-token 块;目标模型全程冻结,草稿模型共享其 embedding 与 LM head(同样冻结),只更新骨干草稿器、顺序模块与置信度头。目标函数是三项损失的位置加权和,权重 wk=exp⁡ ⁣(−(k−1)/γ)w_k = \exp\!\bigl(-(k-1)/\gamma\bigr) 强调对期望接受长度贡献更大的靠前位置:

损失作用默认权重
交叉熵 Lce\mathcal{L}_{\text{ce}}让草稿预测正确的下一 token0.1
分布匹配 Ltv\mathcal{L}_{\text{tv}}惩罚草稿与目标分布的 TVD——TVD 是接受率的直接代理,最小化它即最大化期望接受率0.9
置信度 Lconf\mathcal{L}_{\text{conf}}二元交叉熵,让置信度头拟合软标签 ck∗c^{*}_k1.0

训练数据是 Open-PerfectBlend(PerfectBlend 的开源版,130 万条指令样本:chat 17.6%、math 39.4%、code 38.9%、指令跟随 4.1%),响应由各目标模型按推荐采样参数重新生成;草稿器训练 10 个 epoch 至收敛。

在生产规模训练中,监督目标模型的输出分布带来两个系统级瓶颈,DeepSeek 在内部框架 HAI-LLM 中做了两项优化:

  • 隐状态通信:全词表 logits(V≈105V \approx 10^5)跨 worker 传输是带宽瓶颈。改为缓存目标模型前向激活、只通信 LM head 之前的隐状态(每 token 通信量降为 O(d)O(d)),LM head 投影只在草稿 worker 上、仅对采样的目标位置本地执行。
  • Anchor-bounded 序列打包:从训练序列采样固定数量的草稿 anchor,把彼此孤立的预测块打包进稠密训练 batch,用 token 级注意力索引(而非标准 2D mask)管理多条独立序列与 anchor 之间的精确因果掩码,省去 padding 的计算与显存开销。

四、离线实验:质量到底好多少

实验设置

目标模型覆盖 Qwen3-{4B, 8B, 14B} 与 Gemma4-12B 四个模型;草稿对照为并行 SOTA DFlash 与基于 TTT 的自回归 SOTA Eagle3。为保证公平,所有草稿在同一训练框架、同一数据上重训:Eagle3 的 TTT horizon 与块长对齐为 7,所有草稿使用相同的目标模型特征层;Eagle3 用 1 层草稿、DSpark/DFlash 用 5 层。评估覆盖数学推理(GSM8K、MATH500、AIME25)、代码生成(MBPP、HumanEval、Live-CodeBench)、日常对话(MT-Bench、Alpaca、Arena-Hard)三个域,标准投机解码、温度 1.0,报告每解码周期的接受长度 τ\tau(含 bonus token),全部采用链式草稿。

主结果

目标模型vs Eagle3(宏平均)vs DFlash(宏平均)
Qwen3-4B+30.9%+16.3%
Qwen3-8B+26.7%+18.4%
Qwen3-14B+30.0%+18.3%

优势跨模型族成立(Gemma4-12B 上同样一致胜出),且呈现明显的域效应:结构化任务接受长度天然更高(Qwen3-4B 上 math 5.57、code 5.12,chat 仅 3.49)。这种数据可预测性的方差正是”固定验证长度浪费算力”的根源。

为什么并行草稿反而能赢过自回归?

图 2 的逐位置条件接受率揭示了一个反直觉现象:并行草稿(DFlash)和半自回归草稿(DSpark)的整体接受长度经常超过完全自回归的 Eagle3,这不符合”逐步自回归质量更高”的常识。原因有两层:

逐位置条件接受率

图 2:Qwen3-4B 上各草稿位置的逐位置条件接受率(跨各域基准取平均)。自回归草稿 Eagle3 保持稳定甚至上升,并行草稿 DFlash 遭受后缀衰减,DSpark 同时继承深并行骨干的高首位接受率与自回归式的后缀连贯性。

  • 首位容量优势:第一个草稿位置只依赖目标上下文,胜负完全由架构容量决定。自回归草稿受 O(γ)O(\gamma) 延迟约束只能用浅网络,而 O(1)O(1) 并行草稿能用深网络——Math 上 DFlash 首位条件接受率 0.88 vs Eagle3 的 0.81,Chat 上 0.72 vs 0.53。投机解码是严格前缀存活过程,首位被拒整块作废,杠杆最大,这一初始优势被不成比例地放大。
  • 后缀衰减是并行的宿命:随着前面 token 锁定语义路径,后续位置本应更可预测。Eagle3 有效利用了这种条件确定性(Chat 上条件接受率从 0.53 升到 0.74),而 DFlash 在 Code 上从 0.87 掉到 0.78、Chat 上从 0.72 掉到 0.63——每个并行位置对所有可能前驱边缘化,频繁提出不一致的后缀组合。

DSpark 的策略一目了然:继承深并行骨干的高首位接受率(Math 起始 0.93),再用轻量顺序头抑制后缀衰减,整块保持高而平稳的条件接受率。

消融与开销

  • 深度:固定块长 7,DSpark 1→5 层单调提升,边际收益最大出现在 1→2 层;2 层 DSpark 全面胜过 5 层 DFlash。

草稿深度的影响

图 3:固定草稿长度下 DSpark 随层数增加而提升;浅层 2 层 DSpark 即胜过深层 5 层 DFlash,体现顺序建模的参数效率。

  • 块长:固定 5 层,γ∈{4,8,12,16}\gamma \in \{4, 8, 12, 16\},DSpark 全程优于 DFlash 且差距随 γ\gamma 增大而拉大——γ=7\gamma=7 时 math/code/chat 分别 +16%/+15%/+18%,γ=15\gamma=15 时扩大到 +30%/+26%/+22%。RNN 头仅在长块上带来边际增益,故默认用 Markov 头。

草稿长度与延迟开销

图 4:不同块长下 DSpark(Markov/RNN 头)始终优于 DFlash 且差距随 γ 扩大;最右侧面板显示顺序头在服务中引入的延迟开销极小(0.2%–1.3%)。

  • 延迟开销:批大小 128、跨 {512, 1024, 2048, 4096} 上下文长度取均值,顺序循环的延迟开销只有 0.2%–1.3%——换来的是至多 30% 的接受长度提升。
  • 置信度诊断:阈值扫描中,提高阈值后 Chat 的接受率从 45.7% 升到 95.7%(剪掉大量注定被拒的尾部 token),Math 从 76.9% 到 92.5%、Code 从 67.6% 到 92.0%。可靠性图显示原置信度头判别力强(AUC 0.81–0.90)但过度自信,STS 校准把 ECE 从 3%–8% 降到约 1%,给出可靠的存活概率估计。

置信度阈值扫描

图 5:置信度阈值扫描。阈值为 0 对应标准固定长度验证;提高阈值后整体接受率持续上升(Chat 45.7%→95.7%),说明置信度头能有效剪掉注定被拒的尾部 token(斜纹柱)。

STS 校准前后的可靠性图

图 6:Alpaca 数据集上的可靠性图(位置 1/3/5/7)。原始置信度头判别力强(AUC 0.81–0.90)但过度自信(ECE 3%–8%),顺序温度缩放校准后累积存活概率与经验接受率对齐(ECE 降至约 1%)。

五、生产部署:DeepSeek-V4 的线上验证

草稿模型配置

生产草稿模型与 DeepSeek-V4-Flash / V4-Pro(preview)协同部署:并行骨干为 3 层 MoE + mHC(流形约束超连接)+ 128 滑动窗口注意力,最大块长 γ=5\gamma=5,顺序模块用 Markov 头,置信度头端到端训练后经 STS 校准。

异步调度:把理论算法搬进 CUDA graph 世界

算法 1 直接上线会遇到两个现实冲突:真实硬件容量曲线 SPS(B) 是离散、锯齿状阶梯衰减的(不是平滑单峰),而且”每步动态决定草稿 token 数”与连续 CUDA graph 重放、零开销调度(ZOS)冲突——ZOS 要求下一步的批大小在当前步完成前就已知,同步调度必然让 GPU 流水线停顿。

论文的工程答案是异步化:用两步前的置信度头输出近似当前步的验证容量,把准入过程变成动态 top-K 选择——当前步的候选 token 仍严格按最新累积置信度排序,两步前的历史预测只决定动态截断长度(批容量上限 K)。排序保持性质保证了”最自信的草稿 token 永远优先验证”。进一步地,异步管线天然构成因果屏障:无早停的全局搜索只评估两步前的历史预测,与当前 token 的实现隔离,因此可以跨过硬件的吞吐悬崖做全局搜索、最大化物理吞吐,同时保持精确的目标分布。

动态变长验证还有一个执行层难题:标准 decode 内核为固定查询长度深度优化,批内变长前缀会因 padding 和不均负载严重浪费 GPU。DeepSeek 的做法是把物理执行与逻辑序列解耦——所有请求的 token 展平为独立元素统一处理,复杂的序列内依赖通过稀疏注意力里的 marker tensor 表达;在 DeepSeek-V4 架构上只需要改 index-attention 与 compress 两个内核,动态调度器就能无缝运行,无底层执行开销。

线上结果:把 Pareto 前沿推出去

对照基线是 MTP-1——DeepSeek-V4 preview 发布后两周即被 DSpark 取代的前生产方案。MTP-1 只有单 token 草稿,历史上一度保留正是因为静态多 token 草稿(如 MTP-3/5)在高并发下因验证开销严格损害聚合吞吐。DSpark 与它对标,直接证明了”在动态服务环境中安全解锁大草稿块”这一命题。

图 7 的吞吐–交互性前沿显示:

吞吐量与每用户生成速度(tok/s/user)的关系

图 7:线上真实流量下的吞吐–交互性 Pareto 前沿。相比 MTP-1 基线,DSpark 在中等 SLA 下显著提升聚合吞吐,并在基线无法支撑的严格交互性 SLA 下维持非退化的服务容量。

  • V4-Flash:80 tok/s/user 的中等 SLA 下聚合吞吐 +51%;120 tok/s/user 的严格 SLA 下 MTP-1 逼近运行边界、只能维持极小的并发批,DSpark 名义吞吐 +661%——论文明确提醒,这个点应理解为”扩展了可达交互性前沿”而非对充分利用基线翻倍,在匹配的实际吞吐水平下,DSpark 把每用户生成速度提升 60%–85%。
  • V4-Pro:35 tok/s/user SLA 下聚合吞吐 +52%;50 tok/s/user 严格 SLA 下名义 +406%;匹配系统容量下每用户生成速度提升 57%–78%。

图 8 展示了增益的机制:中等并发(Flash 少于 200、Pro 少于 150 个并发请求)时,调度器把每请求验证预算从 MTP-1 固定的 2 个 token 放宽到约 4–6 个,每次前向接受更多 token;随着并发升高、目标容量饱和,平均验证长度随负载平滑收缩,低置信度尾部 token 在占用关键批容量之前就被剪掉。轻负载吃满空闲算力、重负载保住关键批容量——这正是生产环境稳定性的来源。

负载自适应的吞吐与验证预算

图 8:负载自适应的吞吐与验证预算。上排为不同并发度下的聚合输出吞吐,下排为每请求的平均目标验证预算:中等并发下调度器将预算从 MTP-1 固定的 2 个 token 放宽到约 4–6 个,并发升高后随负载平滑收缩,避免资源争抢。

局限与未来工作

调度器已经最小化了目标模型侧的验证浪费,但 DSpark 仍有固定成本:无论接受率多低,并行骨干都要为每轮完整生成最初的 γ\gamma-token 草稿块,对本质上低接受率的复杂查询,这笔草稿端算力不可回收。论文提出的未来方向是难度感知的草稿内提前退出(difficulty-aware early exiting),让这类请求绕过整块生成。

开源

论文同时开源了 DSpark 在 DeepSeek-V4-Flash(preview)与 DeepSeek-V4-Pro(preview)上的训练检查点,以及 DeepSpec——一个算法驱动的投机解码训练仓库,包含 Eagle3、DFlash 与 DSpark 的完整训练实现,方便社区复现与继续研究高效推理服务。

结语

DSpark 的价值不止于又一个新的草稿架构:它把”草稿怎么生成”和”验证多长”两个问题统一到一个框架里,前者用半自回归结构同时拿到并行速度与自回归质量,后者用校准过的置信度与硬件感知调度把验证预算变成随负载实时变化的系统资源。站内此前报道的 DeepSeek-V4-Flash 镜像中 DSpark K5/K7 的草稿深度配置,正是这套框架在生产中的实际落地参数。作为直接部署在 DeepSeek-V4 生产系统上的置信度调度投机解码方案,它展示了一个清晰的趋势:推理加速的下一个战场,正在从”草稿模型本身”转向”草稿与验证的系统级协同”。

原文:DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation(DeepSeek-AI & 北京大学,arXiv:2607.05147v1,2026-07-06)。