Kara: 通过滑动窗口KV缓存压缩实现高效推理LLM服务

arXiv cs.CL 论文

摘要

本文提出了Kara,一种滑动窗口KV缓存压缩方法,用于高效服务推理型大语言模型。该方法通过使用双向注意力和Token2Chunk模块,解决了现有压缩技术中的局限性。该方法被集成到基于vLLM构建的KvLLM推理框架中,在保持性能的同时提高了输出吞吐量。

arXiv:2607.01237v1 公告类型:新 摘要:推理语言模型通常生成长链式思维(CoT),在解码阶段积累大量KV缓存,导致解码延迟高、吞吐量有限。为了解决这些问题,KV缓存压缩成为一种有前景的技术,通过选择性移除不重要的KV对同时保留有用的用于后续解码,从而减少内存开销。然而,我们发现现有KV缓存压缩方法存在两个关键限制:1)它们的阈值触发压缩策略可能只能提供有限的吞吐量提升甚至降低吞吐量,并且可能完全消除序列中某些块的KV对,从而加剧信息丢失。2)它们通常保留孤立的KV对或具有刚性边界的固定大小块,无法在任意token位置保留重要的灵活大小块。为了克服这些限制,我们提出了Kara,一种滑动窗口KV缓存压缩方法,仅对最近生成的上下文执行解码时压缩。Kara利用双向注意力来评分和选择窗口中的信息性KV对。为了灵活保留重要的语义信息,我们设计了一个Token2Chunk模块,将选中的KV对子集扩展成块。此外,我们对Kara进行了适配以支持PagedAttention,并开发了KvLLM,一个基于vLLM构建的推理框架,它减少了KV缓存内存使用并有效提高了输出吞吐量。大量实验表明,所提出的Kara和KvLLM具有一致的性能提升。
查看原文
查看缓存全文

缓存时间: 2026/07/03 05:39

# Kara: 通过滑动窗口KV缓存压缩实现高效推理LLM服务  
来源: https://arxiv.org/html/2607.01237  
韩申 kingsutherszsz48@gmail\.com&吴宇阳¹ Carnegie Mellon University 匹兹堡, PA, USA yuyangwu@andrew\.cmu\.edu  

###### 摘要  

推理语言模型常常生成长链式思维(CoT),从而在解码阶段积累大量KV缓存,导致解码延迟高、吞吐量受限。为解决这些问题,KV缓存压缩作为一种有前景的技术应运而生,它通过选择性移除不重要的KV对,同时保留有用的KV对用于后续解码,来减少内存开销。然而,我们指出现有KV缓存压缩方法存在两个关键限制:1)其阈值触发的压缩策略可能带来有限的吞吐量提升甚至降低吞吐量,并且可能彻底消除序列某些块中的KV对,从而加剧信息损失。2)它们通常要么保留孤立的KV对,要么保留边界固定的固定大小块,未能保留任意标记位置的重要灵活大小块。  

为克服这些限制,我们提出Kara,一种滑动窗口KV缓存压缩方法,该方法仅对最近生成的上下文进行解码时压缩。Kara利用双向注意力对窗口中的信息性KV对进行评分和选择。为实现重要语义信息的灵活保留,我们设计了一个Token2Chunk模块,将部分选中的KV对扩展成块。此外,我们将Kara适配到PagedAttention,并开发了KvLLM——一个基于vLLM的推理框架,该框架降低了KV缓存内存使用并有效提高了输出吞吐量。大量实验表明,所提出的Kara和KvLLM方法具有一致的性能提升。  

## 1 引言  

链式思维推理[Guo等人(2025); Wei等人(2022); Yang等人(2025)]赋予了LLM解决复杂任务的强大能力。然而,推理模型通常生成长轨迹,导致解码过程中KV缓存大幅增长,带来显著的内存开销[Li等人(2024a); Yuan等人(2024b)]。例如,在Qwen3-14B中使用FP16精度缓存128K个标记大约需要20 GB内存。在大批量服务设置中,这一开销尤为突出,因为快速增长的KV缓存增加了解码延迟,并导致请求等待可用内存资源,从而降低了整体输出吞吐量。  

为了解决这些问题,KV缓存压缩[Cai等人(2026); Feng等人(2026b); Li等人(2024b)]作为一种推理时方法,受到了越来越多的关注。通过选择性保留重要的KV对,KV缓存压缩可以在保持性能下降在可接受范围内(例如,性能下降1%以内)的同时减少内存使用。现有工作[Li等人(2024b); Yuan等人(2024a)]已在多种任务上展示了强劲性能,同时仅保留了一小部分KV缓存(例如30%)。早期的压缩方法[Xiao等人(2024); Zhang等人(2025)]依赖于启发式技术,如注意力汇聚点来固定位置的KV对,忽略了不同标记的重要性差异,导致次优性能。最近,研究转向基于分数的KV缓存压缩[Cai等人(2026); Li等人(2024b); Łańcucki等人(2026); Kim等人(2026)],该方法为多头KV对分配重要性分数以决定缓存保留。这些方法通常维护一个近期查询状态的查询缓存,并通过与它们的键状态的注意力来给历史KV对打分。基于分数的压缩方法通常达到最先进的性能,因为它们利用LLM的内部信息来识别关键KV对[Devoto等人(2025)]。  

