跳转到主要内容

DSpark 与 MTP:DeepSeek 投机解码调研

调研 DeepSeek DSpark 的半自回归草稿模型、置信度调度验证、DeepSpec 源码实现,并和 MTP-1 对比其工程边界

· 约 7 分钟阅读

DSpark 是 DeepSeek 为 DeepSeek-V4 描述的投机解码系统:按模型卡口径,它不是新的基础模型 Checkpoint,而是在同一 Checkpoint 上附加 speculative decoding 模块。它解决的重点也不只是“多猜几个 token”,而是长 Draft 的前缀质量和高并发下的验证预算。

论文把 MTP-1 作为保守的生产基线,把 DSpark 描述为“半自回归长 Draft + 置信度预测 + 硬件感知验证调度”。文中的性能数字均为论文报告,不是本站复测结果。

30 秒复习
  • 一句话:MTP-1 是短 Draft 基线;DSpark 用模型侧的前缀依赖提高长 Draft 质量,再用系统侧调度决定哪些候选值得占用 Target 验证容量。
  • 三个判断:不要把 DSpark 当成 MTP-5;按 prefix survival 而非独立 token 命中看收益;高并发时 verification token 也是稀缺资源。
  • 来源问题:论文解释系统目标,DeepSpec 源码解释 Drafter 训练结构,模型卡解释交付形态;三者都不能单独证明某个 Runtime 已获得线上收益。
  • 边界:页面状态仍为 needs-review;论文报告值只适用于其模型、流量、硬件与调度配置,不能当作通用加速倍数。

1. DSpark 为什么不等于 MTP-5

MTP(Multi-Token Prediction)可以同时指训练目标、候选来源和 Serving 加速,三者不能混写。训练时学会预测更远 token,不代表线上一定批量接受这些 token;最终收益仍取决于 Target 验证与 Batch 状态。

维度MTP-1(论文基线)DSpark
Draft 目标保守地多预测 1 个 token用更长 block 提高每轮推进数
候选结构MTP 模块给出短候选并行 backbone + 轻量顺序 head
前缀依赖单 token 场景不暴露长后缀衰减Markov/RNN head 注入已采样前缀
验证策略固定短长度置信度 + 硬件吞吐表动态裁剪
高并发取舍稳定但单轮推进上限低缩短低价值前缀以保护 Aggregate Throughput
实现代价加速空间有限训练 Drafter、校准置信度、修改 Scheduler/Kernel

DSpark 的关键不是把 γ 从 1 改成 5,而是同时改变候选质量和验证预算。开源 Qwen/Gemma 配置中的 block_size=7 与论文中的 V4 线上 DSpark-5 也属于不同 Case,不能互相替代。

2. 它控制哪三个成本

投机解码基础已经给出接受/修正规则。这里沿用论文的单 token 平均延迟模型:

L=Tdraft+TverifyτL = \frac{T_{\text{draft}} + T_{\text{verify}}}{\tau}
  • T_draft:生成候选的时间;
  • T_verify:Target 验证所选候选的时间;
  • τ:一轮平均推进 token 数,具体统计是否含 bonus token 必须单独声明。

DSpark 的半自回归 Drafter 试图在不过度增加 T_draft 的前提下提高 τ;置信度 Scheduler 则避免低价值后缀放大有效 T_verify。这也是它必须把模型与 Serving 一起设计的原因。

3. 模型侧:并行 Backbone 加顺序轻量头

完全并行预测能一次得到多个位置的 base logits,但每个位置不知道同一 block 内前面实际采样了什么,后缀容易组合成 Target 不接受的前缀。DSpark 将候选生成拆成:

Target 多层 hidden states
  → 投影 + 并行 Draft Backbone
  → 各位置 base logits
  → Markov/RNN 轻量头按已采样前缀修正
  → Draft block

DeepSpec 中的主要实现点是:

组件源码位置作用
Qwen3DSparkModeldeepspec/modeling/dspark/qwen3/modeling.py投影 Target hidden states,运行 Draft layers 与 lm_head
VanillaMarkovdeepspec/modeling/dspark/markov_head.pyW1[prev_token] @ W2 生成低秩 transition bias
GatedMarkovHead / RNNHead同上用 gate 或 recurrent state 引入更长前缀信息
AcceptRatePredictorDSpark modeling/loss 路径预测当前位置在此前缀已接受条件下的接受概率

开源 Qwen3-4B 配置可见 block_size=7、5 个 Draft layer、指定 Target layer 特征与 markov_rank=256。这些值只说明该训练产物的结构,不代表 V4 线上配置。

