KV-Cache的工作原理与显存占用分析
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优化技术:
- MQA/GQA:多查询注意力/分组查询注意力减少K,V head数
- KV-Cache量化:INT8/FP8量化
- 窗口注意力:只保留最近的W个token的KV
- Prefix Cache:vLLM中的共享前缀KV-Cache
- Token合并:相邻token的KV合并为一个(如StreamingLLM)
因此KV-Cache显存是推理服务的主要瓶颈,远超模型参数本身。