☆ 保存 压缩潜在 KV 缓存 — 为什么要把 KV 存成潜在表示
05/08/2026
压缩潜在 KV 缓存是在 Transformer 推理中,不再持续保存完整形式的 Key-Value Cache,而是将其压缩为更小的潜在表示进行存储的一种技术。它的目标是在长上下文推理中,降低 KV 缓存增长带来的显存占用和内存带宽瓶颈。
**简单来说:**模型不是把整段对话原封不动地随身携带,而是把回答所需的关键线索整理成一份压缩笔记。笔记压缩得好,记忆负担就会轻很多;但如果压缩过度,重要线索也可能被丢掉。
模型不再持续保存原始 KV,而是将其压缩为潜在表示,从而降低长上下文推理成本。
工作原理
-
KV 缓存的增长结构
- 在自回归生成中,Transformer 会把前面 token 的 Key 和 Value 存入 KV 缓存,以避免在每个解码步骤中重复计算。
- 这个缓存的大小会随着层数、注意力头数、token 长度以及 head dimension 增长。
- 在长上下文推理中,瓶颈往往不只是计算量本身,而是每一步需要从内存中读取和写入多少 KV 数据。
-
\[ \text{KV Cache Size} \propto 2 \times L \times H \times T \times d \]
\[ \text{Compressed Size} \propto L \times T \times r \]
L 表示层数,H 表示注意力头数,T 表示 token 长度,d 表示 head dimension,r 表示 latent dimension。如果 r 小于原始 KV 维度,所需存储量就会下降。
-
存储潜在表示
- 普通 KV 缓存会在每一层中,以接近原始注意力表示的形式存储 Key 和 Value。
- 压缩潜在 KV 缓存会先把这些信息转换为更小的 latent vector,再进行存储。
- 关键区别不只是“把 KV 变小”,而是把注意力所需的信息保留在潜在空间中。
-
\[ Z = [K,V]W_c \]
\[ [K,V] \approx ZW_d \]
这是一个概念性表达。Wc 将原始 KV 压缩为潜在变量 Z,Wd 则在需要时重建 KV 信息,或将其转换为适合注意力计算的形式。
-
压缩注意力计算
- 模型先存储压缩后的 Z,然后在注意力计算时将其转换为与 Query 匹配的形式。
- 有些方法会从 Z 中重建 Key 和 Value,再按照传统注意力方式进行计算。
- 更激进的方法会减少重建步骤,直接在潜在空间中计算注意力所需的交互关系。
-
与 MQA、GQA 的区别
- Multi-Query Attention (MQA) 通过让多个 Query head 共享同一个 Key-Value head 来减少 KV 缓存。
- Grouped-Query Attention (GQA) 将 head 分组,以比 MQA 更平缓的方式减少 KV head 数量。
- 压缩潜在 KV 缓存的不同之处在于,它压缩的是存储表示本身,而不仅仅是共享 KV head。
-
降低内存带宽压力
- KV 缓存变小后,GPU 显存占用会下降。
- 同时,每个 decoding step 需要读取的 KV 数据量也会减少。
- 因此,在长上下文 LLM 中,它会直接影响 batch size、吞吐量和响应延迟。
-
压缩与准确性的权衡
- 如果 latent dimension 设得太小,重要的 token 信息可能会丢失。
- 尤其是 rare token、long-range dependency 和位置信息没有被很好保留时,回答质量可能下降。
- 因此,压缩率不能只看内存节省,还需要结合任务性能一起调整。
意义与局限
压缩潜在 KV 缓存是长上下文 LLM 推理中的一类重要优化,用来缓解 KV 缓存增长带来的显存和内存带宽瓶颈。MQA 和 GQA 主要减少 KV head 的数量,而这一技术则把被存储的 KV 表示本身转换到更小的潜在空间中。因此,在长上下文、大 batch 以及 GPU 显存受限的场景下,它有可能显著提升效率。不过,如果压缩后的表示无法充分保留注意力计算所需的信息,输出质量就会下降;同时,压缩、重建或转换步骤也会让系统设计更加复杂。最终的核心问题是:“能否用足够小的 latent representation,仍然保留原始 attention 信息?”
建议先读 (2/2)
接下来推荐阅读 (5/19)
+5
- Draft Model(草稿模型)— 用草稿生成加速 LLM 推理
- KV Cache Bottleneck — 为什么 LLM 推理最终受限于速度与显存
- Memory-bound(内存受限)——为什么 LLM 性能会卡在数据供给上
- Streaming Inference —— 通过逐 Token 推理降低 LLM 响应延迟
- Layer-wise Cache — Transformer 为什么要按层保存 KV
- Object Removal — 为什么这么难?一次看懂 Inpainting、GAN 与 Diffusion 的区别
- Compute-Bound — 为什么 AI 系统会出现计算瓶颈
- Memory-Bound Attention — 为什么长 Context 中 KV Cache 读取会成为瓶颈
- Speculative Decoding — 为什么可以用小模型加速 LLM 推理
- Memory Bandwidth — 为什么 LLM 的性能会受内存速度限制
- All-to-All Communication — MoE Expert Parallelism 中的通信瓶颈原理
- Inference Bottleneck(顺序生成瓶颈)— 为什么 LLM 推理难以并行化
- IO-aware Tiling — FlashAttention 如何减少 HBM 数据搬运
- IO Bottleneck(输入输出瓶颈)——为什么 LLM 的性能上限常常由数据搬运决定
- HBM(High Bandwidth Memory)——为什么 AI GPU 的瓶颈常常卡在内存
- FLOPs 与 FLOPS——模型计算量和 GPU 运算性能到底有什么区别
- Analog-to-Digital Conversion (ADC) — 现实信号如何转化为 AI 可处理的数据输入
- Criminisi Algorithm — 为什么从边界开始修复更自然?
- Symmetric Tree (Oblivious Tree) — 为什么 CatBoost 使用对称树?
同一主题文章 (0/0)
该单元暂时没有其他文章。
相关概念 (0/0)
暂时没有相关概念文章。
📍 这个概念在 AI 学习地图中的位置
查看这个概念在整个 AI Universe 中的位置。
📍 AI Universe 中的当前位置
☰
重置 显示已完成 · 需要登录 加载中…
🌌 AI Universe
‹
›
⭐ 概念
请选择一个节点。