置信度头的监督目标来自 Draft 与 Target 分布的 Total Variation Distance:

ck=112pdraft,kptarget,k1c_k^* = 1-\frac{1}{2}\left\lVert p_{\text{draft},k}-p_{\text{target},k} \right\rVert_1

compute_dspark_loss 同时包含真实 token 的 CE、靠近 Target 分布的 L1,以及 confidence loss。源码还通过 anchor sampling 与专用 Attention Mask,把多个独立 Draft block 打包进训练 Batch;这解释的是训练结构,不是生产 Serving Engine。

4. 系统侧:按 Prefix Survival 分配验证预算

对请求 r,设第 k 个位置的条件接受概率为:

cr,k=P(k accepted1,,k1 accepted)c_{r,k} = P(k\ \text{accepted}\mid 1,\ldots,k-1\ \text{accepted})

由于只能保留连续前缀,第 j 个候选真正存活的概率是:

ar,j=i=1jcr,ia_{r,j} = \prod_{i=1}^{j} c_{r,i}

Scheduler 为每条请求选择验证长度 \ell_r \in [0,\gamma],并结合预先 Profile 的硬件步吞吐曲线 SPS(B),权衡预期接受 token 与 Target Batch 容量:

Θ=E[accepted tokens]×SPS(B)\Theta = \operatorname{E}[\text{accepted tokens}] \times SPS(B)

直觉很简单:

  • 低负载:多验证一些候选,换更高的单用户生成速度;
  • 高负载:只保留 survival probability 高的前缀,避免低价值 token 挤占其他请求。

论文还描述了异步调度与 Sequential Temperature Scaling:前者把调度延迟藏进流水,后者让置信度的绝对值可用于容量决策。它们都是系统收益的一部分,不能只下载 Drafter 权重就假设自动生效。

5. 源码能证明什么

DeepSpec 是训练与评测仓库,不是完整的 V4 生产 Serving Engine。适合用它核对下列问题:

问题入口
Target hidden states 如何进入 Drafterdeepspec/modeling/dspark/qwen3/modeling.py
Markov/RNN bias 如何作用于 block logitsdeepspec/modeling/dspark/markov_head.py
CE、L1 与置信度目标如何组合deepspec/modeling/dspark/loss.py
缓存的 Target states 如何进入训练 Batchdeepspec/trainer/dspark_trainer.py
某个开源产物的 block/layer/rankconfig/dspark/*.py

源码可以证明训练结构和局部算法,不能证明线上 Scheduler、CUDA Graph、变长验证 Kernel 或服务吞吐已经按论文部署。模型卡同理:它说明交付物关系,不等于 Runtime 能力回读。

6. 论文性能数字怎么读

论文离线实验关闭 confidence scheduler,只比较 Draft quality。Table 1 报告的 macro-average accepted length 改善为:

Target相对 Eagle3相对 DFlash
Qwen3-4B+30.9%+16.3%
Qwen3-8B+26.7%+18.4%
Qwen3-14B+30.0%+18.3%

Accepted length 只说明 Drafter 更会猜,不能直接等价为线上吞吐。论文在线结果还报告:

  • V4-Flash:80 tok/s/user SLA 下 Aggregate Throughput 比 MTP-1 高 51%;Matched Throughput 下 Per-user Generation Speed 提升 60%–85%;
  • V4-Pro:35 tok/s/user SLA 下 Aggregate Throughput 高 52%;Matched System Capacity 下 Per-user Generation Speed 提升 57%–78%。
证据边界

这些数字是论文在指定 Live Traffic 与系统配置下的报告值。比较时必须保留 SLA、Matched Throughput/Capacity、模型版本与调度策略;本站未在同一 Case 下复测,不能写成 DSpark 的固定乘法收益。

7. 复现前的最小检查

  1. 锁定 Target、Drafter、Tokenizer、配置与 revision,确认二者是匹配产物。
  2. 分别记录 proposed length、verification length、accepted prefix 与 bonus-token 口径。
  3. 校准 confidence,并验证 prefix survival 预测而不只是排序。
  4. Profile SPS(B),覆盖实际并发、序长与硬件拓扑。
  5. 验证变长 routing 对 CUDA Graph、Batch layout、Attention/KV Kernel 的影响。
  6. 同时报 Per-user Speed、Aggregate Throughput、TTFT/TPOT 和 SLO;missingnot_comparable 不得填零。

相关页面

参考资料

修改历史4 次提交