慢慢看懂AN INTERACTIVE EXPLAINER
DEEPSEEK DSPARK / 从直觉走到原理

DSpark.让每一轮计算,
多走几步。

大模型不必变小,回答也可以更快。
秘诀是:先快速打草稿,再让大模型验收。
DSpark 把“怎么写”与“验多少”一起改进了。[1]

主线约 12 分钟无需推导公式可离线体验

你只需知道:Transformer 会根据上文预测后文。

看懂等待体验试写理解 DSpark
01
THE BOTTLENECK / 先看见问题

慢的,是下一步要等上一步。

聊天时文字一个接一个冒出来,不只是界面效果。常见的自回归生成,确实要先确定前一个片段,才能决定后一个。[2]

先别想整个模型。
只看一小句话。

这里把文字片段叫作 。模型每做一轮 ,就得到下一个 token 的概率,再从中选一个接到句尾。

试着点几次按钮,感受一下:新片段成了下一轮的上文。

为方便观察,本页的中文切分都是示意,不代表 DeepSeek 的真实分词。

LAB 01   让模型走一步教学模拟
模型这一轮看见的上文
阳光
目标大模型
下一个片段
0/ 6 轮
先点一次,看看第一个片段怎样成为新的上文。
每次点击 = 一次示意性的目标模型前向AUTOREGRESSIVE
不是 Transformer 不会并行,而是未来的输入还没确定。
已知文字可以一起处理;自由生成时,后面的选择依赖前面刚刚选出的 token。
我听过 KV cache,它不能解决吗?

缓存能复用历史 token 的部分计算,避免反复重算旧信息。但它不会提前告诉模型“下一个 token 到底选了什么”。因此,复用历史计算消除新 token 的先后依赖是两件事。推测解码处理的是后者带来的等待。[2]

既然不能凭空知道后文,能不能先用便宜的方法猜一段?
02
SPECULATIVE DECODING / 共同基础

小模型先写,大模型把关。

这叫“推测解码”。轻量 提出多个候选,大模型一次算出整段的验证分布;接受时仍从左向右,只保留连续通过的前缀。[2]

LAB 02   试着验收一段草稿贪心解码示意
已有上文:今天,我们一起…   /   下方是草稿,不是最终答案
✓ 接受× 拒绝— 作废+ 大模型补出
草稿已经就位。先猜一猜:第 3 处没通过,后面的片段还能直接留下吗?

这里“通过”表示符合目标模型的选择规则,不是“句子合不合语法”。动画为方便理解采用贪心选择;随机采样的无损校正见第 6 站。

目标模型前向次数:0待验证
“一整段都算过”不等于“一整段都能用”。
一处拒绝,后面的验证就失去原来的前提。留下已通过的部分,再补一个修正 token;若全部通过,则多补一个 token。[2]
等等,为什么能一次验证多个位置,却不能一次生成整句?

因为验收时,整段候选文字已经存在。每个位置的“假设上文”都已知,就能一起算。因果注意力仍然挡住未来:验证第 3 个候选时,只使用已确认上文与前两个候选,不偷看第 3 个及之后的文字。

这是把多个已知输入下的条件预测放进同一次前向,不是解除语言模型的因果约束。真正选中哪些候选,仍要看前面的验收结果。[2]

这还不是 DSpark 的全部。新问题是:草稿怎样既写得快,又写得连贯?
03
BETTER DRAFTS / 第一个改进

重活一起做,落笔时接上话。

纯并行草稿可以同时为多个位置给分,但采样时未必知道前面实际选了什么。比如“喝水”和“读书”都合理,分开选却可能凑出“喝书”。

DSpark 把大部分草稿计算留给并行主干,再加一个很小的顺序模块:在每次选 token 之前,根据已经选出的前缀调整分数。这就是半自回归[1]

LAB 03   给草稿一点“接话”能力人为设定概率
已有上文起点 token待预测位置
并行主干一次重计算,给多个位置准备基础分数
位置 1 的基础偏好喝 / 读
位置 2 的基础偏好水 / 书
没有顺序修正:各位置独立采样

第一个位置选了“喝”,第二个位置并不知道。

① 先选第一个片段
② 看第二个位置的概率
50%
50%
试着把“喝”切换成“读”:纯并行模式下,第二处仍各占一半。然后打开 DSpark,观察差别。

