ResKV:重构被省略的注意力贡献以实现固定预算的KV缓存压缩

arXiv cs.CL 论文

摘要

ResKV提出了一种KV缓存压缩方法,将固定预算分为精确的主缓存和紧凑的残差缓存,以重构被省略的注意力贡献,从而在多个骨干网络上提升LongBench和RULER上的性能。

arXiv:2607.29591v1 公告类型:新 摘要:KV缓存压缩对于高效的长上下文推理至关重要。现有的逐出方法会永久丢弃未选中的token,从而消除它们对注意力的总体贡献。基于合并的替代方案保留了更多信息,但可能会扰动本应保持精确的保留键和值。我们观察到,缓存逐出所省略的信息可以表示为softmax注意力分子和分母中的残差统计量。基于这一观察,我们提出了ResKV,它将固定的KV预算划分为精确的主缓存和紧凑的残差缓存,以重构被省略token的贡献。ResKV让主缓存token和残差条目参与相同的softmax归一化,因此残差条目恢复注意力分子和分母的质量,而不是作为事后修正。构建时的验证代理确定每层和每个KV头的残差分配,而解码时的动态门控为单个查询调整残差贡献。在LongBench和RULER上的全面评估,涵盖查询感知和查询无关设置、多个骨干网络、缓存预算以及具有代表性的压缩基线,表明在相同保留KV预算下取得了广泛改进,同时保持了压缩解码的实际效率,包括峰值内存使用和长上下文解码吞吐量。
查看原文
查看缓存全文

缓存时间: 2026/08/03 07:37

# 为固定预算 KV 缓存压缩重构被省略的注意力贡献

###### 摘要

KV 缓存压缩对于高效的长上下文推理至关重要。现有的驱逐(eviction)方法会永久丢弃未选中的 token,从而移除它们对注意力的聚合贡献。基于合并(merging)的替代方案保留了更多信息,但可能会扰动本应保持精确的保留键和值。我们观察到,缓存驱逐所省略的信息可以表示为 softmax 注意力分子和分母中的残差统计量。基于这一观察,我们提出 ResKV,它将固定的 KV 预算划分为一个精确的主缓存(main cache)和一个紧凑的残差缓存(residual cache),后者用于重构被省略 token 的贡献。ResKV 让主缓存 token 和残差条目参与相同的 softmax 归一化,因此残差条目同时恢复注意力的分子和分母质量,而非作为事后修正。构建时验证代理(validation proxy)为每一层和每个 KV 头确定残差分配,而解码时动态门控(dynamic gate)则针对单个查询调整残差贡献。在 LongBench 和 RULER 上的综合评估中,覆盖查询感知和查询无关设置、多种骨干模型、缓存预算以及代表性压缩基线,表明在相同保留 KV 预算下取得了广泛改进,同时保持了压缩解码的实际效率,包括峰值内存使用和长上下文解码吞吐量。

## 引言

