Appearance
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-imatrix、q2-q4-imatrix、q4-imatrix;DeepSeek 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"。