为隔离机制,实验把基础概率固定为 50% / 50%,把顺序修正后的偏好设为 90% / 10%。这些不是论文实测,也不意味着真实模型一定消除搭配错误。

重计算并行 + 轻量顺序依赖 = 半自回归NOT FULLY PARALLEL
不是先写死整段,再回头改错。
主干先把分数算好;小模块在从左到右采样时,给“接得上”的候选增加偏好。贵的部分没有跟着逐 token 重跑。
进一层:并行主干、Markov head、RNN 分别是什么?

并行主干基于 DFlash,利用目标模型提供的上下文特征,为一块待生成位置产生隐藏状态与基础分数。位置之间可以交换特征,但这不等于已经知道各位置最终会采样出哪个 token。[3]

默认的 Markov head:看刚刚选出的那一个

顺序修正默认只依赖前一个 token。用一张低秩的转移表给当前词表加偏置,避免每一步再跑完整 Transformer。注意:仅修正头是“一步记忆”,并非整个草稿模型只能看前一个 token。历史语境已经在并行主干里。论文还讨论了能积累块内前缀信息的 RNN 头。[1]

qₖ = softmax(Uₖ + Bₖ)
Uₖ:并行主干的基础分数。Bₖ:根据已选前缀加上的修正。softmax:把分数变成概率。
本实验用两个基础分数 0、0;给合理候选加 ln(9),便从 50% 变为 90%。

在公开的 Qwen3-4B 训练配置中,草稿长度为 7、主干为 5 层、Markov rank 为 256。这是该实验配置,不应当成所有 DSpark 部署的固定规格。[5]

草稿更连贯了,但服务器很忙时,每一处都值得花力气去验吗?
04
SMARTER VERIFICATION / 第二个改进

写得长,不如验得值。

越靠后的草稿,越可能因为前面的拒绝而白验。DSpark 估计它们“能走到这里”的把握,再结合引擎的计算成本,决定每个请求到底送多少去验证。[1]

FIRST先分清:这一处能过,与能走到这一处。

把草稿想成连续的几道门。第 2 道门只有在第 1 道门通过后才有意义。这里的 不是“内容真实的概率”,而是在前面已经通过时,这一处被大模型接受的估计概率

容易卡在开头开头较稳

拖低第 1 处,留意整条后缀如何一起变暗。其余各处的条件概率固定为 85%、75%、70%、65%。

THEN再决定:把验证名额给谁?
LAB 04   你来调节服务器的忙碌程度简化调度实验
空闲 · 多验一点便宜繁忙 · 每个位置都贵
中等负载
对比验证策略

卡片数字 = 前缀一路通过到此处的概率。
✓ 送去验证 — 提前不送;送去 ≠ 保证接受。

送入目标模型的 token0
含 3 个固定起点位置
本轮期望新输出0
接受草稿 + 每请求 1 个补出
相对“全部验”的速率1.00
教学成本模型,非实测
验证名额与期望输出速率教学成本模型中的曲线,标出当前选择的验证量。

三类请求及概率均为作者构造,用于展示不同草稿质量;并不代表所有代码都比聊天好猜。负载滑块改变的是“多验一个位置有多贵”,不是生产服务器的实测并发人数。

先全局比较存活概率,再为每个请求保留连续前缀CONFIDENCE × CAPACITY
DSpark 的选择不是“置信度低于 80% 就丢”。
同一个草稿,在空闲时可能值得验,繁忙时则未必。它关心的是单位时间能多产出多少被接受的 token,而不只是接受率高不高。[1]
想看清计算:这个实验怎样选出验证长度?

先把各处的条件概率相乘:aⱼ = c₁ × … × cⱼ。再把三个请求的候选扩展按 aⱼ 从高到低排序。因为同一请求的 aⱼ 不会上升,排在后面的 token 不会越过自己的前缀。

B = R + Σ ℓᵣ
E = R + Σᵣ Σⱼ≤ℓᵣ aᵣ,ⱼ
期望输出速率 = E ÷ T(B)
R = 3 个请求;ℓᵣ 是为请求 r 选择的草稿长度。每个请求还占一个固定输入位置,并会补出一个修正或额外 token,所以两处都有 R。

