DS DSpark 原理实验室
DeepSeek · Speculative Decoding

DSpark不是让模型更聪明,而是让它更快地说出同样的答案。

它在大模型旁边放一个“快手助理”:先批量猜一段,再由大模型一次验收。DSpark 的关键,是让草稿既猜得快、又前后连贯,并且只验证那些值得验证的部分。

不是新模型是附加的推理解码模块
输出分布不变目标模型仍拥有最终决定权
两项核心机制半自回归 + 置信度调度

同一句话,目标模型要跑几轮?

概念示意,不是实测
普通生成一轮一个 token
6
普通投机小模型先猜
3
DSpark长草稿 + 聪明验证
2

真正的收益取决于草稿命中率、目标模型、硬件、并发量和服务实现。页面中的动画只用于建立直觉。

01

一句话:DSpark 是一套“先猜、再验、按收益分配验收预算”的推理加速框架。

草稿模型负责便宜地提出多个候选 token;目标大模型并行验证候选前缀。DSpark 重点解决两个问题:长草稿越往后越容易乱,以及高并发时不值得把所有草稿都送去验证。

Token

模型处理文本的基本单位,可能是字、词片段、符号;不一定等于一个自然语言“词”。

草稿模型 / Drafter

较轻、较快,负责提出候选;它不是最终裁判。

目标模型 / Target

原本要运行的大模型,负责验证、拒绝与纠正候选。

02 · The bottleneck

为什么大模型生成慢?
因为它通常要一个 token 一个 token 地跑。

Transformer 在训练时能并行处理很多位置;但生成时,下一个 token 依赖刚刚生成的 token,所以解码天然带有串行性。投机解码试图把多轮目标模型调用合并成更少的验证轮次。

交互实验:生成同一句话
提示词:请用一句话介绍 DSpark。
当前轮草稿 / 验证等待开始
选择模式,然后点击“播放一遍”。
0目标模型轮次
0.0每轮产出 token
0被拒 / 丢弃草稿
每 token 延迟 ≈ (草稿时间 + 验证时间) ÷ 每轮接受数 τ

所以加速只有三条路:草稿更快、草稿更准、验证更聪明。DSpark 同时碰了后两条:让长草稿更连贯,并减少低收益验证。

03 · Semi-autoregressive generation

第一项核心:重活并行做,轻活顺序做。

纯顺序草稿能理解“前一个词选了什么”,但草稿本身会变慢;纯并行草稿很快,却可能把不同合理表达的片段拼错。DSpark 把两者拆成“并行主干 + 极轻顺序头”。

A / AUTOREGRESSIVE

顺序草稿

每个候选都看得到前面实际采样的 token,连续性好;但草稿长度翻倍,草稿耗时也大致跟着增长。

  • 优点:前后依赖完整
  • 代价:Tdraft ∝ 草稿长度
B / PARALLEL

并行草稿

一次前向同时预测所有位置,长度增加时延迟增长很小;但同一块里的位置不知道其他位置最终采样了什么。

  • 优点:一次产生整块候选
  • 问题:越往后越容易“串台”
C / DSPARK

半自回归草稿

深一些的并行主干先给每个位置一份“基础 logits”;轻量顺序头再根据已采样前缀,加一个很便宜的转移修正。

  • 保留并行主干的容量与速度
  • 抑制长草稿的尾部命中率衰减
交互实验 · 多模态碰撞

“不客气”还是“没问题”?

两种回答都合理。纯并行预测时,第 2 个位置不知道第 1 个位置最终选了“不”还是“没”,于是可能拼成“不问题”。

助手:不 …
“客气”
52%
“问题”
48%
纯并行时,第 2 个位置只看到原始上下文,不知道第 1 个位置实际选了什么。
进阶视角:并行主干给出位置 k 的基础 logits Uₖ;顺序头增加前缀相关偏置 Bₖ,最终分布正比于 exp(Uₖ + Bₖ)。论文提供 Markov head 与 RNN head 两种实现,默认使用部署更简单的 Markov head。
04 · One decoding cycle

一轮 DSpark 到底发生了什么?

下面把论文中的一次解码循环拆成 6 个动作。点击左侧步骤,观察候选 token 如何出现、被截断、被目标模型验收与纠正。

① Target

目标模型

ABCD

先正常生成一个 token D,它成为草稿阶段的锚点。

② Draft + confidence

DSpark 草稿器

EFGH
c₁0.96
c₂0.91
c₃0.74
c₄0.39
③ Verify

目标模型验收

DEFG

保留的前缀会在一次目标模型前向中并行验证。

