KVCache 综述¶
KVCache 早已不再是 Transformer 推理里"避免重复计算的小 trick"。在今天的生产推理集群里,它是与算力、带宽并列的一等公民资源——决定着成本结构、调度策略、SLO 是否可达。从 CPU 寄存器里的临时变量,演化成了类似数据库 Buffer Pool 的系统级资源池。
本综述把 KVCache 视为一个被四股力量同时拉扯的复合问题,按"四个正交维度 + 维度交叉"的方式组织:
- 算法维度——attention 变体、稀疏、压缩、量化在不断改写 KV 张量本身的形状和语义
- 系统维度——KV 在 HBM → DRAM → SSD → 远端的多级存储里流动
- 部署维度——PD 分离、并行切分、路由、扩缩容让 KV 跨进程跨节点存在
- 工作负载维度——多轮、Agent、Coding、RAG、Reasoning 让 KV 的访问模式高度异质
讨论 KVCache 时之所以容易"鸡同鸭讲",是因为不同的人从不同维度切入。本综述的目标就是把"骨架"立起来,让算法、系统、部署、工作负载这四类讨论可以在一张统一的导航图上挂载具体技术点、论文和系统。
范围与非范围¶
- ✅ 覆盖:以推理时的 KVCache 为中心的算法 + 系统 + 部署 + 负载视角
- ❌ 不覆盖(或仅作背景):训练时的 attention 优化(FlashAttention 类)、KVCache 之外的 prefill/decode 通用优化、模型架构本身的设计动机
阅读路径¶
| 路径 | 推荐章节 |
|---|---|
| 新人路径 | 第一性原理 → 基础概念 → Attention 变体 → 运行时架构 → 存储层级 → PD 分离 → 评估方法 |
| 算法路径 | Attention 变体 → 稀疏化 → 压缩与量化 → 维度交叉 → 未来方向 |
| 系统路径 | 运行时架构 → Paged KV → Prefix Cache → KV Offload → 生命周期与淘汰 → 维度交叉 |
| 部署路径 | PD 分离 → 并行切分 → 路由与亲和性 → 弹性与故障 → 维度交叉 |
| 应用路径 | 工作负载维度 → 维度交叉 → 评估方法 |
章节结构¶
导论
四个维度
- 算法(横向):Attention 变体、稀疏化、压缩与量化
- 系统(纵向):运行时架构、存储层级、Paged KV、Prefix Cache、KV Offload、生命周期与淘汰
- 部署:PD 分离、并行切分、路由与亲和性、弹性与故障
- 工作负载:多轮 / Agent / Coding / RAG / Reasoning 画像
横向
附录
快速参考:KVCache 内存估算¶
以 LLaMA-3 70B(BF16)为例:num_layers = 80,num_kv_heads = 8(GQA),head_dim = 128 → 每 token KV ≈ 327 KB。
一个 80GB HBM 的 GPU,在模型权重之外约剩 20-30 GB 用于 KVCache,大约能缓存 60,000–90,000 个 token 的上下文(不含其他运行时开销)。实际可用量受批量大小、调度策略和碎片率影响。
版本历史¶
| 版本 | 日期 | 说明 |
|---|---|---|
| v0.1 | 2026-05-14 | 框架搭建 |