本页为了展示成本变化,自己设定 T(B) = 12 + (0.06 + 0.04L)B + 0.0008LB² 毫秒,L 是滑块数值。按排序逐个加名额,期望速率不再上升时停止。真实系统使用测量得到的步频曲线 SPS(B),而不是这个公式。表中比较也不包含完整的真实草稿与系统开销。[1]

当前负载下,不同验证预算的教学计算结果
草稿名额总 B期望新输出模拟毫秒模拟 token/s
两个严谨补丁:置信度要校准,调度不能偷看未来。

校准。一个估计器即使能给候选排好坏,也可能整体过于自信。DSpark 用独立验证集上的 Sequential Temperature Scaling 校准累积的前缀存活概率;这不等于降低生成温度,也不是改变大模型的回答偏好。

因果性。当前 token 能否被送验,不能靠偷看未来候选来反向决定,否则可能筛选出有偏样本。论文的同步算法使用早停;只有目标曲线满足单峰等条件时,早停才同时给出全局最优。生产实现还使用历史步的预测来设置容量,以适配异步执行和不平滑的硬件成本曲线。[1]

本页用预先固定、与候选词内容无关的概率和光滑成本曲线做演示,不是在浏览器里复现真实 DSpark 的在线调度器。

把“会接话的草稿”和“会取舍的验收”接起来,就得到了完整的 DSpark。
05
PUT IT TOGETHER / 串起来

现在,跟着一轮计算走到底。

不用记住模块名字,只问三个问题:现在已有了什么?谁在做计算?哪些结果真的留下了?下方按论文的流程重构了一轮示例。[1]

LAB 05   一轮 DSpark示意字母代表 token

1 / 5 步调度少验 ≠ 放松验收
这需要重新训练 DeepSeek 大模型吗?

不需要为了 DSpark 改写目标模型的权重;需要训练与目标模型配套的草稿组件。官方 DeepSeek-V4-Pro-DSpark 模型卡明确说明,它不是新的基础模型,而是在同一 checkpoint 上附加推测解码模块。[4]

DeepSpec 是公开的草稿模型训练与评估代码库,包含数据准备、训练配置和验收表现评估。“DSpark 这一方法”“DeepSpec 这个代码库”“附带 DSpark 的模型 checkpoint”是相关但不同的三件事。[6]

06
WHAT STAYS TRUE / 最后的关键边界

更快,不靠降低把关标准。

你也许会担心:“既然让小模型先猜,会不会把回答带偏?”把关机制的意义,恰恰就是不让草稿替目标模型作最终决定。

p stays p.

改变生成路径,
不改变目标分布。

在满足算法条件时,无损推测解码保留目标模型的输出分布。贪心模式可以直观看作“选得一样才接受”;随机模式则必须用接受概率 + 拒绝后的补偿采样校正。[2]

分布相同,不是每次随机运行逐字相同,
也不等于回答永远正确。

用一个只有两种选择的实验,看懂“无损”怎么成立。

假设下一步只有 A、B 两个 token。目标模型始终想要 A 占 60%、B 占 40%。你可以把草稿对 A 的偏好调得很偏,观察最后的分布。

草稿分布 q
A 85%B 15%
校正后的最终分布 p
A 60%B 40%
接受概率:min(1, p(x) / q(x))
拒绝后:按 max(p − q, 0) 归一化,再采样
不需要死记。直觉就是:草稿多给了谁,就退回一部分;草稿少给了谁,就把退回的概率补给谁。这是解析计算,不是随机跑出来的近似柱图。

如果当前块全部接受,就从目标模型对应的下一位置分布补出一个 token;若首次拒绝,则从该位置的修正分布补出一个 token。这个校正与合法的调度规则一起,才构成无损保证。[2]

EVIDENCE论文里,真正测到了什么?

以下是论文报告的生产流量结果,不是上面几个实验的输出。对照是原有 MTP-1 单 token 草稿方案,且比较时匹配了系统总吞吐水平。[1]

DeepSeek-V4-Flash · preview
+60–85%

单用户生成速度提升
相同系统总吞吐下

DeepSeek-V4-Pro · preview
+57–78%

单用户生成速度提升
相同系统总吞吐下

来源:DSpark 论文 §5.4、图 7。它们是特定模型、引擎与流量下的区间,不是所有显卡、所有请求的统一加速比。[1]

