DeepSeek 发布了 DSpark,一个投机解码框架,并开源了检查点与训练代码。这是一项服务优化,而非新模型。检查点 DeepSeek-V4-Pro-DSpark 和 DeepSeek-V4-Flash-DSpark 复用了现有的 V4 权重,并附加了一个草稿模块。
DeepSeek 研究团队还开源了 DeepSpec,一个采用 MIT 许可证的代码库,用于训练和评估投机解码的草稿模型。这项工作针对一个问题:在繁忙的生产服务中实现更快的大模型推理。
摘要
- DSpark 将并行草稿主干与一个微小的顺序头配对,以减少后缀衰减。
- 一个置信度头和负载感知调度器在 GPU 空闲时验证更多 token,在繁忙时验证更少。
- 离线状态下,接受长度比 Eagle3 提升 26–31%,比 DFlash 提升 16–18%。
- 在 DeepSeek-V4 的生产环境中,每个用户的生成速度比 MTP-1 基线快 60–85%。
- 输出保持无损,并且检查点以及 DeepSpec 训练代码均已开源。
什么是 DSpark?
投机解码将生成过程拆分为两个角色。一个小型草稿模型提议一个 token 块。然后,完整的目标模型在一次前向传播中验证该块。
拒绝采样接受最长的有效前缀,并附加一个奖励 token。由于该规则精确地保留了目标分布,因此没有质量损失。DSpark 保持了这一保证。它改变了 token 的草拟方式以及被验证的数量。
它优化的延迟计算
每个 token 的延迟遵循论文中的一个公式:L = (Tdraft + Tverify) / τ。这里 τ 是每个周期接受的 token 数量。加速仅来自三个杠杆。
你可以更快地草拟,降低 Tdraft。你可以更好地草拟,提高 τ。或者你可以更智能地验证,减少浪费的 Tverify。DSpark 同时拉动了这三个杠杆。
工作原理:半自回归生成
早期的草稿模型迫使做出权衡。像 Eagle3 这样的自回归草稿模型让每个 token 都依赖于之前的 token。这带来了很强的接受率,但草拟成本随块大小增长。
像 DFlash 这样的并行草稿模型在一次传递中生成整个块。草拟成本保持低廉,但每个位置都忽略了其相邻位置。结果是“多模态碰撞”以及沿后缀的快速接受衰减。
DSpark 将草稿生成分为两个阶段。首先,一个重型并行主干网络(在其设置中为 DFlash)为每个位置生成基础 logits。然后,一个轻量级顺序头在采样每个 token 之前添加一个基于前缀的偏置。
默认的顺序头是一个马尔可夫头。它只查看紧邻的前一个 token。一个低秩分解(秩为 256)使其即使在词汇量很大的情况下也能保持低成本。
一旦位置一采样出“of”,该头就会提升“course”并抑制“problem”。一个可选的 RNN 头会跟踪整个块前缀。它带来的增益微乎其微,因此马尔可夫头作为默认配置。
效果逐位置显现。DSpark 继承了并行主干网络的高首 token 准确率。随后,顺序头在块深处也能保持稳定的接受率。
训练过程冻结目标模型,并复用其嵌入层和输出头。总变差损失是关键项。最小化该距离可直接最大化草稿的接受率。
工作原理:置信度调度验证
更多的草稿 token 并不总是意味着更快的速度。在高负载下,验证将被拒绝的 token 会浪费批次容量。DSpark 增加了两个部分来解决这个问题。
一个置信度头为每个草稿位置输出一个分数。该分数估计了在给定已接受前置 token 的情况下,该 token 通过验证的概率。它由分析性的逐步骤接受率进行监督。
原始的神经置信度通常过于自信。因此,研究团队应用了顺序温度缩放,这是一种事后校准步骤。它将预期的校准误差从 3–8% 降低到大约 1%。
一个硬件感知的前缀调度器随后为每个请求设置验证长度。它使用一个在启动时测量一次的吞吐量曲线 SPS(B)。当 GPU 空闲时,它会验证更多 token。当 GPU 繁忙时,它会验证更少 token。
调度器使用一个早停规则来保持无损。附录部分给出了一个反例,说明了为什么朴素的全局搜索会泄露信息。
指标
离线测试涵盖数学、代码和日常聊天。目标模型包括 Qwen3-4B、8B、14B 和 Gemma4-12B。DSpark 在每一个领域的接受长度上都击败了两个基线。
在 Eagle3 上,三个 Qwen3 尺寸模型的宏平均接受长度分别提升了 30.9%、26.7% 和 30.0%。在 DFlash 上,提升幅度分别为 16.3%、18.4% 和 18.3%。一个 2 层的 DSpark 甚至超过了 5 层的 DFlash。
顺序头带来的额外成本很小。将草稿长度从 4 扩展到 16,每轮推理延迟仅增加 0.2–1.3%。作为回报,接受长度提升了高达 30%。
生产环境下的结果来自 DeepSeek-V4-Flash 和 V4-Pro 在真实流量下的表现。基线是 MTP-1,即之前的单 token 方案。在相同吞吐量下,Flash 上每个用户的速度提升了 60–85%,Pro 上提升了 57–78%。已部署的配置是 DSpark-5,即一个带有马尔可夫头的 5 token 草稿块。
| 草稿模型 | 草稿生成方式 | 块成本 | 后缀接受率 | 验证长度 |
|---|---|---|---|---|
| Eagle3 | 自回归 | 随块大小增长 | 高且稳定 | 固定 |
| DFlash | 并行 | 近乎恒定 | 快速衰减 | 固定(完整块) |
| MTP-1 | 单 token(MTP) | 低 | — | 静态 2 token |
| DSpark | 并行 + 顺序头 | 近乎恒定 | 高且稳定 | 动态,感知负载 |
用例与示例
结构化工作负载从更长的验证中获益最多。在代码生成中,接受率天然很高。调度器可以验证长前缀而几乎没有浪费,因此编码智能体能够更快地流式输出结果。
开放式聊天则有所不同。通过置信度阈值扫描,聊天的接受率从 45.7% 提升到了 95.7%。置信度头会标记出不确定的后缀 token,以便将其剪除。
数学推理介于两者之间。在同一扫描中,其接受率从 76.9% 提升到了 92.5%。长步骤的逐步推导过程受益于稳定的深层块接受率。
高并发服务是主要的应用场景。在中等负载下,调度器每个请求大约验证 4–6 个 token。随着并发度升高,它会削减这个预算以保护吞吐量。
尝试使用
DeepSpec 的运行分为三个阶段:数据准备、训练,然后是评估。配置文件用于选择算法和目标模型。评估环节会在九个数据集上对训练好的草稿检查点进行基准测试。
# Install dependencies
python -m pip install -r requirements.txt
# Train a DSpark draft against a Qwen3-4B target.
# The algorithm and target are chosen by the config, e.g.
# config/dspark/dspark_qwen3_4b.py
bash scripts/train/train.sh
# Evaluate the trained draft across the 9 benchmark datasets.
# Set in the eval config:
# target_name_or_path = Qwen/Qwen3-4B
# draft_name_or_path = ~/checkpoints/deepspec/dspark_block8_qwen3_4b/step_latest
bash scripts/eval/eval.sh 默认配置假设使用一个拥有 8 块 GPU 的节点。如果 GPU 数量较少,请减少 `CUDA_VISIBLE_DEVICES` 的设置。请注意,目标缓存可能很大,在 Qwen3-4B 的设置下接近 38 TB。
对于生产环境检查点,草稿模块会附加到现有的 V4 权重上。Hugging Face 模型卡在推理文件夹中提供了一个最小推理示例。目标模型无需重新训练。
下方的交互式演示展示了这一机制。选择一个草稿模型、一个领域以及一个 GPU 负载等级。观察草稿块、置信度分数以及调度器的验证预算如何实时变化。这些数字是示意性的,基于论文中报告的行为建模。