引言

KV Cache(键值缓存)是大模型推理中显存占用的最大头。一个512K上下文的推理,KV Cache可能占用数十GB显存。2026年,KV Cache优化技术已经非常成熟,从vLLM的PagedAttention到DeepSeek的MLA,各种创新层出不穷。本文将全面解析KV Cache的优化技术,帮助开发者深入理解并合理选择。

KV Cache基础

为什么需要KV Cache?

Transformer的自注意力机制:

Attention(Q, K, V) = softmax(QK^T / √d_k) × V

问题:生成第t个token时,需要K_1, K_2, …, K_{t-1}和V_1, …, V_{t-1}。如果每次都重新计算,复杂度O(n²)。

解决:缓存历史K和V → KV Cache

KV Cache的显存占用

对于Llama 4 70B(32层,hidden_size=8192):

上下文长度FP16 KV CacheINT8 KV CacheINT4 KV Cache
2K512MB256MB128MB
8K2GB1GB512MB
32K8GB4GB2GB
128K32GB16GB8GB
512K128GB64GB32GB

关键观察:上下文长度每增加4倍,KV Cache增大4倍。

优化技术全景

技术分类

技术路线核心思路压缩比质量损失
注意力优化减少KV Cache占用--
├─ Multi-Query Attention (MQA)多查询共享KV1/n_heads0%
├─ Grouped-Query Attention (GQA)分组共享KV1/group_size<0.5%
└─ Multi-Head Latent Attention (MLA)低维潜在表示8-10×<1%
分页管理动态内存管理--
├─ PagedAttention分页管理KV Cache减少碎片0%
└─ RadixAttention前缀树缓存复用公共前缀0%
量化压缩降低精度--
├─ INT8量化8-bit量化<1%
├─ INT4量化4-bit量化2-3%
└─ FP8量化8-bit浮点<0.5%
稀疏化只保留重要token--
├─ StreamingLLM保留初始+近期token可变1-3%
├─ H2O动态淘汰低注意力token2-4×2-5%
└─ ScissorHands基于重要性的稀疏化2-3×2-4%

注意力优化

1. Multi-Query Attention (MQA)

原理:所有查询头共享同一组KV。

标准MHA: #heads组独立的K和V
MQA: 1组K和V,所有heads共享

效果

  • KV Cache压缩比 = 1 / #heads(如32层 → 压缩32倍)
  • 质量损失:几乎为0(Llama 2验证了这一点)

代表模型:PaaS-BloonV3、Falcon

2. Grouped-Query Attention (GQA)

原理:折衷方案,将heads分组,每组共享KV。

标准MHA: 32 heads → 32组KV
GQA: 32 heads → 8组KV(每组4个heads)
MQA: 32 heads → 1组KV

效果(Llama 4 70B,8组):

  • KV Cache压缩比 = 4×
  • 质量损失:<0.5%
  • 推理速度:提升1.3-1.5×

代表模型:Llama 4系列、Qwen3.5系列

3. Multi-Head Latent Attention (MLA)

原理(DeepSeek创新):将KV Cache压缩到低维潜在空间。

标准: KV Cache = [K_1, K_2, ..., K_n]  # 高维
MLA: 存储低维潜在向量c_i ≈ f(K_i, V_i)
     推理时从c_i重构K_i和V_i

MLA 2.0效果(DeepSeek V4):

  • KV Cache压缩比 = 8-10×
  • 质量损失:<1%
  • 长序列推理速度提升28%

技术细节

维度标准MHAMLA 1.0MLA 2.0
KV Cache大小(256K)64GB9.6GB6.4GB
信息损失0%~3%~1.5%
重构开销0%+8%延迟+5%延迟

MLA vs GQA

维度MLA 2.0GQA (8组)
压缩比10×
质量损失1.5%0.5%
实现复杂度
硬件友好度

分页管理优化

1. PagedAttention(vLLM)

原理:类比操作系统的虚拟内存分页,将KV Cache分页管理。

传统: 为每个请求预分配连续显存 → 碎片多、利用率低
PagedAttention: KV Cache分块(如16tokens/块),动态分配 → 碎片少、利用率高

效果

  • 显存利用率从60%提升到90%
  • 支持的并发请求数提升2-3×
  • 质量损失:0%

实测(Llama 4 70B,32路并发):

方案峰值显存支持的最大上下文并发请求数
连续分配128GB8K32
PagedAttention105GB (-18%)32K32

2. RadixAttention(SGLang)

原理:利用前缀树(radix tree)共享和复用KV Cache。

请求1: [system_prompt] + [user_q1] → 生成answer_1
请求2: [system_prompt] + [user_q2] → 生成answer_2

传统: 两个请求的system_prompt分别存储 → 浪费
RadixAttention: system_prompt只存储一次,两个请求共享 → 节省

效果(多轮对话场景):

  • KV Cache复用率:60-80%
  • 首token延迟降低:50-70%
  • 显存占用降低:40-60%

