DSpark 与 MTP:DeepSeek 投机解码调研
调研 DeepSeek DSpark 的半自回归草稿模型、置信度调度验证、DeepSpec 源码实现,并和 MTP-1 对比其工程边界
DSpark 是 DeepSeek 为 DeepSeek-V4 描述的投机解码系统:按模型卡口径,它不是新的基础模型 Checkpoint,而是在同一 Checkpoint 上附加 speculative decoding 模块。它解决的重点也不只是“多猜几个 token”,而是长 Draft 的前缀质量和高并发下的验证预算。
论文把 MTP-1 作为保守的生产基线,把 DSpark 描述为“半自回归长 Draft + 置信度预测 + 硬件感知验证调度”。文中的性能数字均为论文报告,不是本站复测结果。
- 一句话: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 平均延迟模型:
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 中的主要实现点是:
| 组件 | 源码位置 | 作用 |
|---|---|---|
Qwen3DSparkModel | deepspec/modeling/dspark/qwen3/modeling.py | 投影 Target hidden states,运行 Draft layers 与 lm_head |
VanillaMarkov | deepspec/modeling/dspark/markov_head.py | 用 W1[prev_token] @ W2 生成低秩 transition bias |
GatedMarkovHead / RNNHead | 同上 | 用 gate 或 recurrent state 引入更长前缀信息 |
AcceptRatePredictor | DSpark modeling/loss 路径 | 预测当前位置在此前缀已接受条件下的接受概率 |
开源 Qwen3-4B 配置可见 block_size=7、5 个 Draft layer、指定 Target layer 特征与 markov_rank=256。这些值只说明该训练产物的结构,不代表 V4 线上配置。
置信度头的监督目标来自 Draft 与 Target 分布的 Total Variation Distance:
compute_dspark_loss 同时包含真实 token 的 CE、靠近 Target 分布的 L1,以及 confidence loss。源码还通过 anchor sampling 与专用 Attention Mask,把多个独立 Draft block 打包进训练 Batch;这解释的是训练结构,不是生产 Serving Engine。
4. 系统侧:按 Prefix Survival 分配验证预算
对请求 r,设第 k 个位置的条件接受概率为:
由于只能保留连续前缀,第 j 个候选真正存活的概率是:
Scheduler 为每条请求选择验证长度 \ell_r \in [0,\gamma],并结合预先 Profile 的硬件步吞吐曲线 SPS(B),权衡预期接受 token 与 Target Batch 容量:
直觉很简单:
- 低负载:多验证一些候选,换更高的单用户生成速度;
- 高负载:只保留 survival probability 高的前缀,避免低价值 token 挤占其他请求。
论文还描述了异步调度与 Sequential Temperature Scaling:前者把调度延迟藏进流水,后者让置信度的绝对值可用于容量决策。它们都是系统收益的一部分,不能只下载 Drafter 权重就假设自动生效。
5. 源码能证明什么
DeepSpec 是训练与评测仓库,不是完整的 V4 生产 Serving Engine。适合用它核对下列问题:
| 问题 | 入口 |
|---|---|
| Target hidden states 如何进入 Drafter | deepspec/modeling/dspark/qwen3/modeling.py |
| Markov/RNN bias 如何作用于 block logits | deepspec/modeling/dspark/markov_head.py |
| CE、L1 与置信度目标如何组合 | deepspec/modeling/dspark/loss.py |
| 缓存的 Target states 如何进入训练 Batch | deepspec/trainer/dspark_trainer.py |
| 某个开源产物的 block/layer/rank | config/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. 复现前的最小检查
- 锁定 Target、Drafter、Tokenizer、配置与 revision,确认二者是匹配产物。
- 分别记录 proposed length、verification length、accepted prefix 与 bonus-token 口径。
- 校准 confidence,并验证 prefix survival 预测而不只是排序。
- Profile
SPS(B),覆盖实际并发、序长与硬件拓扑。 - 验证变长 routing 对 CUDA Graph、Batch layout、Attention/KV Kernel 的影响。
- 同时报 Per-user Speed、Aggregate Throughput、TTFT/TPOT 和 SLO;
missing与not_comparable不得填零。
相关页面
- 投机解码基础 — Draft、Verify、分布等价与性能模型
- vLLM Async Scheduling — 从 Drafter 进入 Runtime 后,placeholder、KV 与 accepted frontier 如何结算
- DeepSeek-V3 Technical Report:中英对照解读 — MTP 在原报告中的训练与推理语境
- 推理框架对比 2026 — Runtime 能力与版本边界
参考资料
- DeepSpec GitHub 仓库
- DSpark paper: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation
- DeepSeek-V4-Pro-DSpark 模型卡
- DeepSeek-V4-Flash-DSpark 模型卡
- DeepSpec Qwen3-4B DSpark config
- DeepSpec DSpark Qwen3 model implementation
- DeepSpec DSpark Markov/RNN head implementation
- DeepSpec DSpark loss implementation
← 被以下页面引用(4)
- LLM 推理系统全栈地图ai-systems · synthesis
- vLLM Async Scheduling:三态配置、投机解码与状态提交ai-systems · synthesis
- 投机解码:突破 decode 一次只出一个 token 的限制ai-systems · concept
- DeepSeek-V3 Technical Report:中英对照解读ai-systems · source-summary
修改历史4 次提交
- docs: explain async speculative schedulingxiaocheng··
55e093e - docs: refine LLM inference knowledge systemxiaocheng··
f8756b9 - feat(wiki): enforce lifecycle metadata and search aliasesxiaocheng··
1dad7ef - docs: add inference profiling notesxiaocheng··
6885adf