目标模型先生成锚点 D。DSpark 不替代目标模型,而是从这个锚点出发提出下一段候选。

05 · Confidence-scheduled verification

第二项核心:不是草稿越长越好,而是要验证“最值钱”的前缀。

代码通常比开放式聊天更容易预测;低负载时多验几个 token 几乎免费,高负载时每个低置信度 token 都会挤占宝贵批量容量。DSpark 将两者放进同一个调度目标。

交互实验:拖动系统负载
教学模拟:保留论文的调度逻辑,硬件曲线为可视化合成数据
最优点调度器沿“置信度从高到低”的路径加入候选,找到预期吞吐最高的位置。
正在计算……
每个位置的“前缀存活概率”是截至该位置所有条件置信度的连乘;越靠后通常越低,所以全局排序天然保持每个请求的连续前缀。
论文中的目标:对请求 r 的位置 j,前缀存活概率 aᵣ,ⱼ = ∏ᵢ≤ⱼ cᵣ,ᵢ。验证批量为 B = Σᵣ(1 + ℓᵣ),预期接受数为 τ = Σᵣ(1 + Σⱼ≤ℓᵣ aᵣ,ⱼ),调度器根据预先测得的硬件曲线 SPS(B) 最大化 Θ = τ × SPS(B)。论文还专门处理了“决策不能偷看未来 token”的因果约束,以保持无损性。
06 · Why it is lossless

“先猜”会不会让模型降智?标准实现下,不会。

草稿模型只负责提案。目标模型用拒绝采样规则验收,并在首次拒绝处纠正;这个规则可以精确恢复目标模型原本的输出分布。DSpark 还要求调度决策不依赖未来候选。

1

草稿没有最终决定权

它只是便宜地提出候选序列,猜错不会直接进入最终输出。

2

目标模型逐位置验收

接受最长的连续前缀;一旦某个位置拒绝,后面的候选全部作废。

3

拒绝处按残差分布纠正

正确的接受率和纠正分布保证最终采样结果与单独运行目标模型一致。

小实验 · 单 token 拒绝采样

模拟 5,000 次,结果会贴近目标分布

这是投机解码验收规则的最小化示例:草稿分布明显偏了,但“接受 + 残差纠正”后的频率仍接近目标分布。

token目标分布模拟结果
尚未模拟
单 token 规则:先从草稿分布 q(x) 采样,以 min(1, p(x)/q(x)) 的概率接受;若拒绝,则从归一化后的 max(0, p(x)-q(x)) 采样。这个组合恰好产生目标分布 p(x)。多 token 版本按连续前缀执行。
07 · What the paper reports

效果主要来自:每一轮能安全接受更多 token,同时不把验证算力浪费在低概率尾部。

离线实验把调度器关闭,只比较草稿质量;线上实验则在 DeepSeek-V4 服务系统的真实流量与特定引擎配置下比较吞吐与用户侧生成速度。

平均每轮接受 token 数 τ

08 · Mental model

最后,用四句话记住 DSpark。

理解下面四点,就已经抓住了这项工作的主干;公式、训练损失与生产工程细节可以以后再补。

01

它是推理加速器,不是新基础模型

目标模型不变,旁边增加一个专门训练的草稿与调度模块。

02

大块并行预测负责“看得广”

并行主干一次产生多个位置的基础预测,避免草稿本身逐 token 变慢。

03

轻量顺序头负责“接得顺”

它利用已采样的前缀修正下一个位置,减少不同表达路径互相拼错。

04

置信度调度负责“算得值”

空闲时多验证,繁忙时砍掉低收益尾部,把目标模型批量容量留给更可能被接受的 token。

DSpark 与普通投机解码相比,新在哪里?

普通投机解码的基本框架也是“草稿 + 目标验证”。DSpark 的贡献集中在两点:半自回归草稿架构提高长块候选质量;置信度与硬件感知的前缀调度,在高并发服务里动态决定每个请求验证多长。

为什么只加一个很轻的顺序头就有用?

并行主干已经负责大部分语义判断;顺序头不必重新理解全部上下文,只需补上块内的局部转移信息。论文实验中,Markov head 往往已能获得大部分收益,RNN head 的额外提升相对有限。

是不是草稿越长,速度越快?

不是。长草稿带来更多潜在收益,也带来更多验证和固定草稿成本。如果尾部很可能被拒,验证它们会拖累高并发吞吐。因此 DSpark 要动态截断。

什么场景收益可能较小?

草稿与目标分布差异很大、任务极难或开放度极高、草稿固定成本相对过高、硬件无法高效处理可变验证长度时,收益可能下降。论文也指出,低接受率请求的整块草稿成本仍不可回收。