参见图注  
图1:(a) 不同批量大小下的平均吞吐量,其中批量大小表示预定义的最大解码序列数。我们观察到,随着批量大小的增加,采用SnapKV的vLLM比普通vLLM的吞吐量更低。(b) 实际解码序列数随解码步骤变化。解码步数表示全局解码迭代次数,预定义最大解码序列数为256。我们观察到,采用SnapKV的vLLM始终比普通vLLM维持更高的实际解码序列数,因为节省的内存用于解码更多序列。  
图2:不同压缩次数下剩余的KV对。我们跟踪重复压缩步骤下某些注意力头中不同区域标记的剩余KV对。我们观察到,随着压缩进行,某些区域的语义信息被完全消除。  

尽管这些方法取得了成功,但我们指出现有KV缓存压缩方法存在两个关键限制。  

- • 这些方法主要依赖于阈值触发的压缩策略,这可能同时损害推理性能和推理效率。在阈值触发压缩策略下,KV缓存一旦达到预定义阈值就被压缩回较小的目标长度,然后这种增长-压缩模式重复。虽然在低频或个人部署场景中有效,但这策略可能导致并发-吞吐量反转效应。具体来说,当解码序列数变得与阈值和压缩后缓存长度之间的差距相当时,压缩可能被频繁触发,相关的计算开销甚至会随并发解码序列数的增加而降低输出吞吐量。此外,由于压缩应用于整个KV缓存,序列中先前压缩过的区域可能被再次压缩,从而进一步加剧信息损失并毒化推理质量。为了实证验证这些挑战,我们使用vLLM¹框架[Kwon等人(2023)](我们使用nano-vLLM进行实验,它保留了vLLM的核心机制,包括PagedAttention、连续批处理、张量并行和重新计算,并且便于进一步开发)和代表性的解码时压缩方法(SnapKV [Li等人(2024b)])在MATH-500数据集[Lin等人(2024)]上对蒸馏的Llama-8B模型[Grattafiori等人(2024)]进行实验。如图1和图2所示,采用SnapKV的vLLM的输出吞吐量甚至随着并发解码序列数增加而降低,并且早期标记对应的KV对在重复压缩过程中几乎被完全移除。详细实验设置见附录A。  
- • 这些方法要么保留孤立的KV对,要么保留边界固定的固定大小块,未能保留任意标记位置的重要灵活大小块。主流KV缓存压缩方法基于分数选择孤立的KV对保留,这可能导致语义信息的显著损失。为解决这一问题,一些方法进一步提出保留连续的KV对以形成块。例如,ChunkKV [Liu等人(2026)]将历史KV缓存划分为边界固定的相同长度块。然而,这种保留范式往往过于刚性,无法捕捉分布在序列任意位置的灵活大小KV信息。  

为克服这些限制,我们提出Kara,一种滑动窗口KV缓存压缩方法,该方法仅对最近生成的上下文进行解码时压缩。通过实证分析,我们发现每个KV对所累积的双向注意力得分是衡量其重要性和信息量的有效指标。基于这一观察,Kara使用累积的双向注意力得分作为重要性度量,以识别窗口内的离散候选KV对。为了保留任意位置上的灵活大小连续KV对,我们引入一个简单而有效的Token2Chunk模块。给定候选离散KV对,Token2Chunk将每两个连续候选索引视为一个块的端点,并根据块的宽度和端点KV对的重要性分数过滤块。最后,我们保留候选离散KV对以及选定块内的所有KV对。总之,Kara生成一个组合了孤立KV对和块级KV对的滑动窗口内压缩KV缓存。此外,我们将Kara适配到PagedAttention [Kwon等人(2023)],并开发了KvLLM²(KvLLM基于nano-vLLM框架构建),这是一个基于vLLM的推理框架,配备周期性压缩策略。为了避免解码过程中频繁触发压缩,周期性压缩策略每隔固定解码步骤压缩选定序列的尾部块。大量实验表明,所提出的Kara和KvLLM框架可以在降低KV缓存内存使用的同时提高吞吐量和并发度,并进一步保持推理质量。  

总结起来,我们的主要贡献如下:  

