【模型后训练与深度推理】10 长上下文记忆与KV-Cache压缩:原理、边界与动态策略

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

长上下文记忆与KV-Cache压缩:原理、边界与动态策略

目标导向:快速掌握 Hierarchical KV-Cache、StreamingLLM、LoRA-FA 三类内存管理策略的核心原理;推导注意力稀疏化后的信息损失上界;建立动态驱逐策略的理论框架。全文以中文成段讲述为主,仅在必要处给出关键公式。


1. 问题背景与核心挑战

1.1 长上下文推理的内存瓶颈

自回归大语言模型(LLM)在解码阶段需缓存历史 token 的 Key 与 Value 张量,即 KV-Cache。其内存占用随序列长度 TTT 线性增长:

MemKV=2⋅nlayer⋅nhead⋅dhead⋅T⋅byteselem \text{Mem}_{\text{KV}} = 2 \cdot n_{\text{layer}} \cdot n_{\text{head}} \cdot d_{\text{head}} \cdot T \cdot \text{bytes}_{\text{elem}} MemKV=2nlayernheaddheadTbyteselem

以 LLaMA2-7B 为例,处理 100K tokens 需超过 50 GB 显存,远超单卡容量。因此,KV-Cache 压缩成为长上下文部署的首要瓶颈。

1.2 “Lost in the Middle” 现象

Liu 等人在 2023 年的研究中指出,LLM 对 prompt 中不同位置信息的利用能力呈 U 型分布:首尾信息利用充分,中段信息严重衰减。该现象被称为 “Lost in the Middle”,其本质与注意力分布的位置偏置相关——模型倾向于将注意力权重分配给序列两端,导致中段 token 的 KV 对在语义传递中被弱化。这一发现为后续基于注意力的动态驱逐策略提供了关键依据:既然中段信息天然易被忽略,驱逐策略应优先保护高注意力权重的 token,而非简单按时间顺序淘汰。


2. 总体架构:三层模型与系统分解

长上下文推理系统的内存管理可抽象为三层架构,每层承担不同的压缩与调度职责。

物理层

信号层

应用层

应用层

信号层

物理层

任务调度

对话管理

注意力计算

缓存驱逐

位置编码

显存分配

量化存储

低秩压缩

物理层负责原始张量的存储优化,包括量化(4-bit/8-bit)、低秩分解与分层内存分配。信号层处理注意力机制中的动态稀疏化、KV 驱逐决策与位置编码重映射。应用层面向多轮对话、流式生成与多任务 LoRA 切换,提供接口封装。三层之间通过标准 KV-Cache 张量接口交互,确保策略可插拔。


3. 知识图谱:核心概念层级

长上下文推理

Hierarchical缓存

流式推理

低秩适配

稀疏化边界

层间预算

头间差异

Token分级

Attention Sink

滑动窗口

无限生成

共享基缓存

低秩残差

多Agent复用

互信息

驱逐损失

容量最大化


4. Hierarchical KV-Cache:分层压缩框架

4.1 分层动机

不同层、不同头对历史 token 的依赖程度存在显著差异。Elhoushi 等人的研究表明:知识型问答任务仅需前几层即可达到高准确率,而复杂推理(数学、代码)需要更深层的参与。这意味着统一的缓存预算分配是次优的,应按层级动态调整保留 token 数量。

4.2 三层分级结构

Hierarchical KV-Cache 在三个维度实施分级:

维度分级依据策略
层间任务类型与层深度浅层多保留,深层少保留(金字塔型)或波浪型
头间注意力集中度高集中头多保留,低集中头少保留
Token 间累积注意力分数保留 Heavy Hitter,驱逐尾部 token

4.3 典型实现:PyramidKV 与 DynamicKV

PyramidKV 采用固定金字塔模式:浅层保留较多 token,深层保留较少。其假设信息随层数增加而浓缩,深层只需关键摘要即可。

DynamicKV 则进一步引入任务自适应机制。通过离线分析不同任务在各层的 token 保留率分布,发现:

  • 合成任务与摘要任务呈金字塔型;
  • 代码完成呈波浪型(中间层保留率出现峰值)。

DynamicKV 在推理前根据任务类型加载对应的层间预算曲线,实现更精细的内存节省。

输入序列

层一预算大

层二预算中

层三预算小

保留高频词

保留实体词

保留逻辑词

保留结论词

压缩后缓存


5. StreamingLLM:Attention Sinks 与流式推理

5.1 核心发现:Attention Sink 现象

Xiao 等人在 2023 年的研究中发现,自回归 Transformer 存在一个惊人的训练涌现现象:无论当前生成位置多远,模型始终将异常高的注意力权重分配给序列最开始的几个 token。这些 token 被称为 Attention Sinks

