KV Cache 是大模型推理的核心瓶颈。在 72B 模型上,一个 4K 上下文的请求需要 8GB 的 KV Cache;在 128K 上下文时,KV Cache 膨胀到 256GB——比模型权重还大。2026 年,KV Cache 优化已成为推理引擎的"第二战场"。本文将系统性解析从 PagedAttention 到 MLA 的全链路优化技术。

一、KV Cache 基础

为什么需要 KV Cache?

Transformer 自回归解码时,每生成一个 token 需要关注之前所有 token 的 Key 和 Value。如果不缓存,每步都要重算所有历史 token 的 K/V,复杂度 O(n²);缓存后,每步只需计算新 token 的 K/V,复杂度 O(n)。

KV Cache 大小计算

KV Cache 大小 = 2 × num_layers × seq_len × num_kv_heads × head_dim × dtype_size

以 Qwen3.5-72B 为例:

参数
num_layers80
num_kv_heads (GQA)8
head_dim128
dtypeFP16 (2 bytes)
单 token KV Cache = 2 × 80 × 8 × 128 × 2 = 327,680 bytes ≈ 320KB
4K 上下文 = 320KB × 4096 = 1.25GB
32K 上下文 = 320KB × 32768 = 10GB
128K 上下文 = 320KB × 131072 = 40GB

关键问题:128K 上下文下,KV Cache(40GB)已接近模型权重大小(72B FP16 = 144GB),成为显存主要瓶颈。

二、注意力机制优化

2.1 MHA → GQA → MQA 演进

机制Query HeadsKV HeadsKV Cache 压缩比代表模型
MHA (Multi-Head Attention)64641xGPT-4, Llama 2
GQA (Grouped-Query Attention)6488xLlama 4, Qwen3.5
MQA (Multi-Query Attention)64164xPaLM, Gemini
MLA (Multi-head Latent Attention)64潜在表示~16xDeepSeek V4

2.2 MLA 详解

DeepSeek V4 的 MLA(Multi-head Latent Attention)是一种全新的注意力机制:

核心思想:不直接缓存 K 和 V,而是缓存一个低维潜在表示,推理时再还原为 K/V。

传统: Cache[K, V] → 大小 = 2 × n_heads × head_dim × seq_len
MLA:  Cache[z]    → 大小 = latent_dim × seq_len (latent_dim << 2 × n_heads × head_dim)

MLA 的数学原理

# 下投影:将高维 K/V 压缩为低维潜在表示
z = W_down_KV @ [K; V]  # latent_dim = 512

# 上投影:推理时从潜在表示恢复 K/V
K = W_up_K @ z
V = W_up_V @ z

# KV Cache 只存储 z

压缩效果对比(72B 等效模型)

机制单 token KV Cache128K 上下文压缩比
MHA320KB40GB1x
GQA (8 heads)40KB5GB8x
MQA5KB0.625GB64x
MLA (latent=512)10KB1.25GB32x

MLA 在压缩比(32x)和质量保持之间取得了最佳平衡——MQA 虽然压缩比更高(64x),但质量损失明显。

三、PagedAttention 详解

3.1 核心原理

PagedAttention 借鉴操作系统的虚拟内存分页机制,将 KV Cache 分为固定大小的 page:

传统: KV Cache 连续分配
  请求A: [████████░░░░░░] 预留空间,浪费 50%
  请求B: [████░░░░░░░░░░] 预留空间,浪费 75%

PagedAttention: KV Cache 分页分配
  Page 0: [AAAA]  Page 1: [AABB]  Page 2: [BBCC]  Page 3: [CCCC]
  按需分配,无预留浪费,利用率 90%+

3.2 显存利用率对比

方案显存利用率最大并发碎片率
连续分配40-60%128
PagedAttention (4K page)92%320<2%
PagedAttention (1K page)96%350<1%

3.3 vLLM 中的 PagedAttention 配置

from vllm import LLM

llm = LLM(
    model="Qwen/Qwen3.5-72B-Instruct",
    tensor_parallel_size=4,
    # PagedAttention 相关
    block_size=16,  # page 大小,默认16
    swap_space=8,   # CPU swap 空间(GB)
    enable_prefix_caching=True,  # 开启前缀缓存
    use_v2_block_manager=True,   # V2 内存管理
)

block_size 选择

  • 16(默认):通用推荐
  • 8:更细粒度,利用率更高但管理开销略增
  • 32:更大 page,适合长序列场景

四、Prefix Caching

4.1 原理

多个请求共享相同前缀时,只需计算一次前缀的 KV Cache,后续请求直接复用:

请求1: [系统prompt][用户问题1] → 计算整个序列
请求2: [系统prompt][用户问题2] → 只计算[用户问题2]部分
请求3: [系统prompt][用户问题3] → 只计算[用户问题3]部分

