跳转至

Draft-based Approximate Inference for LLMs

会议: ICLR 2026
arXiv: 2506.08373
代码: GitHub
领域: 模型压缩
关键词: 近似推理, KV cache压缩, prompt压缩, 草稿模型, 稀疏注意力

一句话总结

提出 Draft-based Approximate Inference 框架,利用小型 draft 模型的前瞻(lookahead)预测来更准确地估计 token/KV pair 重要性,包含 SpecKV(KV cache dropping)、SpecPC(prompt 压缩)和 SpecKV-PC(级联压缩)三种方法,在长上下文 benchmark 上一致优于现有基线。

研究背景与动机

长上下文 LLM 推理面临两大瓶颈:注意力计算随上下文长度二次增长,KV cache 内存线性增长(128K token 在 Llama-3.1-8B 上需 16GB+)。现有近似推理方法包括 KV cache dropping(H2O、SnapKV)、稀疏注意力(MInference)和 prompt 压缩(LLMLingua-2),但它们都依赖当前输入 token 的注意力激活来估计重要性——这本质上是"后视镜"策略,无法准确预测未来生成 token 真正需要哪些 KV pair

核心矛盾:重要性估计需要未来信息,但未来 token 尚未生成。LAQ++ 尝试用 target 模型自身的稀疏近似来生成 draft query,但它需要存储完整的 target KV cache,无法降低峰值内存。

本文的切入角度:用一个轻量级 draft 模型(如 0.5B-3B)来生成前瞻 token,以极低开销获取近似的未来信息,从而更准确地估计 token 重要性,同时避免 target 模型的内存和计算负担。

方法详解

整体框架

Draft-based Approximate Inference 用一个小型 draft 模型先对输入生成前瞻(lookahead)token,再借这些前瞻信息(draft 的输出或注意力激活)去判断 target 模型该保留哪些 KV pair、哪些 prompt token。与投机解码(speculative decoding)不同,这里 draft 的前瞻不是用来加速验证,而是为重要性估计补上"未来视角",从而真正压低 target 模型的总计算与峰值内存。

框架在这套思路上落出两个独立算法和一个级联:SpecKV 用前瞻 token 给 target 的 KV cache 打分做丢弃,SpecPC 直接拿 draft 的注意力图给 prompt token 打分做删除,SpecKV-PC 则把两者串成一条流水线——先用 SpecPC 粗删 prompt,再用 SpecKV 细删 KV。三者共享同一个 draft 前瞻前端,只是用了它输出的不同信号。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    IN["长上下文输入 prompt"] --> DRAFT["小型 draft 模型前瞻<br/>生成前瞻 token + 注意力分数"]
    DRAFT -->|"前瞻 token 补未来视角"| SPECKV["SpecKV<br/>交叉注意力打分<br/>保留 top-Cmax KV + 窗口"]
    DRAFT -->|"draft 注意力图打分"| SPECPC["SpecPC<br/>删无关 prompt token<br/>压到中等长度"]
    SPECPC -->|"SpecKV-PC 级联:先压 prompt"| SPECKV
    SPECKV --> OUT["target 模型 prefill + 解码<br/>(压缩后 prompt 与 KV cache)"]

关键设计

1. SpecKV(Speculative KV Dropping):让 draft 的前瞻 token 来决定哪些 KV 该留

现有 KV dropping(如 SnapKV)只看当前输入 token 的注意力,等于用后视镜估计未来生成会用到谁。SpecKV 先让 draft 模型续写出 \(n_{\text{lookahead}}\) 个前瞻 token,把它们和原输入拼在一起喂进 target 做 prefill;对每个注意力头,用最后 \(n_{\text{window}}\) 个输入 token 加上这些前瞻 token 的 query,去对其余输入 key 做交叉注意力,以此打分,最终保留 top-\(C_{\max}\) 个 KV pair 再加上窗口内的 KV pair。和同样用 lookahead 的 LAQ++ 相比,关键差别是它不需要存下 target 的完整 KV cache,因此峰值内存是真降下来的,而非只省了计算。理论上(Theorem 1)这套打分的误差被 draft 嵌入误差线性控制,\(\|s - \hat{s}\|_2 \leq \epsilon \|W_q W_k^T\|_2\),意味着只要 draft 不太离谱,估出的重要性就足够可信。

2. SpecPC(Speculative Prompt Compression):直接拿 draft 的注意力图给 prompt token 打分

prompt 压缩比 KV dropping 更狠,要在 prefill 之前就把无关 token 删掉。SpecPC 把完整 prompt 送进 draft 模型,直接抽出它的注意力激活张量 \(A \in \mathbb{R}^{n_{\text{layer}} \times n_{\text{head}} \times (n_{\text{in}}+n_{\text{lookahead}}-1) \times n_{\text{in}}}\) 来衡量每个 token 的重要性。为了让分数更稳,它用大窗口配非均匀权重(离序列末尾越远的 query 权重越低)、跳过前 \(l_{\text{skip}}\) 层(浅层注意力还没聚焦、噪声大),并采用先在窗口内平均、再跨头取最大的聚合方式。Theorem 2 给出保证:当输入满足压缩感知里的 RIP 条件时,注意力的近似误差与最终输出的近似误差成正比,把"删 token"这件事和可控的输出偏差挂上了钩。