其成因在于 Softmax 的归一化约束——注意力权重必须和为 1。当序列增长时,模型需要某些"吸收器"来承接多余的注意力质量,而位置 0 附近的 token 因始终可见,在训练中被自发地塑造为稳定的注意力汇点。

5.2 朴素窗口注意力的崩溃

若仅使用滑动窗口(Sliding Window)丢弃旧 token,当序列长度超过窗口大小时,初始 sink token 被驱逐,模型性能立即崩溃。原因在于 Softmax 分母失去了 sink 项的"锚定",注意力分布偏离训练分布,导致输出分布偏移。

5.3 StreamingLLM 双区缓存策略

StreamingLLM 的解决方案极为简洁:将 KV-Cache 划分为两个区域——

  1. Sink 区:固定保留前 kkk 个 token 的 KV(通常 k=4k=4k=4),永不被驱逐;
  2. 窗口区:循环缓存最近 LLL 个 token 的 KV,新 token 覆盖最旧者。

总缓存大小恒定为 k+Lk + Lk+L,与序列长度无关,实现常数内存的无限流式生成

注意力权重的计算变为:

αt,i=exp⁡(st,i)∑j∈sinksexp⁡(st,j)+∑j∈windowexp⁡(st,j) \alpha_{t,i} = \frac{\exp(s_{t,i})}{\sum_{j \in \text{sinks}} \exp(s_{t,j}) + \sum_{j \in \text{window}} \exp(s_{t,j})} αt,i=jsinksexp(st,j)+jwindowexp(st,j)exp(st,i)

其中分母结构完整保留了训练时的分布特征,sink token 吸收多余权重,窗口 token 承载实际语义依赖。

序列输入

前四个Sink

滑动窗口

固定缓存区

循环缓存区

注意力计算

无限生成

新Token到来

写入窗口

覆盖最旧

5.4 位置编码处理

StreamingLLM 使用缓存内位置而非原始文本位置进行 RoPE 编码。即窗口区 token 的位置编号随滑动连续更新,避免位置编号爆炸导致的分布外推问题。


6. LoRA-FA:低秩适配下的缓存共享

6.1 多任务场景的缓存冗余

当多个 LoRA 适配器共享同一基座模型处理相同上下文时,每个适配器独立维护完整 KV-Cache,造成 NNN 倍的内存冗余。观察发现:同一上下文经基座模型产生的激活高度相似,差异主要来自 LoRA 引入的低秩扰动。

6.2 基缓存与低秩残差分离

LoRA-FA(Frozen Attention)将 KV-Cache 解耦为两部分:

  • Base Cache(基缓存):由预训练权重计算,所有任务共享;
  • Adapter Output(适配输出):由 LoRA 权重引入的残差,具有低秩结构。

具体而言,LoRA 的前向传播为 W+BAW + BAW+BA,其中 B∈Rd×rB \in \mathbb{R}^{d \times r}BRd×rA∈Rr×dA \in \mathbb{R}^{r \times d}ARr×d,秩 r≪dr \ll drd。在中间激活层面,可仅存储低维投影后的结果(LR Cache),在需要时通过右乘 BBB 恢复全维贡献。

6.3 Flash-LoRA-Attention

为避免运行时频繁将低秩缓存重构为全维张量,Flash-LoRA-Attention 重新排序计算图:将查询与基缓存的注意力计算、与低秩重构的注意力计算分离调度,并在 FlashAttention 内核层面融合,避免显式物化中间结果。最终内存占用从 N×FullKVN \times \text{FullKV}N×FullKV 降至 SharedBase+N×LR\text{SharedBase} + N \times \text{LR}SharedBase+N×LR,压缩比随任务数 NNN 线性增长。

共享上下文

基座模型

Base缓存

任务一LoRA

低秩缓存一

任务二LoRA

低秩缓存二

注意力融合

输出一

输出二


7. 注意力稀疏化的信息损失上界

7.1 线性高斯抽象模型

为严格分析驱逐损失,将注意力计算抽象为线性高斯通信信道。设查询 qqq 服从高斯分布 q∼N(μQ,ΛQ)q \sim \mathcal{N}(\mu_Q, \Lambda_Q)qN(μQ,ΛQ),每个 KV 对构成一个等效信道,将查询映射到输出空间。驱逐问题转化为:在预算约束 ∣C∣=B|C| = BC=B 下,选择信道子集 CCC 以最大化查询与输出间的互信息

7.2 驱逐损失的 L1 上界

设完整缓存的注意力输出为 ooo,驱逐后缓存的输出为 o^\hat{o}o^。定义驱逐损失为两者间的 L1 距离:

Levict=∥o−o^∥1 \mathcal{L}_{\text{evict}} = \| o - \hat{o} \|_1 Levict=oo^1