实测(共享2000 tokens system prompt,100并发):

方案总KV Cache首token延迟显存节省
无前缀缓存200GB1.8s0%
RadixAttention45GB0.5s77%

量化压缩

KV Cache专用量化

不同于权重量化,KV Cache量化有特殊要求:

  1. 在线量化:推理时动态量化,无法离线准备
  2. 敏感度不均:不同层、不同head的KV对量化敏感度不同
  3. 通道维度:通常在通道维度量化

INT8 KV Cache量化

方法:对K和V分别进行INT8量化。

# 伪代码
def int8_kv_quantize(K, V):
    # K: [batch, num_heads, seq_len, head_dim]
    K_scales = K.abs().max(dim=-1, keepdim=True) / 127
    V_scales = V.abs().max(dim=-1, keepdim=True) / 127
    
    K_int8 = (K / K_scales).round().clip(-128, 127).to(torch.int8)
    V_int8 = (V / V_scales).round().clip(-128, 127).to(torch.int8)
    
    return K_int8, V_int8, K_scales, V_scales

效果

  • 压缩比:2×
  • 质量损失:<1%
  • 推理速度:基本无影响(现代GPU的INT8计算快)

INT4 KV Cache量化

方法:更激进的4-bit量化,通常用GPTQ或AWQ变种。

效果

  • 压缩比:4×
  • 质量损失:2-3%
  • 推理速度:可能略降(INT4计算不如INT8成熟)

实测(Qwen3.5 72B,MMLU基准):

KV精度MMLU得分KV Cache大小(128K)
FP1678.5%36GB
INT878.3% (-0.2%)18GB
INT476.8% (-1.7%)9GB
NF477.5% (-1.0%)9GB

推荐:INT8 KV Cache量化——最佳平衡点。

稀疏化技术

1. StreamingLLM

原理:保留初始token(“注意力汇”)和近期token,丢弃中间token。

K,V Cache = [初始token] + [近期token]
           = [重要上下文] + [当前对话]

效果

  • 可处理无限长上下文(固定大小KV Cache)
  • 质量损失:1-3%(取决于保留的token数)
  • 适用场景:对话(近期内容最重要)

2. H2O (Heavy-Hitter Oracle)

原理:动态识别并保留高注意力分数的token。

每个token对当前生成的贡献不同 → 保留高贡献token,淘汰低贡献token

效果

  • 压缩比:2-4×
  • 质量损失:2-5%
  • 计算开销:需要计算注意力分数(额外~5%开销)

3. ScissorHands

原理:基于token重要性的稀疏化,重要性通过自我注意力评估。

效果

  • 压缩比:2-3×
  • 质量损失:2-4%
  • 特点:无需额外模型,端到端可微

综合优化方案

方案1:GQA + PagedAttention + INT8量化

适用:通用场景,平衡质量和效率。

技术压缩比质量损失
GQA (8组)0.5%
PagedAttention碎片减少0%
INT8 KV量化0.5%
综合~1%

代表:Llama 4 + vLLM

方案2:MLA + RadixAttention + INT8量化

适用:长上下文场景,追求极致效率。

技术压缩比质量损失
MLA 2.010×1.5%
RadixAttention前缀共享0%
INT8 KV量化0.5%
综合20×~2%

代表:DeepSeek V4 + SGLang

方案3:GQA + StreamingLLM + INT4量化

适用:无限上下文场景,可以容忍一定质量损失。

技术压缩比质量损失
GQA (8组)0.5%
StreamingLLM可变1-3%
INT4 KV量化2%
综合64×~5%

代表:部署在资源极度受限的边缘设备。

选型决策树

开始
上下文长度通常<32K?
  ├─ 是 → 需要极致效率?
  │        ├─ 是 → MLA + RadixAttention(方案2)
  │        └─ 否 → GQA + PagedAttention(方案1)
  └─ 否 ↓
      可以容忍质量损失?
        ├─ 是 → StreamingLLM + INT4(方案3)
        └─ 否 → MLA + INT8量化(方案2变种)

未来趋势

  1. 2-bit KV Cache量化:研究界已在探索,质量损失仍大
  2. 动态精度:根据token重要性动态选择量化精度
  3. 跨请求KV共享:不仅共享前缀,还共享语义相似的上下文
  4. 硬件加速:下一代GPU可能原生支持MLA等创新
  5. 训练时优化:训练模型时考虑KV Cache效率(如MLA训练)

结语

KV Cache优化是2026年大模型推理优化的核心战场之一。从注意力架构创新(GQA、MLA)到内存管理优化(PagedAttention、RadixAttention),再到量化压缩(INT8/INT4),各种技术百花齐放。对于开发者来说,关键是理解自己的场景需求——长上下文、高并发、低延迟还是低成本——然后选择最适合的技术组合。未来,随着模型架构和硬件的进步,KV Cache将不再是推理的瓶颈,让更长、更快、更便宜的AI成为现实。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。