ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从 Query-Agnostic 到 Query-Aware:读 Attention Matching,把 KV 压缩提速两个数量级

从 Query-Agnostic 到 Query-Aware:读 Attention Matching,把 KV 压缩提速两个数量级

从 Query-Agnostic 到 Query-Aware:读 Attention Matching,把 KV 压缩提速两个数量级

一、回到那个显存问题

第一篇里算过,KV Cache 会随上下文长度线性增长。放到真实模型上更直观:一个 7B 模型,KV Cache 约 0.5 MB/token,128K 上下文的缓存光这一项就是 64 GB,再叠加约 14 GB 的模型权重,一张 80 GB 的 A100 直接被占满。

所以问题很清楚:既然历史 K、V 不能不存,那就只能想办法存得少一点、存得小一点。这就是 KV Cache 压缩(compaction)要解决的事。


二、Attention Matching:不训练,直接闭式求解

之前有一类方法(Cartridges)用隐空间端到端训练来生成紧凑的 KV,效果不错,但要训练数小时,没法在线部署。

Attention Matching 换了一条路:不做梯度训练,直接把"压缩"定义成一个最小二乘拟合问题,用代数闭式解算出来。

它想达成的目标是——给定原始 KV(K, V)和一组参考查询 Q,找一组更小的压缩键值(C_k, C_v),使得压缩后产生的注意力行为尽量等于原始行为。这里的"注意力行为"被精确拆成了两个量:

  1. 注意力输出:softmax(QK^T/√d)·V(注意力最终聚合出来的内容);
  2. 注意力质量:softmax 归一化前的配分函数 Σexp(q·k/√d)(这一块的"总量")。

对这两个量的拟合,对应三个闭式步骤:

**图 1说明:**Attention Matching 的整体流程。顶部是优化目标:用更少的键重建同样的注意力行为,具体拆成"注意力输出"和"注意力质量"两个被对齐的量;中间是三个闭式步骤——OMP 选键、NNLS 拟合偏置 β、最小二乘求压缩值 C_v;橙色框是本文认为最容易被忽略的关键点:softmax 归一化导致键变少后分母必然变小,必须用 β 把注意力质量补回来;底部是输出:最高 50× 压缩、秒级完成。本图由作者根据论文方法部分绘制,非论文原图。

第 ② 步是整个方法最容易被人忽略、也最关键的一步。一个直觉:softmax 是归一化的,键一旦从 T 个减到 t 个,分母(配分函数)必然变小。如果只是"删掉一些 token、把剩下的原样保留",压缩块的注意力质量会被系统性低估。β 的作用就是给保留下来的键重新加权,把少掉的那部分质量补回来。这正对应论文 Eq.(2) 的主张——只丢 token 不补偏置,是有代价的。

效果:论文报告最高 50× 压缩,秒级完成,性能逼近 Cartridges,速度提升两个数量级。

论文用一张图同时展示"压得有多狠"和"快了多少":

**图 2说明:**论文 Figure 1。横轴是压缩一个上下文所需的平均耗时(秒,对数刻度,单张 H100),纵轴是压缩后的下游问答准确率(Qwen3-4B,QuALITY 数据集,n=894,固定 50× 压缩比)。AM 系列方法在"速度-质量"上构成 Pareto 前沿:比所有 token 选择类基线更优,且显著快于 Cartridges。需要提醒的是,图中各基线的位置是 50× 这一极限压缩比下的结果,SnapKV 等方法的常规工作区间压缩比更温和,不宜直接解读为"谁更差"。图片来源:Zweiger et al., Fast KV Compaction via Attention Matching, ICML 2026, Figure 1。本文截图仅用于学习分析,未修改图中数据。


三、主流方案横向对比:两条路线各自的短板

把几类主流方案横向摆开,各自有各自的代价:

方案核心做法短板
Cartridges隐空间端到端训练生成紧凑 KV训练几小时,无法在线部署
H2O / PyramidKV按历史(累计)注意力分数淘汰 tokenQuery-Agnostic,不关心当前问题
SnapKV观察窗口投票,选重要 tokenQuery-Aware,但只是 token 级驱逐,prefill 时一次选好
文本 Summarization把长上下文压成文本摘要丢细粒度信息,高压缩率精度暴跌
PagedAttention (vLLM)分页管理,消除碎片只解决碎片,不减少 KV 总量
Attention Matching闭式最小二乘隐空间压缩一次性压缩,参考 query 固定

把它们放在一起看,可以得到一个更准确的图景:Query-Agnostic 仍是主流,但 SnapKV 已经在 Query-Aware 方向迈出了一步——只是这一步还停在 token 级驱逐上。"不同的内容应该保留不同的 token"这件事,SnapKV 的实验恰好给出了正面证据,下一节展开。


四、SnapKV:Query-Aware 已经迈出的一步

H2O 这类方法用"整个历史"的累计注意力分数决定谁留下,和当前问题无关。SnapKV 换了一个信息来源:prompt 末尾的"观察窗口"——也就是包含当前问题的那一小段。

**图 3说明:**SnapKV 的整体工作流(论文 Figure 1)。左侧是几条不同的问题指令;中间是核心机制:用 prompt 末尾的观察窗口(绿色 Obs. window)对前缀(Prefix)历史做"投票与选择"(Voting & Selecting Important Features),再经过聚类与拼接(Clustering & Concatenating Features),把选出的重要特征与完整观察窗口一起组成压缩后的 KV cache(Compressed KVs)。图片来源:Li et al., SnapKV, NeurIPS 2024, Figure 1。本文截图仅用于学习分析,未修改图中内容。