对于 Top-K 保留策略,可证明其上界满足:

Levict≤∑i∉C∣αi∣⋅∥vi∥1+∣1−∑j∈Cαj∣⋅max⁡k∈C∥vk∥1 \mathcal{L}_{\text{evict}} \leq \sum_{i \notin C} |\alpha_i| \cdot \| v_i \|_1 + \left| 1 - \sum_{j \in C} \alpha_j \right| \cdot \max_{k \in C} \| v_k \|_1 Levicti/Cαivi1+1jCαjkCmaxvk1

其中 αi\alpha_iαi 为注意力权重,viv_ivi 为对应 value 向量。该上界揭示了两个关键量:被驱逐 token 的注意力权重绝对值之和,以及保留 token 的权重归一化缺口。Top-K 策略通过最大化保留集合的权重和,同时最小化缺口,从而最小化该上界。

7.3 信息瓶颈视角

从信息瓶颈(Information Bottleneck)角度,缓存驱逐的目标函数可写为:

LC=I(q;Y∣ZC) \mathcal{L}_C = I(q; Y \mid Z_C) LC=I(q;YZC)

其中 ZCZ_CZC 为保留的 KV 集合,YYY 为注意力输出。最大化 LC\mathcal{L}_CLC 等价于在固定预算下保留具有最高统计杠杆分数(Leverage Score)的 token。该分数由简化容量矩阵的特征结构决定,与启发式的累积注意力分数不同,它显式考虑了 token 间的方向冗余——即使某 token 注意力分数高,若其 value 方向已被其他保留 token 覆盖,则其边际信息增益低。

7.4 互信息下界与容量最大化

将每个 KV 对视为向量信道,其方向代表对输出空间的贡献,模长编码查询对齐强度。给定预算 BBB,有效容量最大化的条件是保留信道方向尽可能正交。由此导出信息损失上界

I(q;Y)−I(q;Y^)≤∑i∉Cλi+O(ϵ2) I(q; Y) - I(q; \hat{Y}) \leq \sum_{i \notin C} \lambda_i + O(\epsilon^2) I(q;Y)I(q;Y^)i/Cλi+O(ϵ2)

其中 λi\lambda_iλi 为被驱逐 token 对应信道在容量矩阵中的特征值。该式表明,驱逐损失由被移除信道的信息容量之和主导,为动态驱逐提供了可计算的理论边界。


8. 动态驱逐策略

8.1 基于注意力分数的驱逐:H2O 与 SnapKV

H2O(Heavy-Hitter Oracle) 维护每个 token 的累积注意力分数,贪心驱逐分数最低者。其假设是:历史注意力低意味着未来被查询的概率低。

SnapKV 在预填充阶段通过观察最后几层注意力分布,识别关键位置并在全局统一保留,实现任务无关的压缩。

8.2 基于信息容量的驱逐:CapKV

CapKV 不依赖启发式分数,而是直接基于线性高斯模型计算每个 token 的统计杠杆分数:

scorei=∥U⊤ki∥2/∥ki∥2 \text{score}_i = \| U^\top k_i \|^2 / \| k_i \|^2 scorei=Uki2/∥ki2

其中 UUU 为容量矩阵的顶部特征向量集合。该分数衡量 token 在输出空间中的不可压缩贡献,贪心保留高分 token 可确定性逼近最优信息保留目标。

8.3 分层自适应驱逐:HAE

HAE(Hierarchical Adaptive Eviction)针对多模态场景,引入双注意力剪枝(DAP)与动态解码驱逐(DDES):

  • DAP 区分视觉 token 与文本 token 的注意力模式,分别设定驱逐阈值;
  • DDES 在解码阶段根据生成长度自适应扩展历史窗口,短生成时保持小窗口,长生成时渐进扩容。

理论保证:HAE 的误差传播有界,实验表明在 41% KV-Cache 压缩下平均精度损失仅 0.3%。

8.4 自适应预算分配:Ada-KV

Ada-KV 的核心洞察是:不同注意力头的集中度差异巨大。某些头(如检索头)高度聚焦在少数关键 token,而另一些头分布均匀。若在所有头间均匀分配预算,则集中度高的头因预算不足而损失关键信息,集中度低头的预算则被浪费。

Ada-KV 为每层每头独立计算预算,依据注意力熵或有效秩进行分配。理论上可证明:自适应分配的驱逐损失上界始终不劣于均匀分配。

输入序列

注意力计算

分数评估

注意力分数

信息容量

层级特征

H2O驱逐

CapKV驱逐

分层驱逐

保留集合

稀疏注意力

输出生成


9. 协同设计:模块交互与数据流

预填充阶段

全量KV计算

稀疏化评估

StreamingLLM

Hierarchical压缩