长上下文大型语言模型依赖 KV 缓存来避免在自回归生成期间重新计算过去的键和值。虽然这种缓存使解码高效,但它也随上下文长度线性增长,并迅速成为内存使用和内存带宽的主要来源(Kwon 等,[2023](https://arxiv.org/html/2607.29591#bib.bib20);Sheng 等,[2023](https://arxiv.org/html/2607.29591#bib.bib21);Liu 等,2024b [(2024b)](https://arxiv.org/html/2607.29591#bib.bib18);Hooper 等,[2024](https://arxiv.org/html/2607.29591#bib.bib17))。这造成了长上下文推理中的一个核心矛盾:模型应保留足够的历史信息以回答未来的查询,但系统只能负担有限的 KV 槽位。

KV 缓存压缩方法通常通过决定保留哪些 token 来解决这一矛盾。基于驱逐的方法对缓存 token 评分,保留一个子集作为精确的键和值,并永久丢弃其余部分(Liu 等,[2023](https://arxiv.org/html/2607.29591#bib.bib22);Zhang 等,[2023](https://arxiv.org/html/2607.29591#bib.bib3);Adnan 等,[2024](https://arxiv.org/html/2607.29591#bib.bib23);Li 等,[2024](https://arxiv.org/html/2607.29591#bib.bib5);Oren 等,[2024](https://arxiv.org/html/2607.29591#bib.bib4);Tang 等,[2025](https://arxiv.org/html/2607.29591#bib.bib24);Feng 等,[2025](https://arxiv.org/html/2607.29591#bib.bib7);Zhou 等,[2025](https://arxiv.org/html/2607.29591#bib.bib26);Gu 等,[2026](https://arxiv.org/html/2607.29591#bib.bib8))。这种设计高效,但它使缓存压缩成为一个二元决策:每个 token 要么被原样保留,要么连同其值贡献和 softmax 归一化质量一起被移除。

基于合并的方法通过组合相关的缓存状态来保留被驱逐 token 的信息。CaM 将驱逐的状态折叠到保留条目中,KVMerger 使用高斯核权重合并相似的键,KeepKV 利用合并历史补偿注意力分数,SemantiCache 使用成比例的注意力构建语义核心(Zhang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib9);Wang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib10);Tian 等,[2026](https://arxiv.org/html/2607.29591#bib.bib11);Wu 等,[2026](https://arxiv.org/html/2607.29591#bib.bib12))。这些方法表明,被省略的信息在聚合后仍然可以发挥效用。然而,它们将省略的内容折叠到保留或合并的缓存状态中,这可能会扰动保留的记忆,并抹除被折叠 token 的个体身份。

另一条近期工作路线估计被压缩或被省略 token 的贡献。KVSculpt 优化无约束的虚拟 KV 对以保留层注意力行为(Jiang 和 Jin,[2026](https://arxiv.org/html/2607.29591#bib.bib13)),而 RESA 使用低秩 logit 先验和在线聚合器补偿稀疏注意力的输出(Yang 等,[2026](https://arxiv.org/html/2607.29591#bib.bib14))。然而,这些方法没有联合解决如何在相同固定预算下既保留选中的 token 作为精确记忆,又将省略的 token 表示为驻留缓存的条目。

我们转而从注意力计算本身来看待被移除的 token。在注意力分子–分母形式中,被驱逐的一侧是一个残差贡献:一组在主缓存之外 token 上的被省略的 softmax 统计量。如果这些被省略的统计量可以被重构,那么模型就不必在彻底删除它们、将它们折叠进保留 token、或使用合并缓存状态替代它们之间做出选择。因此,关键问题是如何在相同的固定 KV 预算内表示这种残差贡献。

我们提出 ResKV,一种残差 KV 缓存,它将固定的缓存预算分为两部分:一个以精确形式存储选定 token 的主缓存,以及一个用紧凑残差条目表示被省略一侧的残差缓存。主缓存保持高优先级 token 不变,作为精确记忆,而残差缓存则在总缓存槽位数不增加的情况下重新引入被驱逐 token 的结构化信息。这样,ResKV 将缓存表示从纯粹的保留或丢弃决策转变为在相同保留 KV 预算下的主缓存加残差布局。这避免了驱逐的二元删除,不将被省略信息折叠到精确保留的记忆中,并将被省略一侧保留为可以参与注意力的条目。

在解码时,ResKV 通过共享 softmax 残差公式结合精确主缓存和残差缓存。残差条目不是用作事后输出修正;相反,它们与精确主缓存 token 参与相同的 softmax 归一化。这让每个残差条目同时恢复分子质量和分母质量,使其成为近似的注意力参与者,而非外部值更新。ResKV 进一步在两个节点使用自适应残差控制。在缓存构建期间,验证代理仅在残差条目改善保留数据的注意力输出重构时,为每一层和每个 KV 头选择残差预算。在解码期间,动态门控根据主缓存注意力的锐度缩放残差 logits,在注意力分散时允许残差质量,同时保护尖锐的检索峰值。

我们在多个长上下文基准、骨干模型和代表性压缩基线上评估 ResKV。我们同时考虑查询感知和查询无关构建;后者在无法访问未来查询的情况下压缩缓存,因此更符合实际部署。在主要表格中,ResKV 在相同保留 KV 预算下改进了所有 32 个展示的 LongBench 配置和 64 个展示的 RULER 配置中的 63 个,尤其在紧凑缓存预算和需要分布式上下文证据的任务上效果显著,且额外内存开销可忽略不计,在长上下文长度下吞吐量稳定。消融实验进一步证实了验证代理、动态门控和共享 softmax 的作用。

我们的贡献有三点:

- 我们引入 ResKV,一种主缓存加残差的 KV 缓存表示,在固定 KV 预算下考虑被省略的注意力质量,同时保持选中的主缓存条目的精确性。
- 我们为 ResKV 开发了自适应残差控制,包括构建时验证代理和解码时动态门控。
- 我们通过综合实验表明,ResKV 在长上下文基准、缓存预算和构建设置中改进了代表性压缩基线,同时保持了实际效率。

## 相关工作

##### KV 缓存驱逐与预算分配。

KV 缓存驱逐利用注意力稀疏性来保留过去 token 的子集。现有方法保留注意力汇聚点(attention sinks)和近期 token,从累积或观测到的注意力中选择条目,跨层或跨头自适应分配预算,或使用移除引起的扰动作为显著性信号(Xiao 等,[2024](https://arxiv.org/html/2607.29591#bib.bib2);Liu 等,[2023](https://arxiv.org/html/2607.29591#bib.bib22);Zhang 等,[2023](https://arxiv.org/html/2607.29591#bib.bib3);Adnan 等,[2024](https://arxiv.org/html/2607.29591#bib.bib23);Li 等,[2024](https://arxiv.org/html/2607.29591#bib.bib5);Oren 等,[2024](https://arxiv.org/html/2607.29591#bib.bib4);Cai 等,[2025](https://arxiv.org/html/2607.29591#bib.bib6);Tang 等,[2025](https://arxiv.org/html/2607.29591#bib.bib24);Wang 等,[2025](https://arxiv.org/html/2607.29591#bib.bib25);Feng 等,[2025](https://arxiv.org/html/2607.29591#bib.bib7);Zhou 等,[2025](https://arxiv.org/html/2607.29591#bib.bib26);Gu 等,[2026](https://arxiv.org/html/2607.29591#bib.bib8))。

##### 表示被省略的缓存信息。

一些方法超越了永久删除,将被省略的内容编码为紧凑表示。CaM、KVMerger、KeepKV 和 SemantiCache 使用注意力重要性、键相似性、合并历史或语义核心来合并或聚合被驱逐状态(Zhang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib9);Wang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib10);Tian 等,[2026](https://arxiv.org/html/2607.29591#bib.bib11);Wu 等,[2026](https://arxiv.org/html/2607.29591#bib.bib12))。KVSculpt 将压缩区域蒸馏为无约束的虚拟 KV 对以保留注意力行为(Jiang 和 Jin,[2026](https://arxiv.org/html/2607.29591#bib.bib13))。RESA 使用低秩 logit 先验估计被省略的贡献,并在线补偿稀疏注意力输出(Yang 等,[2026](https://arxiv.org/html/2607.29591#bib.bib14))。LESS 使用学习到的循环残差状态增强稀疏注意力,ClusterKV 围绕语义聚类组织缓存访问(Dong 等,[2024](https://arxiv.org/html/2607.29591#bib.bib15);Liu 等,[2025](https://arxiv.org/html/2607.29591#bib.bib16))。

##### 正交的 KV 缓存优化。

KV 缓存量化降低每个条目的精度,而稀疏注意力和检索系统减少每步访问的条目,但不一定丢弃整个缓存(Hooper 等,[2024](https://arxiv.org/html/2607.29591#bib.bib17);Liu 等,2024b [(2024b)](https://arxiv.org/html/2607.29591#bib.bib18);Kang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib27);Sharma 等,[2025](https://arxiv.org/html/2607.29591#bib.bib28);Tang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib19);Liu 等,2024a [(2024a)](https://arxiv.org/html/2607.29591#bib.bib29))。

## 预备知识

### KV 缓存

一个自回归 Transformer(Vaswani 等,[2017](https://arxiv.org/html/2607.29591#bib.bib1))在*预填充(prefill)*阶段处理提示词,然后在*解码(decode)*阶段逐个生成 token。预填充计算并存储提示词的键和值到*KV 缓存*中;每个解码步骤将新 token 的键和值追加到缓存,并使用单个查询 \(q\) 对缓存的矩阵进行注意力计算,

\(o=\mathrm{softmax}\!\big(qK^{\top}/\sqrt{d}\big)\,V,\) \((1)\)\(,其中 \(K,V\in\mathbb{R}^{s\times d}\) 是缓存的键和值。缓存随序列长度增长,在长上下文下主导推理的内存和带宽(Kwon 等,[2023](https://arxiv.org/html/2607.29591#bib.bib20);Sheng 等,[2023](https://arxiv.org/html/2607.29591#bib.bib21);Liu 等,2024b [(2024b)](https://arxiv.org/html/2607.29591#bib.bib18);Hooper 等,[2024](https://arxiv.org/html/2607.29591#bib.bib17))。

### KV 缓存压缩

在压缩比 \(\rho\in(0,1)\) 下,仅保留 \(b=\lfloor s(1-\rho)\rfloor\) 个 KV 槽位。*驱逐*方法对缓存 token 评分,保留大小为 \(b\) 的集合 \(M_{0}\),并丢弃 \(E_{0}=S\setminus M_{0}\),因此解码仅在修剪后的缓存上进行注意力计算,

\(o^{\mathrm{evict}}=\mathrm{softmax}\!\big(qK_{M_{0}}^{\top}/\sqrt{d}\big)\,V_{M_{0}},\) \((2)\) 其中 \(K_{M_{0}},V_{M_{0}}\) 是保留的行(Liu 等,[2023](https://arxiv.org/html/2607.29591#bib.bib22);Zhang 等,[2023](https://arxiv.org/html/2607.29591#bib.bib3);Adnan 等,[2024](https://arxiv.org/html/2607.29591#bib.bib23);Li 等,[2024](https://arxiv.org/html/2607.29591#bib.bib5);Oren 等,[2024](https://arxiv.org/html/2607.29591#bib.bib4);Tang 等,[2025](https://arxiv.org/html/2607.29591#bib.bib24);Gu 等,[2026](https://arxiv.org/html/2607.29591#bib.bib8))。*合并*方法则将驱逐的状态折叠回保留槽位,因此部分被省略的信息保留在同一预算内(Zhang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib9);Wang 等,[2024](https://arxiv.org/html/2607.29591#bib.bib10);Tian 等,[2026](https://arxiv.org/html/2607.29591#bib.bib11))。

## 动机

### 观察

##### 观察 1:硬驱逐丢弃了残差信息。

硬驱逐从被驱逐集合中丢弃所有项,这在注意力分散时是有风险的,因为许多低分 token 仍可能携带大量聚合质量,并且可能在未来解码查询中重新变得有用。为明确这一点,令 \(K\) 和 \(V\) 的行分别为 \(k_{p}\) 和 \(v_{p}\),并定义 \(a_{p}=\langle q,k_{p}\rangle/\sqrt{d}\)。则

\(\displaystyle o=\mathrm{softmax}\!\big(qK^{\top}/\sqrt{d}\big)V=\mathrm{softmax}\!\big([a_{1},\ldots,a_{s}]\big)V\) \((3)\) 
\(\displaystyle=\sum_{p=1}^{s}\frac{e^{a_{p}}}{\sum_{p^{\prime}=1}^{s}e^{a_{p^{\prime}}}}\,v_{p}=\frac{\sum_{p=1}^{s}e^{a_{p}}v_{p}}{\sum_{p^{\prime}=1}^{s}e^{a_{p^{\prime}}}}\)
\(\displaystyle=\frac{\sum_{p\in M_{0}}e^{a_{p}}v_{p}+\sum_{p\in E_{0}}e^{a_{p}}v_{p}}{\sum_{p^{\prime}\in M_{0}}e^{a_{p^{\prime}}}+\sum_{p^{\prime}\in E_{0}}e^{a_{p^{\prime}}}}.\)

在这种形式下,驱逐从分子和分母中删除两个 \(E_{0}\) 求和项,然后仅使用 \(M_{0}\) 上的保留分母重新归一化。因此,即使每个被驱逐 token 的个体注意力很小,它们的聚合分子和归一化质量仍可能从解码输出中缺失。

##### 观察 2:将残差折叠进精确 token 可能会破坏它们。

公式 3([https://arxiv.org/html/2607.29591#Sx4.E3](https://arxiv.org/html/2607.29591#Sx4.E3))还表明,缺失信息是对 \(E_{0}\) 上的一对独立求和。合并避免了直接删除,但它将这些被驱逐项写入保留槽位,改变了保留键和值本身。这对于尖锐检索是不利的:\(M_{0}\) 中本应保持精确记忆的 token 可能被无关的被驱逐 token 扰动。这两种失败模式表明,缺失信息应被单独考虑,而不修改保留缓存。

### 残差

公式 3([https://arxiv.org/html/2607.29591#Sx4.E3](https://arxiv.org/html/2607.29591#Sx4.E3))表明,驱逐造成的信息丢失恰好是一对未归一化的 softmax 统计量。对于 token 子集 \(\mathcal{T}\) 和查询 \(q\),

相似文章

ReFreeKV:迈向无阈值的KV缓存压缩

Hugging Face Daily Papers

ReFreeKV引入了一种无阈值的KV缓存压缩方法,自适应分配预算,消除了对输入特定阈值的需求,同时在各种数据集和模型大小上保持全缓存性能。

RestoreKV:在激进的查询无关KV缓存驱逐下恢复全缓存行为

Hugging Face Daily Papers

RestoreKV 引入了一种学习式恢复机制,作为查询无关 KV 缓存驱逐的补充;它通过一次 LoRA 适配的遍历生成紧凑的上下文条件恢复缓存,从而在激进预算下恢复全缓存行为,并在四个长上下文基准上提升了性能。