DeepSeek-V4.1 模型结构(6):解码,DSpark

DeepSeek-V4.1 模型结构(6):解码,DSpark

💡 原文中文,约19400字,阅读约需47分钟。
📝

内容提要

DeepSeek-V4.1 的 DSpark 是在主干模型后挂载的三层草稿模块,一次前向生成 5 个草稿 token:Markov head 补充 token 间依赖,confidence head 估计接受概率,调度器按负载决定送验数量。文章讲解投机解码的接受规则、并行草稿越靠后越不准的原因、阈值随负载变化,以及按置信度截断保持输出分布的条件。

🔎

延伸解读

并行草稿的精度衰减与Markov head的补偿

并行草稿一次前向给出多个位置的边缘分布,各位置独立采样,导致越靠后的位置越不知道前面采到了什么,接受率随位置下降。DSpark用Markov head给每个位置的logits加上由前一个token决定的低秩偏置,补上token间依赖,使位置2能根据位置1的采样结果调整分布。但偏置只依赖前一个token,无法建模更长前缀,因此精度提升有限,越往后仍越不准。

调度器阈值随负载变化的必要性

投机解码中,多送一个草稿去验证并非免费:批次增大降低每秒步数,占用其他请求算力。DSpark调度器以吞吐最大化为目标,按存活概率从大到小选择送验长度。最优条件为存活概率大于期望产出乘以批次增大导致的减速比。机器空闲时减速比小,低概率草稿也值得送;机器繁忙时减速比大,只有高把握草稿才送。固定阈值无法适应负载变化。

按置信度截断保持分布无损的条件

调度器决定送验几个草稿时,若决定依赖了当前草稿token的采样结果,会引入偏差。DSpark要求non-anticipating:第k个草稿是否送验必须由采样x_k之前的信息决定。confidence head的输入是x_{k-1},不含x_k,因此合法。若用c_{k+1}回头决定第k个,则c_{k+1}依赖x_k,会改变输出分布。论文附录A的反例显示,回头取全局最优会使分布从(0.7,0.3)变为(0.85,0.15)。

DSpark与MTP、EAGLE的定位差异

MTP每多猜一个token需多串一个Transformer block,自回归生成,与主干一起预训练。EAGLE-3风格草稿也是自回归,但主干冻结后单独训练。DSpark则并行一次前向出5个位置,用Markov head补依赖,主干冻结后单独训练,并以L1距离为主要损失直接优化接受率。部署时,V4预览版最初用只猜1个token的MTP,两周后被DSpark取代,后者在总吞吐相同时提升单用户生成速度。

❓

Q&A

DSpark 是什么?它在 DeepSeek-V4.1 中起什么作用?

DSpark 是挂在主干模型后面的三层草稿模块,用于投机解码。它一次前向生成 5 个草稿 token,通过 Markov head 补充 token 间依赖,confidence head 估计接受概率,调度器按负载决定送验数量,从而加速生成。

投机解码的接受规则是什么?为什么它不改变输出分布?

标准规则:草稿采一个 token x∼q,以概率 min(1, p(x)/q(x)) 接受;若拒绝,则从修正分布 norm(max(0, p-q)) 中重采。该规则不改变分布,因为接受并输出 x' 的概率为 min(q(x'), p(x')),拒绝后输出 x' 的概率为 p(x') - min(p(x'), q(x')),两者相加恰好等于 p(x')。

为什么并行草稿越靠后的位置越不准?

并行草稿的每个位置独立采样,不知道前面位置采到了什么,只能输出边缘分布。越往后,前面可能出现的前缀越多,平均后的分布越平,与主干条件分布的差异越大,接受率越低。例如,纯并行草稿在对话数据上条件接受率从第 1 个位置的 0.72 降到第 7 个位置的 0.63。

DSpark 的调度器如何决定送几个草稿 token 去验证?

调度器根据每个位置的置信度(前缀存活概率)和当前负载决定。它按存活概率从大到小排序,逐个加入批次,计算吞吐 Θ = τ · SPS(B),直到 Θ 不再上升。阈值随负载变化:机器闲时阈值低,可多送;忙时阈值高,只送把握大的。

按置信度截断在什么条件下不改变输出分布?

需要满足 non-anticipating 条件:决定第 k 个草稿是否送验时,只能使用采样 x_k 之前的信息,不能依赖 x_k 采到了什么。例如,用 c_k(输入为 x_{k-1})决定第 k 个的去留是合法的,但用 c_{k+1} 回头决定第 k 个则会导致分布偏移。

DSpark 与 MTP、EAGLE 等草稿方法有什么区别?

MTP 是自回归草稿,每多猜一个 token 需多串一个 block,与主干一起预训练;EAGLE-3 风格草稿也是自回归,但只读主干低、中、高特征;DSpark 是并行草稿,三层只跑一次出 5 个位置,用 Markov head 补充依赖,主干冻结后单独训练,并以 L1 距离为主要损失,送验数量动态决定。

DSpark 的训练目标是什么?

训练目标包含三项:对真实 token 的交叉熵(权重 0.1)、草稿分布与主干分布的 L1 距离(权重 0.9,直接最大化接受率)、以及 confidence head 的 BCE 损失(权重 1.0)。位置权重 w_k = e^{-(k-1)/γ},靠前的位置权重大。

DSpark 在线上部署中取得了怎样的加速效果?

在 V4 预览版的真实流量上,与只猜 1 个 token 的 MTP 相比,总吞吐相同时,每个用户的生成速度在 Flash 上提高 60% 到 85%,在 Pro 上提高 57% 到 78%。每个请求每步过主干的 token 数从固定的 2 个变成 4 到 6 个,并发升高后平滑下降。

🏷️

标签

➡️

继续阅读