- • 提出Kara,一种KV缓存压缩方法,使用滑动窗口双向注意力识别候选离散KV对,并利用Token2Chunk模块生成包含连续KV对的块。  
- • 将该方法适配到PagedAttention,并设计KvLLM推理框架,配备周期性压缩策略,与现有压缩方法相比能够有效提高吞吐量、并发度和推理质量。  
- • 进行大量实验,包括推理和NIAH(大海捞针)评估,以证明所提方法和推理框架的优越性和有效性。  

## 2 预备知识  

#### 符号表示。  

我们考虑一个自回归Transformer基LLM [Sia等人(2024); Achiam等人(2023)],生成标记序列\(X=(x_1,x_2,\dots,x_S)\),其中\(S\)是序列长度。模型包含\(L\)个Transformer层,每层有\(H\)个注意力头和头维度\(d\)。对于第\(h\)个注意力头,我们将投影后的查询状态、键状态和值状态分别表示为\(Q^{l,h}, K^{l,h}, V^{l,h} \in \mathbb{R}^{S \times d}\)。缩放点积注意力概率定义为:  

\[
P^{l,h} = \text{softmax}\!\left(\frac{Q^{l,h}(K^{l,h})^\top}{\sqrt{d}}\right), \tag{1}
\]

其中\(P^{l,h}_{i,j}\)表示在第\(l\)层和第\(h\)头中从第\(i\)个查询标记到第\(j\)个键标记的注意力概率。为简单起见,我们用\(Q\)和\(K\)表示特定层\(l\)和头\(h\)的查询和键状态。  

#### LLM推理。  

在自回归解码过程中,模型维护一个键缓存\(\mathcal{K}\)和一个值缓存\(\mathcal{V}\),用于存储历史标记对应的键和值状态。与在整个前缀上计算注意力相比,KV缓存大幅降低了二次计算成本并提高了推理效率[LI等人(2025)]。  

在实践中,LLM推理的解码效率通常由TPOT(每个输出标记的时间)来衡量,它表示解码过程中生成一个输出标记所需的平均时间。除了TPOT,吞吐量是另一个重要指标,衡量单位时间内生成的输出标记数量,通常用来反映并发度和延迟。一般来说,更多的解码序列可以实现更高的吞吐量。在长上下文推理场景中,推理开销可能主要由对KV缓存的内存访问主导,从而使推理受限于内存。TPOT和吞吐量的详细公式见附录B。  

为了提高LLM推理的服务效率,像vLLM这样的框架[Kwon等人(2023); Zheng等人(2024)]已被广泛开发,它们旨在最大化内存利用率并在高并发和长上下文生成下维持高效解码。vLLM的核心思想是PagedAttention,它将KV缓存视为一组固定大小的块。每个块存储一段连续的KV对(例如256个标记),内存分配和释放在推理时以块为单位进行管理。然而,在内存受限的设置中,可用内存可能随着解码过程迅速消耗,这可能迫使推理框架减少正在运行的请求数量,从而限制整体输出吞吐量(如图1(b)所示)。  

#### KV缓存压缩。  

KV缓存压缩[Cai等人(2026); Park等人(2026); Ramachandran等人(2026); Feng等人(2026a); Xiao等人(2024)]通过驱逐不重要的KV对来减少LLM推理的内存占用。大多数压缩方法[Cai等人(2026); Li等人(2024b); Qin等人(2025)]为注意力头\(h\)和层\(l\)中标记位置\(i\)的KV对估计一个重要性分数\(A_i^{l,h}\),然后在缓存长度达到预定义阈值时,在缓存预算下选择最重要的KV对。一个代表性的基于分数的压缩范式可以表示为:  

\[
\mathcal{I}^{l,h} = \text{TopK}(\{A_i^{l,h}\}_{i=1}^{C_t}, N), \tag{2}
\]
\[
(\mathcal{K}^{l,h},\mathcal{V}^{l,h}) \leftarrow (\mathcal{K}^{l,h},\mathcal{V}^{l,h})[\mathcal{I}^{l,h}], \quad \text{当 } C_t \geq C_{\max}, \tag{3}
\]

其中\(\mathcal{I}^{l,h}\)是所选KV对的索引,\(N\)是预定义的KV预算,\(C_t\)表示......

相似文章

面向长推理的信息感知KV缓存压缩

arXiv cs.CL

本文提出InfoKV,一种熵感知的KV缓存压缩框架,结合了token级别的预测不确定性和注意力分数,以提高长上下文推理效率。实验表明,它在Llama-3.1、Llama-3.2和DeepSeek-R1上优于现有的基于注意力的方法。

KV Packet: 免重计算的上下文无关KV缓存用于大语言模型

Hugging Face Daily Papers

KV Packet 提出了一种免重计算的缓存复用框架,用于大语言模型。该框架使用可训练的软标记适配器来弥合上下文不连续性,消除了开销,同时在 Llama-3.1 和 Qwen2.5 上的性能与完全重计算基线相当。