SpecStream: 长上下文投机解码的流式 KV 卸荷
一句话结论
在 KV 卸荷到 CPU 的投机解码路径上,只迁移 Target 已提交历史、分块 H2D + 跨 verification query 共享 + online softmax,并在同 GPU 用 TPC mask 做 Target-priority Draft 共执行;相对卸荷基线吞吐均值 1.41×(Qwen3)/ 1.32×(InternLM2.5),相对分卡并行投机每 GPU 吞吐均值 +55.4%。
动机
- 投机解码缩短 Target 串行步,但 Draft/Target 权重与候选 KV 一并吃满 GPU;长上下文仍逼出 KV 卸荷。
- 既有卸荷往往整段历史到齐才算 attention,且未摊薄 verification 轮内多 query 对同一 committed 历史的共享;H2D 等待留下 compute bubble。
- 并行投机(分卡 Draft/Target)掩盖草拟延迟,却未用 Target GPU 上的空泡推进 Draft。
对照 DSpark Speculative Decoding、SPECTRA、HeteroReason、Fathom。
方案
- Commit-aligned 卸荷:仅异步卸荷 Target 已提交历史;候选 rollback 留在 GPU。
- Streamed verification:历史分块到达即参与 attention;轮内多 query 共享同一历史块;online softmax 保完整因果注意力。
- Target-priority 同 GPU 共执行:TPC mask 限制 Draft 可用集群,运行时按 Target 延迟估计控制 Draft 准入,压低干扰。
- 评测:实现于 SGLang;A800 80GB PCIe Gen4 + 240GB host;模型对 Qwen3-32B/0.6B、InternLM2.5-20B-*;LongBench v2 / MRCR 等;基线含卸荷投机与分卡并行投机(SPECTRE+Offload 等)。
效果(仅论文数字)
| 指标 | 数字 |
|---|---|
| 吞吐 vs 卸荷基线(跨数据集均值) | Qwen3 1.41×;InternLM2.5 1.32× |
| 同 GPU vs 分卡并行投机(每 GPU 输出吞吐) | 均值 +55.4% |
| 硬件 | A800 80GB;PCIe Gen4×16 ≈31.5 GB/s vs HBM 1935 GB/s(文中对比) |
| 质量 | 任务质量接近 SGLang 投机解码基线(摘要) |
与 wiki 的关系
- DSpark Speculative Decoding — 系统侧 卸荷×投机 调度轴
- End-to-End Memory Data Path — H2D 流式 KV 与 commit 边界
- HeteroReason / SPECTRA — 异构/瓦片投机;本文是 同 GPU + CPU 卸荷