LoRA基缓存

Sink区固定

窗口区循环

层间预算分配

头间差异分配

共享基缓存

低秩残差缓存

解码阶段

动态驱逐触发

信息容量重估

缓存重分配

预填充阶段一次性计算全量 KV,并执行初始稀疏化评估。各策略模块根据配置保留不同子集。解码阶段每步生成后,动态驱逐模块触发信息容量重估,若窗口满则执行驱逐与缓存重分配。LoRA-FA 模块在解码阶段仅更新低秩残差,基缓存只读共享。


10. 接口对接图:输入输出定义

输入信号

Token序列

任务类型

LoRA ID

KV管理器

输出信号

压缩后KV

注意力权重

驱逐日志

解码器

可视化

监控模块

接口类型维度说明
Token 序列输入(T,d)(T, d)(T,d)原始文本经嵌入后的张量
任务类型输入标量控制 Hierarchical 预算曲线选择
LoRA ID输入标量决定低秩残差分支
压缩后 KV输出(B,nh,dh)(B, n_h, d_h)(B,nh,dh)BBB 为预算长度,已驱逐无关 token
注意力权重输出(Twin,)(T_{\text{win}},)(Twin,)当前步对缓存内各 token 的注意力分布
驱逐日志输出列表记录被驱逐 token 的位置与信息容量分数

11. 完整三层架构总览图

物理层

信号层

应用层

对话管理

任务路由

LoRA切换

流式输出

注意力计算

稀疏化决策

驱逐策略

位置编码

权重归一化

显存池

量化存储

低秩分解

循环缓冲

分层分配


12. 实验边界与性能验证

12.1 Needle-in-Haystack 验证

在 32K 上下文中插入关键信息(Needle),测试不同压缩策略的检索能力。DynamicKV 在 64 长度预算下仍保持 90% 原始性能,相比 StreamingLLM、PyramidKV 分别提升 57%、37%。这表明分层自适应策略在极端压缩下具有显著优势。

12.2 吞吐量与内存对比

方法内存复杂度每步计算适用场景
Dense AttentionO(T)O(T)O(T)O(T)O(T)O(T)短上下文
Window AttentionO(W)O(W)O(W)O(W)O(W)O(W)中等长度,但会崩溃
StreamingLLMO(k+W)O(k+W)O(k+W)O(k+W)O(k+W)O(k+W)无限流式,常数内存
HierarchicalO(Blayer)O(B_{\text{layer}})O(Blayer)O(Blayer)O(B_{\text{layer}})O(Blayer)任务敏感型长上下文
LoRA-FAO(Base+N⋅r)O(\text{Base} + N \cdot r)O(Base+Nr)O(Base+N⋅r)O(\text{Base} + N \cdot r)O(Base+Nr)多任务共享上下文

StreamingLLM 相比滑动窗口重计算基线可实现高达 22.2 倍加速,同时困惑度接近全量缓存。


13. 结论与展望

本文系统梳理了长上下文 KV-Cache 压缩的三条技术路线:

  1. Hierarchical KV-Cache 利用层间与头间的结构差异,通过任务自适应预算分配实现精细压缩;
  2. StreamingLLM 基于 Attention Sink 现象,以极简的 Sink+Window 双区策略实现常数内存的无限生成;
  3. LoRA-FA 通过基缓存共享与低秩残差分离,解决多任务场景下的缓存冗余问题。

在理论层面,通过线性高斯信道模型将驱逐问题纳入信息瓶颈框架,导出 Top-K 策略的 L1 损失上界与互信息损失上界,为动态驱逐策略提供了可量化的理论依据。

未来方向包括:端到端可学习的稀疏化机制、跨层联合优化驱逐决策,以及面向硬件对齐的原生稀疏注意力架构。


参考文献

  • Xiao, G., Tian, Y., Chen, B., Han, S., & Lewis, M. (2023). Efficient Streaming Language Models with Attention Sinks. arXiv preprint arXiv:2309.17453.
  • Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2023). Lost in the Middle: How Language Models Use Long Contexts. arXiv preprint arXiv:2307.03172.
  • Zhang, Z. et al. (2023). H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models. NeurIPS 36.
  • Li, Y. et al. (2024). SnapKV: LLM Knows What You are Looking for Before Generation. arXiv preprint.
  • Liu, Z. et al. (2024). DynamicKV: Task-Aware Adaptive KV Cache Compression for Long Context LLMs. ACL 2025.
  • Tiwari, R. et al. (2025). Rethinking KV Cache Eviction via a Unified Information-Theoretic Objective. arXiv preprint.
  • Xi, H. et al. (2025). LRAgent: Efficient KV Cache Sharing for Multi-LoRA LLM Agents. arXiv preprint.

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VectorShift

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值