Skip to content

DSpark 推测解码——DeepSeek 为 DeepSeek V4 Flash 发布的辅助草稿模型。它读取主模型的隐藏状态、一次提议最多 5 个未来 token,主模型验证后只提交被接受的前缀。主模型始终权威;被拒或低置信度的后缀退回普通目标解码。属于显式 opt-in 的实验性加速路径。

它解决什么

decode 是严格自回归的——每生成一个 token 都要把 81GB 权重读一遍却只算一个 token,瓶颈是内存带宽(见 Part 4)。推测解码的思路:用一个小/快模型先猜 N 个 token,主模型一次验证,猜对就"免费"获得 N 个 token。当多个提议被接受时,一次目标验证能把流推进好几个 token

不加速 prefill,草稿和验证也不是免费的。可预测的续写(尤其是代码)收益最大;低收益 prompt 可能不变快甚至更慢。所以 DSpark 仍显式 opt-in。

与旧 MTP 的关系

ds4 原本有一套单阶段 MTP(Multi-Token Prediction)推测路径(--mtp-draft,带置信度门 --mtp-margin)。DSpark 取代了它用于 Flash,而非叠加:

  • DSpark 检查点约 5.6 GiB,是一个独立的支持 GGUF,不是独立模型
  • --mtp 传支持文件,用 --dspark 选 DSpark 运行时(--dspark--mtp 走旧的单阶段 MTP)
  • 同一个支持文件可用于 Flash 的 q2-imatrixq2-q4-imatrixq4-imatrixDeepSeek V4 PRO 暂不支持
  • Metal 上主模型可常驻或 --ssd-streaming;支持模型仍额外占自己的权重和运行时状态
sh
./ds4 -m ds4flash.gguf \
  --mtp gguf/DeepSeek-V4-Flash-DSpark-support.gguf \
  --dspark --temp 0

置信度门与限制

默认置信度阈值 0.7(2026-08 从 0.9 下调),剪掉不太可能"值回验证成本"的后缀。--dspark-confidence 0 强制固定 5-token 块,仅用于诊断。采样解码不用 DSpark 提议--quality--dspark-strict 也保持纯目标解码,便于对比和正确性检查。

下调门限是因为验证不是逐个 token 判定,而是对一个 5-token 块取被接受的前缀——0.9 太严会把本可接受的后缀整段丢掉、退化成只接受 1 个 token,验证算力没充分换回 token;0.7 让前缀更长,单次验证换回的 token 期望值更高。被拒后缀的草稿算力"白花",但草稿模型远比一次主模型目标解码便宜,平均接受长度上升的收益更大。

调度确定性与贪心同一性

DSpark 调度默认确定性--dspark 开即按固定顺序提/验,便于复现)。一个易错点:partial-accept(块内只接受前 k 个)的捷径一度保留了验证器批的 compressor 前沿,可能让后续贪心 token 偏离普通解码——即"推测验证改变了模型本会输出的 token"。修复是恢复快照、把 partial accept 像 full accept 一样走普通单 token 路径回放,保证验证不留数值不同的 compressor 状态。严格 Flash 捕获(--dspark-strict)还会跳过无 compressor 的前两层。

c
// ds4.h — 相关引擎选项
float dspark_confidence_threshold;
bool  dspark;
bool  dspark_strict;
bool  dspark_confidence_threshold_set;

GLM 5.2 的推测解码走另一条路:MTP 块在主 GGUF 内部(不靠单独的 Flash MTP 文件),用 --glm-mtp / --glm-mtp-timing 启用实验性贪心推测。

相关概念

  • Part 4 §推测解码 — MTP 原理与"逐行 argmax"验证不变量
  • moe / quantization — 路由专家的激进量化让 Flash 能塞进本地内存,是本地推测解码的前提

详见上游 README "DSpark Speculative Decoding"。