KV Cache 与优化技术

1124 字
6 分钟
KV Cache 与优化技术

Datawhale
Datawhale

大家好,我是芯缘,是 Datawhale 社区发起的 2026 年 8 月“llm-algo-leetcode 推理优化方向”组队学习活动的运营助教。本文记录了我学习 Task 1-2 KV Cache 的笔记。

KV Cache 的逻辑数据量为:

KV Cache 字节数=2×L×B×S×Hkv×D×e,\text{KV Cache 字节数} = 2 \times L \times B \times S \times H_{kv} \times D \times e,

SS 表示缓存的序列长度,ee 表示每个缓存标量占用的字节数:FP32 为 44,FP16/BF16 为 22,FP8/INT8 为 11

注意力架构(Attention Architectures)#

MHA(Multi-Head Attention)是基线架构,MQA(Multi-Query Attention)、GQA(Grouped-Query Attention)和MLA(Multi-Head Latent Attention)以不同方式减少每个 Token 需要存储的表示。

表 1. 不同注意力架构及其 KV Cache 表示。

架构缓存表示相对于 MHA 的大小
MHAHkv=HqH_{kv}=H_q11
MQAHkv=1H_{kv}=11/Hq1/H_q
GQA1<Hkv<Hq1 < H_{kv} < H_qHkv/HqH_{kv}/H_q
MLA压缩后的 KV 潜在状态和解耦的 RoPE Key取决于模型

MHA、GQA、MQA 和 MLA 对比
MHA、GQA、MQA 和 MLA 对比

图 1. 条纹部分是在推理期间缓存的内容。MLA 存储压缩后的潜在 KV 表示,而不是为每个 Head 展开 Key 和 Value。来源:DeepSeek-V2, Figure 3

表 2. 每条序列的 FP16/BF16 KV Cache 逻辑大小。

架构KV Head 数量4,096 个 Token131,072 个 Token
MHA322.00 GiB64.00 GiB
GQA80.50 GiB16.00 GiB
MQA10.06 GiB2.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 卸载,包括各自的工作机制、实现约束和权衡。

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录