3. SpecKV-PC(级联压缩):先粗删 prompt,再细删 KV

单独一种压缩往往要在压缩率和精度间硬权衡,级联则能各取所长。SpecKV-PC 先用 SpecPC 把 prompt 压到中等长度(如 2048 token),再用 SpecKV 把 KV cache 进一步压到很小(如 256)。因为 target 模型只需处理已经变短的 prompt,延迟和内存都明显下降;更有意思的是级联效果反而比单用 SpecKV 更好——SpecPC 充当了一道预过滤器,先扔掉明显无关的 token,让后续 SpecKV 的打分在更干净的候选集上进行。

损失函数 / 训练策略

三种方法都是 training-free 的推理时优化,无需任何额外训练。实现上 SpecKV 把稀疏 prefill(Vertical-Slash 模式)与 KV cache dropping 结合,进一步压低 prefill 开销;SpecPC 则用局部池化代替静态分块来保持 token 的连续性,避免把一段语义切碎。

实验关键数据

主实验

表1: LongBench 性能对比(Qwen2.5 32B,KV cache \(C_{\max}\)=256)

类别 方法 SingleQA MultiQA Summ. Few-shot Code All
Dense Target 56.01 43.99 25.90 64.06 44.74 47.78
KV SnapKV 52.54 40.21 19.89 61.18 40.12 42.98
KV LAQ++ 55.15 44.14 22.24 63.25 41.19 45.79
KV SpecKV 53.48 43.77 24.02 63.79 44.80 46.06
KV SpecKV-PC 52.60 44.52 24.11 63.38 48.45 46.48

表2: Prompt 压缩对比(\(C_{\max}\)=1024)

方法 SingleQA MultiQA Summ. Few-shot Code All
LLMLingua-2 33.83 26.39 22.85 32.46 43.01 30.90
SpecPrefill 45.94 39.32 23.16 62.04 43.17 42.70
SpecPC 51.23 41.40 23.37 62.26 38.23 43.66

消融实验

  • Lookahead 长度: SpecKV 用最大 token limit 效果最好,SpecPC 用 1 即可
  • Draft 模型大小: 更大的 draft 模型(1.5B vs 0.5B)降低 \(\epsilon\),提升下游分数
  • 重要性分数相关性: Draft (1.5B) 与 target (14B) 的 token 重要性分数高度相关(R² 接近 1)

关键发现

  • SpecKV-PC 级联压缩优于单独 SpecKV,表明 SpecPC 的预过滤是有效的
  • SpecKV 在 64K 上下文时比 LAQ++ 延迟降低 75%,峰值内存节省约 25GB
  • 所有方法性能远超 draft 模型本身,说明该框架对弱 draft 模型也鲁棒
  • RULER 合成 benchmark 上,随上下文增长,基于 lookahead 的方法优势越发明显

亮点与洞察

  • 统一框架将 KV cache dropping 和 prompt 压缩纳入同一 draft-based 体系
  • 理论分析优雅地连接了 compressed sensing(RIP)与注意力近似误差
  • SpecKV 是首个利用 draft model lookahead 做 KV cache 优化的方法
  • 级联压缩的设计思路值得借鉴:先粗后细,每步用最合适的信号

局限与展望

  • Draft 模型引入额外的内存开销(虽然可以 offload 到 CPU)
  • 在非常短的上下文(<4K)下,draft 开销可能不值得
  • 目前仅验证了同系列模型做 draft(如 Qwen2.5-0.5B→32B),跨系列有效性未知
  • Prompt 压缩会重新分配 position ID,可能影响依赖绝对位置的模型

相关工作与启发

  • SnapKV (Li et al., 2024): 基于最后几个 token 的注意力做 KV 压缩,SpecKV 在此基础上引入前瞻
  • LAQ++ (Wang et al., 2025): 也用 lookahead,但需 target 模型完整 KV cache,峰值内存无法降低
  • SpecPrefill (Liu et al., 2025): SpecPC 的前身,窗口大小固定为 1,SpecPC 改进为大窗口+非均匀权重
  • 启发:draft model 除了 speculative decoding 外,在推理优化中有广泛应用前景

评分

  • 新颖性: ⭐⭐⭐⭐ 框架统一性强,SpecKV 首创 draft lookahead 做 KV dropping,但每个单独方法增量有限
  • 实验充分度: ⭐⭐⭐⭐⭐ RULER+LongBench+多模型+效率测量+多模态扩展,非常全面
  • 写作质量: ⭐⭐⭐⭐ 理论分析清晰,但方法组合多导致篇幅略长
  • 价值: ⭐⭐⭐⭐ 长上下文推理优化的实用方案,级联压缩思路有参考价值