1. 背景与来源
DSpark 由 DeepSeek + 北京大学于 2026-06-27 开源(MIT 协议,仓库 deepseek-ai/DeepSpec)。它与 DFlash 走的是不同路线:不靠扩散去噪,而是用半自回归 + 马尔可夫头来建顺序、用置信度调度来动态控验证长度。
先纠正一个常见混淆:DSpark 不是 MTP,也不是简单地”一个 Draft 模型自回归生成多个 token”。DSpark 的 Draft 核心是「DFlash 的 block-parallel backbone + 轻量 Markov Head」,再加一个 Confidence Head——即”并行生成 + 轻量序列依赖 + 置信度调度”。官方论文与 vLLM Speculators 文档都是这么描述的。MTP 是模型原生、训练期嵌入的多令牌头;DSpark 是独立的轻量 drafter(共享 embedding/LM head、目标冻结)。完整链路见 Ep7:MTP Head 与置信度头。
2. 核心一:Semi-Autoregressive Drafter + Markov Head
- 半自回归(semi-autoregressive):以”块”为单位并行出块,块间可以并行,块内仍有顺序;
- 马尔可夫头(Markov head):在块内注入 token 间的顺序依赖,保证块内生成顺序一致、不至于乱序。
这与 DFlash 的扩散范式形成对照:DSpark 在”自回归 ↔ 纯并行”之间取折中——比纯自回归并行、比纯扩散更可控。
3. 核心二:Confidence Scheduler(置信度调度器)
这是 DSpark 最巧妙的一笔:
- 不固定 block size,而是根据草稿置信度动态决定本次验证多少 token;
- 高置信 → 多验证(一次多换几个 token);低置信 → 少验证(避免把整块都喂进去却大量被拒的浪费)。
相对 DFlash 固定 block size=16,DSpark 的验证长度随”当前该不该信草稿”自适应,进一步逼近 α 的理论上限。
3.5 Confidence Head 的精确机制(c_k 与 prefix survival probability)
上一节只说了”高置信多验证”,这里补上精确数学。Confidence Head 是一个轻量 head(hidden state → Linear → sigmoid → c_k),输出每个草稿位置 k 的标量置信度:
c_k = P(token k 被接受 | 前面的 token 都被接受)
即”在前缀都正确的条件下,第 k 个 token 继续被 Target 接受的条件概率”,监督信号来自草稿分布与目标分布的 TV 距离。真正关心的是”前面这一整段能不能全部活下来”——把条件概率连乘得到 prefix survival probability:
a_{r,j} = ∏{i=1}^{j} c{r,i}
它随 j 单调递减(第 5 个 token 值不值得验证,取决于前面 1~4 个是否先通过)。Hardware-Aware Scheduler 按 a_j 降序贪心加入候选、预期接受 token 饱和即早停,从而动态决定本轮验证长度。
两点提醒:“高置信度”= 高 c_k = 高接受/存活概率,不是草稿模型对自己生成 token 的 softmax 概率;神经网络天然过度自信,原始 c_k 的 ECE 达 3~8%,DSpark 用 Sequential Temperature Scaling (STS) 逐位校准,把 ECE 压到约 1%,这是调度器敢直接拿 c_k 排序的前提。
4. 核心三:大模型并行验证,零质量损失
与 DFlash 一样,DSpark 也是无损推测解码:草稿块交给大模型一次并行前向验证,拒绝采样保证输出分布严格等于目标模型。
5. 效果与生态
| 指标 | 数值 / 状态 |
|---|---|
| V4 加速 | 57–85%(据 DeepSeek / 北大发布资料) |
| 吞吐 | +400% |
| vLLM 落地 | PR #46995 在合入(复用稀疏 MLA 非因果索引、DSparkSpeculator 继承 DFlash、Triton 非因果 SWA 内核) |
| 多后端 | 同时支持 SGLang / OpenInfer |
6. 与 DFlash 的关系(预告)
DSpark 改的是”草稿顺序建模 + 验证长度调度”,DFlash 改的是”草稿并行范式 + 执行引擎”——二者不在同一层,正交可叠加。这正是 OpenInfer 能在 Qwen3-4B 上同时挂两套路径的原因。完整对比见 DFlash vs DSpark。
本篇属于「推测解码手记」系列 Ep4。前情:DFlash 深度解析;对比篇:DFlash vs DSpark。
💬 留言
NaphJohn/LLM-blog尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。