系列:推测解码手记

DSpark 深度解析:半自回归起草 + 马尔可夫头 + 置信度调度

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

这与 DFlash 的扩散范式形成对照:DSpark 在”自回归 ↔ 纯并行”之间取折中——比纯自回归并行、比纯扩散更可控。

3. 核心二:Confidence Scheduler(置信度调度器)

这是 DSpark 最巧妙的一笔:

相对 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 饱和即早停,从而动态决定本轮验证长度。

Confidence Head 预测 prefix survival probability 草稿 backbone 一次前向出 γ 个隐藏态,每个位置经 Confidence Head 输出条件接受概率 c_k,前缀存活概率 a_j 为 c_1..c_j 的连乘,单调递减,调度器按 a_j 降序贪心截断尾部。 Confidence Head → Prefix Survival Probability Anchor D Draft Backbone 1 次前向出 γ 位 h_1 h_2 h_3 h_4 h_5 Conf Head Conf Head Conf Head Conf Head Conf Head c_1 c_2 c_3 c_4 c_5

c_k = P(接受第 k 个 | 前 k-1 个都被接受) —— 条件接受概率,监督信号来自草稿/目标分布 TV 距离

a_1 a_2 a_3 a_4 a_5

prefix survival prob: a_j = c_1·c_2·…·c_j(前 j 个全部被接受的概率,随 j 单调递减) 调度器:按 a_j 降序贪心加入候选,预期接受 token 饱和即早停 → 截断尾部低置信 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。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。