4.2 效果实测

在客服场景(系统 prompt 2000 token,用户消息平均 100 token):

模式首 token 延迟吞吐量KV Cache 使用
无缓存0.85s2,850 tok/s100%
Prefix Cache0.12s8,500 tok/s15%

首 token 延迟降低 86%——Prefix Caching 是提升首 token 响应速度最有效的技术。

4.3 SGLang RadixAttention

SGLang 的 RadixAttention 是 Prefix Caching 的增强版——使用 Radix Tree 管理所有可能的共享前缀:

RadixAttention Tree:
                  [系统prompt]
                 /            \
        [用户1上下文]      [用户2上下文]
        /     |    \           |
    [回复1] [回复2] [追问1]  [回复1]

在多轮对话场景,RadixAttention 的缓存命中率可达 75%,吞吐量比 vLLM Prefix Cache 再高 40%。

五、KV Cache 量化

5.1 FP16 → INT8 → INT4

精度单token大小128K上下文质量损失
FP16320KB (MHA) / 40KB (GQA)40GB / 5GB基准
INT8160KB / 20KB20GB / 2.5GB0.3%
INT480KB / 10KB10GB / 1.25GB1.5%

5.2 KV Cache 量化配置

# vLLM KV Cache 量化
llm = LLM(
    model="Qwen/Qwen3.5-72B-Instruct",
    kv_cache_dtype="int8",  # 或 "fp8" "int4"
)
KV精度吞吐量首 token 延迟最大并发质量损失
FP162,850 tok/s0.35s1280%
FP83,200 tok/s0.30s1600.1%
INT83,500 tok/s0.28s1800.3%
INT44,100 tok/s0.25s2201.5%

推荐:FP8 是 H100 上的最佳选择(几乎无损),INT8 适合 A100,INT4 仅在显存极度紧张时使用。

六、KV Cache Offloading

6.1 GPU-CPU 分层存储

将不常用的 KV Cache 页面 offload 到 CPU 内存:

llm = LLM(
    model="Qwen/Qwen3.5-72B-Instruct",
    swap_space=16,  # 16GB CPU swap 空间
    cpu_offload_gb=0,  # 不 offload 权重
)
配置GPU 显存CPU 内存最大上下文速度影响
纯 GPU80GB0128K基准
16GB swap80GB16GB256K-15%
32GB swap80GB32GB512K-28%

Offloading 适合需要超长上下文但可以容忍一定延迟的场景。

6.2 Flash Attention 3

Flash Attention 3 通过减少 KV Cache 的 HBM 读写量来提升效率:

传统 Attention: Q × K → HBM → V → HBM → Output
Flash Attention: Q × K × V → SRAM → Output (融合算子)
版本KV Cache 读取速度提升显存节省
标准 Attention基准1.0x基准
Flash Attention 2-70%1.8x-50%
Flash Attention 3-85%2.5x-65%

七、各技术组合效果

72B 模型,128K 上下文

优化组合KV Cache 大小显存占用吞吐量
MHA + 无优化40GB184GB45 tok/s
GQA + PagedAttention5GB149GB145 tok/s
GQA + PagedAttn + Prefix Cache5GB(15%复用)149GB380 tok/s
GQA + PagedAttn + KV INT82.5GB146.5GB165 tok/s
MLA (DeepSeek V4 架构)1.25GB145.25GB195 tok/s
MLA + PagedAttn + FP8 KV0.625GB144.625GB220 tok/s

从 MHA 到 MLA+PagedAttn+FP8,KV Cache 压缩了 64 倍,吞吐提升了 4.9 倍。

八、选型指南

场景推荐方案理由
短上下文(<4K)GQA + PagedAttention基础方案足够
中等上下文(4K-32K)GQA + PagedAttn + Prefix Cache前缀复用效果好
长上下文(32K-128K)GQA + PagedAttn + KV INT8需压缩 KV Cache
超长上下文(128K+)MLA + PagedAttn + FP8 + Swap全链路优化
多轮对话RadixAttention (SGLang)缓存命中率最高
高并发短请求GQA + PagedAttn + KV INT4极致并发

九、总结

KV Cache 优化是大模型推理效率的"隐形战场"。从 MHA 的 40GB 到 MLA+全链路优化的 0.625GB,64 倍的压缩意味着同样的硬件可以服务 64 倍的并发请求。2026 年的 KV Cache 优化已形成清晰的技术栈:MLA 压缩 + PagedAttention 管理 + Prefix Cache 复用 + FP8/INT8 量化。如果只能选一项优化,选 PagedAttention——它是投入产出比最高的单项技术。如果追求极致,全链路优化可以实现 5 倍以上的综合吞吐提升。

加入讨论

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

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