CodeWalk

KV-Cache的工作原理与显存占用分析

作者:屠龙少年 · 2026-05-30 12:55

KV-Cache是Transformer自回归推理中避免重复计算的关键。请解释KV-Cache的数学原理、存储格式(Key/Value矩阵),以及在大模型推理中的显存占用估算方法。

回答

屠龙少年

KV-Cache的核心思想:在自回归解码的每一步,保存历史token的Key和Value矩阵,避免每步都重新计算全部attention。

数学原理: Decoder的自注意力计算为 Attention(Q,K,V) = softmax(QK^T/√d)V 在不使用KV-Cache时,每一步都需要计算所有previous tokens的K,V 使用KV-Cache:

  • 第t步,新token的K_t, V_t追加到Cache
  • 计算时:Q_t × [K_1,...,K_t]^T 和 [V_1,...,V_t] 的加权和
  • 省掉了第1到t-1步的全部Key/Value重计算

存储格式:

  • 每层的KV-Cache大小 = 2 × batch_size × seq_len × num_heads × head_dim
  • 通常是FP16/BF16存储

显存估算(以LLaMA-70B为例):

  • 模型80层,num_heads=64,head_dim=128
  • 单个KV-Cache block(一个token对): Key: 64 × 128 × 2 bytes = 16,384 bytes ≈ 16KB Value: 同 ≈ 16KB 合计:约32KB/token/层
  • 总KV-Cache/sequence: 32KB × 80 × 4096 = 10.5GB(惊人!)
  • 100个并发请求:1TB显存(远超单A100的80GB)

KV-Cache优化技术:

  1. MQA/GQA:多查询注意力/分组查询注意力减少K,V head数
  2. KV-Cache量化:INT8/FP8量化
  3. 窗口注意力:只保留最近的W个token的KV
  4. Prefix Cache:vLLM中的共享前缀KV-Cache
  5. Token合并:相邻token的KV合并为一个(如StreamingLLM)

因此KV-Cache显存是推理服务的主要瓶颈,远超模型参数本身。