DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation

framework dspark
speculative-decodingsemi-autoregressive-drafterconfidence-scheduled-verificationthroughput-schedulingllm-servingdeepseek-v4

DSpark — 作者意图蒸馏 #

1. TL;DR #

DSpark 把"起草更快更准"与"验证更省"两条线合成一个无损投机解码系统。起草端用半自回归结构:并行 DFlash 主干一次前向出全块 base logits,再挂一个轻量序列头(Markov 或 RNN)注入块内依赖以抑制后缀衰减。验证端用置信度调度:置信头估计每位前缀存活率,硬件感知调度器按实测 $\text{SPS}(B)$ 吞吐曲线动态选每请求验证长度,早停机制保证严格无损。离线接受长度超 Eagle3 约 26.7%–30.9%、超 DFlash 约 16.3%–18.4%;在 DeepSeek-V4 上较 MTP-1 每用户生成加速 60%–85%(Flash)/ 57%–78%(Pro),把服务的吞吐-交互 Pareto 前沿外推。

2. Q1 / Q2 / Q3 #

Q1 痛点(为什么要做)

大并行草块理论上能一次前向提出很多 token,但落地遇到两个正交瓶颈:

Q2 方法(怎么做)

两个互补机制对应上面两个瓶颈:

核心技术壁垒:让一个"回顾式吞吐最大化搜索"同时满足无损性。关键在两处耦合——序列头采用局部(而非全局)softmax 归一化,使每 token 精确概率仍可算(rejection sampling 的前提);同时早停 / 异步两步前因果屏障使前缀 $x_1$ 的准入决策不依赖 $x_1$ 自身的实现值(non-anticipating)。缺任一处,调度就会引入选择偏差、破坏目标分布(Appendix A 反例证明)。

Q3 结果(做到了什么)

离线(关调度器、固定块)4 个目标模型 × 9 benchmark 全部最优;宏平均接受长度超 Eagle3 30.9%/26.7%/30.0%(Qwen3-4B/8B/14B)、超 DFlash 16.3%/18.4%/18.3%。在线(DeepSeek-V4-Flash/Pro 真实流量)较 MTP-1 每用户生成 +60%–85% / +57%–78%(等吞吐口径),并在严格 SLA(Flash 120 TPS、Pro 50 TPS)下维持非退化吞吐,外推 Pareto 前沿。

3. 架构 / 方法图 #

Figure 1: DSpark 架构与解码循环

Paper's Figure 1(caption: "The DSpark architecture and decoding cycle …")。 给定 prompt ABC,目标模型走一步生成 D 作为 anchor;DSpark 用重并行主干 + 轻量序列头一次性产出草 token EFGH 及置信分 $c_1$–$c_4$;硬件感知前缀调度器据置信分保留前缀 EFG、丢弃低置信的 H;目标模型并行验证被调度前缀,E、F 接受、G 拒绝并补生成修正 token G∗;D E F G∗ 进入下一轮。读者应注意:起草(重并行 + 轻序列)与验证(置信调度)是同一循环内的两个可分别优化的阶段。

解码循环三步的时序结构:

sequenceDiagram participant T as Target Model participant B as Parallel Backbone participant S as Sequential Head participant Sch as Prefix Scheduler T->>T: step1 从 ABC 生成 anchor D T->>B: D + (γ-1) mask B->>B: 一次前向 → h_1..h_γ, base logits U_1..U_γ B->>S: hidden h_k, base logits U_k S->>S: 左到右采样 x_k ~ softmax(U_k + B_k), 出 c_1..c_γ S->>Sch: 草 token + 置信 c_k Sch->>Sch: 按 a_{r,j}=∏c_i 排序, 按 SPS(B) 选 ℓ* Sch->>T: 被调度前缀 (如 EFG) T->>T: step3 并行验证, 接受最长前缀 + 补 bonus/修正 token

主干只做一处改动:不再"anchor + γ 个 mask 只预测 mask 位",而是把 anchor 本身当第一个预测位,$\gamma$ 个输入(anchor + $\gamma-1$ mask)产 $\gamma$ 个 logits,降起草计算而质量近似不变。序列头两种实例化:Markov 头把转移偏置限制为一阶 $B(x_{k-1},x_k)$ 并低秩分解 $B=W_1W_2$($r=256$);RNN 头维护跨全块前缀的门控状态 $s_k$。

4. 作者证明 #

本篇既有形式化模型(延迟模型 + 吞吐最大化 + 无损性证明),亦有实证,属"模型 + 实证"双轨。