不是“多猜总会更快”草稿本身也花时间。验收率很低时,提前算好的长草稿可能白费;截掉验证后缀也收不回已发生的草稿计算。[1]
不是“接受率越高越好”只验一个最稳的 token,接受率可以很好看,但每轮推进很短。判断划不划算,还要把时间成本与成功推进量放在一起。
不是“首字与总时长同幅下降”生成阶段更快,不表示排队、输入处理和首 token 延迟都按同样比例降低。单用户 token/s 与系统总 token/s 也不是同一个指标。
CHECKPOINT   不背术语,确认直觉
选一个最接近你理解的答案。答错也没关系,解释比得分重要。
TAKE THIS WITH YOU

最后,只带走这一条线。

并行算大部分草稿轻量顺序接上话看把握与负载,选前缀大模型严格验收

DSpark 不是让小模型代替大模型,而是让它们更好地分工:草稿尽量快而连贯,验证尽量花得值得,最终分布仍由目标模型决定。

再走一轮,巩固一下 ↑
READ THE ORIGINALS / 回到一手资料

原理有出处,演示有边界。

依据下列一手材料编写。DSpark 论文使用 2026 年 7 月 6 日的 arXiv v1;资料核对日期为 2026 年 9 月 6 日。本页为独立教学作品,不是 DeepSeek 官方网站。

[1]
DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation ↗

Cheng 等,2026。§3.1 半自回归;§3.2 置信度与调度;§5.2 部署中的因果约束;§5.4 性能与限制。流程按图 1 重新设计,性能数字取自图 7 及正文。

[2]
Fast Inference from Transformers via Speculative Decoding ↗

Leviathan、Kalman、Matias,ICML 2023。自回归瓶颈、并行验证、接受规则与拒绝后的校正采样,参见 §2 与 Algorithm 1。

[3]
DFlash: Block Diffusion for Flash Speculative Decoding ↗

Chen、Liang、Liu,2026。理解一次前向的并行草稿,以及来自目标模型的上下文特征。

[4]
DeepSeek-V4-Pro-DSpark · 官方模型卡 ↗

区分原有目标模型 checkpoint 与附加的推测解码模块。

[5]
DeepSpec · Qwen3-4B 的 DSpark 训练配置 ↗

草稿 block_size、num_draft_layers、markov_rank 等具体配置。仅用于说明一种公开实验设置。

[6]
DeepSpec · 官方训练与评估代码库 ↗

涵盖草稿数据准备、训练与评估。不能仅凭本页的浏览器模拟推断实际部署性能。

交互中的语句、概率、成本曲线均为作者构造的教学模型;没有调用语言模型,没有测量本机 GPU。全文可阅读,公式按需展开。除主动打开来源链接外,本文件无需联网,不加载外部脚本或字体。

术语小抄

不用提前背下来。遇到了,再回来认一下。

Token · 模型处理的文字单位
可能是一部分词、一个字、标点或其他片段,不必等于日常说的“一个词”。本页用方便阅读的方块代表它。
前向计算 · 把输入送过一遍网络
这里指目标模型或草稿模型执行一次计算,产生下一个或多个位置的预测分布。“一次前向”不意味着只处理一个输入 token。
草稿模型 · 提候选,不作最终决定
一个更便宜的配套模型或模块,先预测候选 token。草稿需要接受目标模型的验证,不能直接冒充最终输出。
前缀 · 从开头连续的一段
在 A B C D 中,A、A B、A B C 都是前缀,A C 不是。推测解码保留连续通过的前缀,不挑零散的好词留下。
置信度 · 估计“能否被接受”
DSpark 的 cₖ 估计:在前面候选都通过的条件下,第 k 处会被目标模型接受的概率。它不是事实核查分数,也不等于该词的 softmax 最大概率。来源 [1] §3.2。
吞吐与单用户速度 · 两种不同的快
单用户速度看某个请求每秒生成多少 token;系统吞吐看整个系统每秒合计产出多少 token。一个人的速度提升,未必自动意味着系统能同时服务更多人。
无损 · 保留目标分布
合法的推测与校正算法不改变目标模型输出的概率分布。它既不是“每次随机运行文本完全一样”,也不是“模型不会答错”。来源 [2] §2。

你的 DSpark 知识卡

浏览器未允许自动复制。以下文本已选中,可手动复制。