张芷铭的个人博客

KV Cache 通过缓存历史 K、V 矩阵,将 LLM 自回归推理复杂度从 $O(n^2)$ 降至 $O(n)$,是推理优化的核心技术。

核心原理

工作流程

阶段操作
Prefill计算所有 Prompt Token 的 K、V 并缓存
Decode仅计算新 Token 的 K、V,追加到缓存

复杂度对比

场景无 KV Cache有 KV Cache
计算复杂度$O(n^2 \cdot d_k)$$O(n \cdot d_k)$
显存占用$O(n^2)$$O(n)$

显存计算公式

$$\text{Memory} = 2 \times 2 \times \text{num_heads} \times \text{seq_len} \times \text{head_dim} \times \text{batch_size}$$

优化技术

技术效果
量化(INT4/INT8)显存降低 2-4 倍
滑动窗口支持超长序列
PagedAttention显存利用率提升 2-3 倍
分层缓存支持 100k+ 序列

Hugging Face 使用

1
2
3
4
5
6
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    use_cache=True  # 启用 KV Cache
)

核心数学性质

  1. 等价性:KV Cache 与标准注意力计算结果完全一致
  2. 线性复杂度:解码阶段复杂度与序列长度线性相关
  3. 增量可扩展:新 Token 的 K、V 可直接追加

发展演进

阶段核心问题代表技术
基础版(2017-2020)重复计算简单缓存
优化版(2021-2023)显存瓶颈量化、滑动窗口、PagedAttention
系统级(2024-)存储/调度限制LMCache、Mooncake、存算分离

Comments