记号表

符号含义
$L$每生成 token 的平均延迟
$T_{\text{draft}}, T_{\text{verify}}$起草 / 验证前向的墙钟时间
$\tau$每轮接受 token 数(含 bonus)
$\gamma$块大小(proposal length)
$U_k, B_k$位置 $k$ 的主干 base logit / 序列头转移偏置
$c_k, c^*_k$位置 $k$ 的预测 / 解析存活概率
$a_{r,j}=\prod_{i\le j}c_{r,i}$请求 $r$ 到位置 $j$ 的前缀存活概率
$\text{SPS}(B)$batch 大小 $B$ 时引擎 steps/second(初始化时 profile 成查表)
$\Theta=\tau\cdot\text{SPS}(B)$系统级期望 token 吞吐
$\ell_r$请求 $r$ 被调度的验证长度

关键方程物理意义

证明检查(≥6)

  1. 精确概率:序列头保持局部 softmax,避免 CRF-NAT 式全局归一化 / CTC 式路径边缘化,故 rejection sampling 的 $\min(1,p^t/p^d)$ 仍可精确计算。✓
  2. 标签正确性:$c^*_k=1-\tfrac12\lVert p^d-p^t\rVert_1$ 是标准投机解码接受率公式,用作软标签自洽。✓
  3. 贪心最优性:$a_{r,j}$ 关于 $j$ 单调非增,故延长请求 $r$ 从 $j-1$ 到 $j$ 的边际接受收益恰为 $a_{r,j}$;对全局池按 $a_{r,j}$ 降序贪心,在 $B$ 固定时即最优分配,且自然尊重块内前缀依赖。✓
  4. 假设边界:早停贪心给全局吞吐最优当且仅当 $\Theta$ 单峰,隐含要求 $\text{SPS}$ 平滑衰减;真实张量核容量呈阶梯状 jagged,此假设破裂——这正是 §5.2 去掉早停的动机。✓(假设失效点)
  5. 无损性(non-anticipating):早停在 $\Theta$ 一旦下降即中断,使 $x_1$ 的准入只依赖观测 $x_1$ 之前的信息,恢复标准无损性论证所需的非预期属性。✓
  6. 首序数值核验(Appendix A):取 $\text{SPS}(1)=1.0,\text{SPS}(2)=0.5,\text{SPS}(3)=0.45,a_1=0.8$,则 $\Theta_0=1{\cdot}1.0=1.0$、$\Theta_1=(1+0.8){\cdot}0.5=0.9$,复现论文数值;无早停的回顾式搜索使 $\ell$ 依赖 $x_1$,导致首 token 输出分布 $(0.85,0.15)\ne$ 目标 $(0.7,0.3)$,证回顾式搜索非无损。✓
  7. 生产因果屏障:异步调度用"两步前"的置信预测决定截断长度 $K$,准入决策与当前 token $x_{r,k}$ 的实现隔离,故可去早停做无约束全局搜索而仍无损。✓
  8. 5. 实验与数据 #

    离线主结果(关调度器、固定块)

    Table 1: 主投机解码结果(接受长度 τ)

    Paper's Table 1,逐格 bold 处 DSpark 最优。 4 个目标模型(Qwen3-4B/8B/14B、Gemma4-12B)× 9 benchmark,DSpark 在每一格均为最优。可见强域效应:结构化任务(Math ~5.6、Code ~5.1,Qwen3-4B)接受长度天然高于开放式 Chat(~3.5),这一数据侧方差正是引入置信调度的动机。

    为何并行/半自回归能赢自回归

    Figure 2: 位置条件接受率

    Paper's Figure 2。 位置条件接受率剥离早期拒绝惩罚,只看每位的内在预测质量。$O(1)$ 延迟允许并行/半自回归起草器用更深网络,故在位置 1 起点更高(DFlash 0.88 vs Eagle3 0.81,Math);因投机是严格前缀存活过程,位置 1 杠杆最大,故初始容量优势主导最终接受长度。但纯并行(DFlash)在后段快速衰减(Code 0.87→0.78),Eagle3 靠依赖建模反而回升(Chat 0.53→0.74)。DSpark 继承高起点(Math 起 0.93)并靠序列头抑制衰减,全块维持高且稳的条件接受率。

    深度与长度消融:2 层 DSpark 在所有域超 5 层 DFlash(Fig 3),说明轻量局部自回归比堆并行层更参数高效;序列头在 $\gamma$ 从 4 到 16 仅加 0.2%–1.3% 整轮延迟却带来至多 30% 接受长度提升(Fig 4)。置信头静态阈值扫描把 Chat 接受率从 45.7% 提到 95.7%(Fig 5);STS 校准把 ECE 从 3%–8% 降到 ~1% 而保持 AUC 0.81–0.90(Fig 6)。

    在线:Pareto 前沿外推

    Figure 7: 吞吐 vs 每用户 TPS

    Paper's Figure 7。 散点为真实流量遥测、实线为拟合前沿。等吞吐口径 DSpark 每用户生成 +60%–85%(Flash)/ +57%–78%(Pro)。作者罕见地自我警示:120 TPS 下 +661%、50 TPS 下 +406% 的巨大比值是 MTP-1 塌缩到极小 batch 的产物,应解读为"扩展了可行交互前沿"而非代表性倍速。

    Figure 8: 负载自适应吞吐与验证预算

    Paper's Figure 8。 底行揭示机制:中等并发(Flash <200、Pro <150 请求)时调度器利用空闲目标算力把每请求验证预算从 MTP-1 静态 2 token 扩到 ~4–6 token;并发升高、目标容量饱和时预算随负载平滑收缩,剪掉低置信尾 token 以保批容量。这一负载自适应正是吞吐增益与稳定性的来源。

    局限:即便调度剪掉验证浪费,DSpark 仍付固定的草侧成本(并行主干生成初始 $\gamma$ 块);对内在低接受率的复杂 query,这笔前置起草算力不可回收,作者提出未来做难度感知的草模型早退。

    6. 论证链 #

    步骤论点依据(本篇内部)
    1并行起草器把 $T_{\text{draft}}$ 压成单次前向,但各位置独立 → 多模态碰撞、后缀接受率快速衰减§3.1;Fig 2(DFlash 后段衰减)
    2在并行主干上叠局部归一化的轻量序列头,注入块内依赖 → 精确 per-token 概率仍可算、$\tau$ 升而延迟仅 +0.2%–1.3%Eq.4–6;Table 1;Fig 3、Fig 4
    3更长草块在高并发下浪费验证 → 置信头估存活率 + STS 校准 + 调度器最大化 $\Theta=\tau\cdot\text{SPS}(B)$,早停保无损§3.2;Fig 5、Fig 6;Appendix A
    4生产环境 SPS 阶梯 + ZOS 冲突 → 异步"两步前"top-$K$ + 展平变长核,去早停靠因果屏障仍无损§5.2–5.3
    5部署 DeepSeek-V4:等吞吐每用户 +60%–85%/+57%–78%,严格 SLA 维持非退化吞吐,外推 Pareto 前沿§5.4;Fig 7、Fig 8

    7. 实现 cross-reference #

    开源产物:作者开放 DeepSpec(算法驱动的投机解码训练仓库,含 Eagle3 / DFlash / DSpark,source_url 指向 github.com/deepseek-ai/DeepSpec),并释出 DeepSeek-V4-Flash/Pro (preview) 的 DSpark 检查点。仓库无 file:line 级别可引锚点在 L1 中给出。

    生产系统内部实现 [实现未公开]:HAI-LLM 训练框架内的两项优化(只通信 LM head 前隐状态把每 token 通信降到 $O(d)$;anchor-bounded 序列打包用 token 级 attention 索引替代 2D mask)、异步调度器、以及 DeepSeek-V4 上为变长路由改造的 index-attention 与 compress 核,均未公开代码。

    核心技术壁垒(复现最难点):不是任一单独模块,而是"回顾式全局吞吐搜索"与"严格无损"二者共存的证明与工程实现。局部(非全局)softmax 归一化保住精确 per-token 概率;早停 / 异步两步前因果屏障保住 non-anticipating 属性。Appendix A 的 2-token 反例(输出 $(0.85,0.15)\ne(0.7,0.3)$)精确刻画了缺屏障时的选择偏差,是复现者最易踩空之处。

    关键实现细节(易被忽略)

    • anchor 即第一预测位:对 DFlash 主干只做此一处改动($\gamma$ 输入产 $\gamma$ logits),降起草计算而质量近似不变。
    • 置信头复用序列头的 Markov 嵌入 $W_1$ 作特征(Eq.7),两机制间隐式参数共享;置信条件因此建立在真正采样的前一 token 上。
    • 去早停"安全"仅因异步只评估两步前的历史预测——若在同步 / 单步内去早停即刻破坏无损,此依赖关系极易被误实现。