音乐
暂未播放
KV Cache 与优化技术

大家好,我是芯缘,是 Datawhale 社区发起的 2026 年 8 月“llm-algo-leetcode 推理优化方向”组队学习活动的运营助教。本文记录了我学习 Task 1-2 KV Cache 的笔记。
KV Cache 的逻辑数据量为:
KV Cache 字节数=2×L×B×S×Hkv×D×e,S 表示缓存的序列长度,e 表示每个缓存标量占用的字节数:FP32 为 4,FP16/BF16 为 2,FP8/INT8 为 1。
注意力架构(Attention Architectures)#
MHA(Multi-Head Attention)是基线架构,MQA(Multi-Query Attention)、GQA(Grouped-Query Attention)和MLA(Multi-Head Latent Attention)以不同方式减少每个 Token 需要存储的表示。
表 1. 不同注意力架构及其 KV Cache 表示。
| 架构 | 缓存表示 | 相对于 MHA 的大小 |
|---|---|---|
| MHA | Hkv=Hq | 1 |
| MQA | Hkv=1 | 1/Hq |
| GQA | 1<Hkv<Hq | Hkv/Hq |
| MLA | 压缩后的 KV 潜在状态和解耦的 RoPE Key | 取决于模型 |

图 1. 条纹部分是在推理期间缓存的内容。MLA 存储压缩后的潜在 KV 表示,而不是为每个 Head 展开 Key 和 Value。来源:DeepSeek-V2, Figure 3。
表 2. 每条序列的 FP16/BF16 KV Cache 逻辑大小。
| 架构 | KV Head 数量 | 4,096 个 Token | 131,072 个 Token |
|---|---|---|---|
| MHA | 32 | 2.00 GiB | 64.00 GiB |
| GQA | 8 | 0.50 GiB | 16.00 GiB |
| MQA | 1 | 0.06 GiB | 2.00 GiB |
这些数值不包括内存分配器填充(Allocator Padding)、Block Table、内存对齐(Alignment)和量化元数据(Quantization Metadata)。
KV Cache 优化技术#
多头潜在注意力(Multi-Head Latent Attention,MLA)#
MLA 优化的是每个 Token 存储的表示。它使用低秩联合压缩(Low-Rank Joint Compression),缓存紧凑的潜在状态和较小的位置分量,而不是为每个 Head 展开 K/V 状态。这会直接减少缓存的逻辑数据量,但需要采用 MLA 的模型和兼容的 Kernel。
滑动窗口注意力(Sliding-Window Attention)#
滑动窗口注意力优化的是保留的 Token 数量。每一层只保留固定大小的近期窗口,因此窗口填满后,缓存便不再增长。代价是被淘汰的 Token 无法再被直接关注。
StreamingLLM#
StreamingLLM 优化的是连续流式场景下的缓存淘汰策略。它保留少量起始的注意力汇聚 Token(Attention Sink Token)和一个近期 Token 窗口,在限制缓存大小的同时,比普通滑动窗口更不容易快速破坏模型的稳定性。被淘汰的中间 Token 仍然无法使用。
选择性 Token 淘汰与 KV Cache 剪枝#
选择性淘汰优化的是保留哪些 Token。它不只保留固定窗口,而是根据注意力计算得到的重要性或其他选择标准,在固定缓存预算下保留有用的较早 Token,并丢弃不太重要的条目。这是一种近似方法,因为某个 Token 一旦被淘汰,即使之后变得重要也无法恢复。
PagedAttention#
PagedAttention 优化的是物理内存分配。它将 KV Cache 划分为固定大小的 Block,并把逻辑上连续的 Token Block 映射到物理上不连续的 GPU 内存块,从而减少内存碎片和过度预留。它能提高内存利用率,但不会减少 K/V 本身的逻辑数据量。
前缀缓存(Prefix Caching)#
前缀缓存优化的是跨请求复用。具有相同前缀的请求可以复用之前已经计算的 K/V Block,从而减少重复的预填充(Prefill)计算和重复的前缀存储。它不会降低新 Token 的解码成本。
KV Cache 量化(KV Cache Quantization)#
KV Cache 量化优化的是存储精度。低比特格式能够减少每个 K/V 元素占用的字节数,代价是需要量化元数据,可能造成精度损失,并会引入量化或反量化开销。
CPU 卸载(CPU Offloading)#
CPU 卸载优化的是内存放置位置。它将一部分 KV Cache 从 GPU 显存移动到 CPU DRAM,在不改变缓存逻辑总量的情况下减少 GPU 驻留内存。主要代价是主机与设备之间的数据传输,以及由此可能带来的延迟。
后续#
上述每个优化方向都值得单独展开。以后将分别介绍 MLA、滑动窗口注意力、StreamingLLM、选择性 Token 淘汰与剪枝、PagedAttention、前缀缓存、KV Cache 量化和 CPU 卸载,包括各自的工作机制、实现约束和权衡。
参考资料#
- Datawhale: Task 1-2 KV Cache and Memory Growth
- Datawhale Official Website
- Datawhale Official Logo Asset
- Attention Is All You Need
- Fast Transformer Decoding: Multi-Query Attention
- GQA: Training Generalized Multi-Query Transformer Models
- DeepSeek-V2: Multi-Head Latent Attention
- Mistral 7B: Grouped-Query and Sliding-Window Attention
- StreamingLLM: Efficient Streaming Language Models with Attention Sinks
- H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models
- Efficient Memory Management with PagedAttention
- vLLM Automatic Prefix Caching
- Hugging Face Cache Strategies
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分内容可能已过时
评论区
分享你的想法,与大家交流讨论
音乐
暂未播放



