Liu 等人提出 SparseSpec-L,使用目标模型自身作为 draft model,配合动态稀疏化 KV 缓存实现训练无关的长上下文推理加速,在长序列场景优势明显。
Speculative decoding 已经成为降低 LLM 推理延迟比较实用的工具之一。其思路很简单:用一种快速的 draft 机制一次性提出多个 token,然后让完整模型在一次并行验证中确认。当 draft 质量好时,你可以用近似一个 token 的代价获得多个 token。
问题在于,大多数方案都需要一个独立的 draft 模型——一个经过训练来模拟目标模型分布的小型孪生模型。这在受控环境下有效,但会增加内存开销,需要仔细对齐,且在长上下文场景下容易退化——此时 draft 模型的压缩表示与目标模型产生了偏离。
刘等人发表的一篇新论文——SparseSpec-L: A Sparse Glimpse of the Whole——采用了一种不同的方法。它使用目标模型自身作为 drafter,但在 draft 阶段对 KV cache 进行动态稀疏化。其结果是:一个无需训练、单模型的框架,在标准自回归解码基础上实现了最高 2.79 倍的加速,尤其在长上下文场景下优势明显,而其他方法在此往往表现不佳。
标准 speculative decoding 有一个公认的问题:接受率——目标模型认可 draft token 的比例——会随着上下文增长而下降。在较短短序列上训练的 draft 模型在 32K 或 64K token 时容易失去连贯性,产生的 draft 被目标模型拒绝的频率更高。当拒绝率上升时,运行 draft 机制的开销可能反而导致推理比标准自回归解码更慢。
还有一个更微妙的问题叫做效率反转。即使有一个好的 draft 模型,也存在一个最优推测长度——即每步提出的 token 数量。提得太少会错失加速机会;提得太多则 draft 的边际成本会超过并行验证的边际收益。固定的推测长度无法适应这种动态变化。
Self-speculative decoding 方法(如 LayerSkip)通过使用目标模型的截断版本——跳过中间层——来生成 draft,从而解决了独立模型问题。这消除了结构不匹配,但层跳跃仍需要仔细校准,且在长上下文时可能损害 draft 质量。
SparseSpec-L 的核心洞察是:你不需要通过跳跃层来降低 draft 开销。保持完整模型架构,但在 draft 阶段压缩它所关注的 KV cache。完整的 KV cache 被保留用于验证,因此输出分布与标准自回归解码在数学上完全一致——该方法是无损的。
框架采用 sparse-to-full 管道:
使用稀疏 KV cache 进行 draft。模型关注过去 token 的压缩子集而非完整上下文。这减少了内存带宽和计算量,使每步 draft 更快。
使用稀疏 KV cache 进行 draft。模型关注过去 token 的压缩子集而非完整上下文。这减少了内存带宽和计算量,使每步 draft 更快。
使用完整 KV cache 进行验证。验证过程使用完整上下文,确保接受的 token 与完整模型本应产生的结果一致。
使用完整 KV cache 进行验证。验证过程使用完整上下文,确保接受的 token 与完整模型本应产生的结果一致。
回收注意力统计量。SparseSpec-L 重用前一步验证中的每头注意力分数。获得高注意力的 token 被标记为重要,并保留到下一次 draft 的稀疏 cache 中——无需额外的 forward pass。
回收注意力统计量。SparseSpec-L 重用前一步验证中的每头注意力分数。获得高注意力的 token 被标记为重要,并保留到下一次 draft 的稀疏 cache 中——无需额外的 forward pass。
稀疏 cache 保留三类 token:sink token(最初的几个 token,在 transformer 模型中往往获得不成比例的关注)、最近 token(最近窗口内的 token)和重要的历史 token(根据验证阶段的聚合注意力分数选出的 top-K 位置)。这与 KV cache 驱逐方法(如 SnapKV 和 H2O)的结构类似,但这里的驱逐是临时的——完整 cache 在验证时始终可用。
第二个主要贡献是一个自适应控制器,在每步动态调整推测长度 $k$。这直接解决了效率反转问题。
控制器追踪 draft token 的输出熵。高熵意味着 drafter 不确定——这些 token 更有可能被拒绝。低熵意味着 drafter 很有把握——这些 token 更有可能被接受。通过维护已接受和已拒绝 token 平均熵的运行估计,控制器估计 draft 中每个位置的软接受概率 $\pi_i$。
基于这些估计,控制器选择使每步效率最大化的推测长度 $k^*$:
$$k^* = \arg\max_{k \in K} \left[ \frac{1 + \sum_{i=1}^{k} \pi_i}{k \cdot C_d + C_v} \right]$$
其中 $C_d$ 是一次 draft step 的成本,$C_v$ 是一次验证 step 的成本。分子是期望生成的 token 数;分母是总计算成本。控制器选择使该比率最大化的 $k$——无需训练,只需在线统计。
在实践中,当 drafter 有信心时控制器会积极扩展推测;当不确定性上升时会收缩。这避免了固定长度推测方法在上下文变得难以预测时遇到的性能洼地。
论文在 Llama-3-8B-Instruct 和 Mistral-7B-v0.3 上评估了 SparseSpec-L,上下文长度从 10K 到 60K token。关键结果:
在 60K 上下文长度下比标准自回归解码最高快 2.79 倍
在摘要、问答和代码补全任务上表现一致
在 20K 以上上下文长度优于 LayerSkip 和辅助模型 speculative decoding
输出质量无下降——该方法在数学上是无损的
加速效果随上下文长度增长而提升——这与大多数 speculative decoding 方法相反。随着上下文增长,稀疏 KV cache 相对变得更便宜(完整 cache 越来越大,但稀疏 cache 保持有界),而验证过程无论上下文长度如何都能从并行 token 处理中受益。
SparseSpec-L 的值得注意的是它不需要:无需训练或维护 draft 模型,无需架构改动,无需微调。加载你现有的模型,配置稀疏 cache 预算和熵控制器的候选集,然后运行。作者在 GitHub 上提供了代码。
对于已经在使用长上下文的应用,实际影响最清晰:在大文档集上进行检索增强生成、具有长对话历史的多轮 agent、处理大型代码库的代码助手。这些恰恰是现有 speculative decoding 方法容易表现不佳的场景。
确实存在局限。加速效果取决于接受率,而接受率因任务和模型而异。熵控制器的估计在生成早期统计量积累不足时是嘈杂的。稀疏 cache 预算是一个需要调优的超参数——太激进会降低 draft 质量;太保守会缩小加速效果。
对于在长上下文工作负载上运行推理、寻求延迟改进且不愿承担独立 draft 模型开销的团队,SparseSpec-L 是一个值得评估的实用选择。免训练特性在生产环境中尤其有价值,因为在生产中维护一个与目标模型分布对齐的独立 draft 模型是一项持续的工程负担。
更广泛的趋势值得关注:随着上下文窗口向百万 token 级别扩展,自回归解码中的内存带宽瓶颈变得越来越严重。不需要额外训练基础设施就能降低该瓶颈的方法可能会得到更广泛的采用。
Primary source: SparseSpec-L: A Sparse Glimpse of the Whole (arXiv:2607.27735)