它有三个发现值得单独记下来:

  1. 每个注意力头在生成过程中始终关注特定的 prompt 特征,而这个模式可以从观察窗口稳定获得——所以用窗口投票就能提前知道该保留谁;
  2. 重要的注意力特征会随问题(instruction)变化——这直接说明"一套缓存服务所有问题"存在系统性缺陷;
  3. 只选最高分位置会破坏上下文完整性(论文举的例子:可能只记住电话号码的国家码,其余靠编),所以要配合聚类,把重要位置周围的 token 一起保留。

其中第 2 条发现,论文用了一张非常有说服力的实验图:

**图 4说明:**不同问答对在同一文档上各自选出的重要位置的重叠率(论文 Figure 4,纵轴为 Overlap,横轴为层号,三个数据集为 QMSum / Openreview / SPACE)。可以看到重叠率始终明显低于 1——也就是说,不同的问题确实会关注不同的 token。这是"一套缓存服务所有问题"存在缺陷的直接证据,也是我后面设想的出发点。图片来源:Li et al., SnapKV, NeurIPS 2024, Figure 4。本文截图仅用于学习分析,未修改图中数据。

效果上,SnapKV 在 16K 输入下生成速度提升 3.6 倍、内存效率提升 8.2 倍,并在 16 个长序列数据集上保持与基线相当的性能。

但它离"我想要的方向"还差两步:第一,它做的是 token 级驱逐——被保留的 token 原样保留,没有隐空间压缩;第二,它在 prefill 阶段一次性选好,生成阶段不再调整。


五、我的设想:把 AM 和 SnapKV 各往前推一步

把前面两篇论文摆在一起,能看到一个明显的空档:

  • AM手里有"闭式隐空间压缩"这个强工具,秒级、50×,但它是 Query-Agnostic 的;
  • SnapKV是 Query-Aware 的,但只做 token 级驱逐,且 prefill 一次选好。

那么一个自然的延伸是:用 query 信号驱动 AM 这套闭式压缩——拿到用户真实的提问之后,动态地重新做一次隐空间压缩。

**图 5说明:**左列是现有方案(含 AM)的通用模式:文章 prefill 产生一组固定参考 query,压缩一次,之后所有问题共用同一份压缩缓存;右列是我的初步设想:把当前问题也作为参考 query 的来源,每个问题各做一次闭式压缩,缓存与提问一一对应。底部橙色文字是这一设想必须诚实面对的代价——每个问题都要重算,会带来额外延迟。本图由作者绘制,非论文原图。

  • 问主旨 → 优先保留开头、结尾的 token;
  • 问某个实验细节 → 优先保留对应段落的 token。

来源启发也很直接:AM 提供的秒级闭式工具,让"每来一个问题就重算一次"从不可行变成可以尝试。

但这里有一个必须诚实面对的代价:每来一个新问题就重新做一次最小二乘,会带来额外延迟。这正是我预判会被问到的点——动态压缩的准确率提升,是否值得付出的时间开销?这需要实验来回答,而不是靠直觉。


六、本周实操:我已经在 CPU 上跑通了什么

按"先吃透底层、不急着造新算法"的原则,我做了四件事:

  1. 复现:在纯 CPU 上加载 Qwen3-0.6B + 真实 QuALITY 文章,跑通 AM-OMP 的 50× 压缩链路。615 个 token 压到 12 个,显存(元素数)缩减 94.2%,压缩耗时约 5.7 秒。
  2. 读代码:把 OMP 选键、NNLS 拟合 β、最小二乘求 C_v 三个模块逐一拆开,用合成数据验证了每步的数学含义和数值一致性。
  3. 观察现象:注意力越分散的 head 越难压缩——承载注意力质量的主导 token 越多,重建质量越差(余弦相似度从约 0.81 降到 0.54)。
  4. 基线对照:在 50× 预算下,AM 的注意力输出重建余弦相似度约 0.70,而 H2O 式驱逐 / 截断 / 随机只有约 0.13~0.20;更重要的是注意力质量(配分函数)相对误差,AM 约 0.27~0.54,不带 β 的驱逐高达 0.97~0.98——几乎丢光。这组数字直观说明了"闭式求解 + β 补偿"到底好在哪。

这些只是合成数据和小模型上的初步观察,不能当作最终结论,但已经足够支撑下一步的实验设计。


七、下一步:用实验回答"动态压缩到底值不值"

接下来的核心实验只有一个问题:在相同的缓存预算下,Query-Aware(用当前问题动态压缩)是否比 Query-Agnostic(一次性压缩)带来更好的任务表现?同时记录它额外付出多少时间。


参考资料

[1] Zweiger et al., Fast KV Compaction via Attention Matching, ICML 2026. arXiv:2602.16284.

[2] Li et al., SnapKV: LLM Knows What You are Looking for Before Generation, NeurIPS 2024. arXiv:2404.14469.

[3] Kwon et al., Efficient Memory Management for Large Language Model Serving with PagedAttention, SOSP 2023.

推荐标签

大语言模型LLMKV CacheAttention Matching闭式求解Query-Aware模型推理
![请添加图片描述](https://i-blog.csdnimg.cn/direct/f19e00685f78429da911b3e32e51e4ce.png

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进