跳转至

第一性原理

本章回答一个问题:为什么 KVCache 值得一篇综述。这部分提供贯穿全文的两组心智模型——KVCache 的双重身份和 Prefill/Decode 二分法。后续所有章节都建立在这两点之上。

1. 为什么是"一等公民资源"

KVCache 在过去两三年里完成了一次身份转变:

阶段 角色 关注点
早期(2018–2022) Transformer 推理里一个避免重复计算的小 trick 复杂度 O(n²) → O(n)
现在(2023–) 决定推理集群成本结构、调度策略、SLO 可达性的一等公民资源 容量、带宽、命中率、迁移、租期

类比一下:它从 CPU 寄存器里的临时变量,演化成了类似数据库 Buffer Pool 的系统级资源池。

为什么会这样?因为它同时被四股力量拉扯,每一股都在加速它的"系统化":

  1. 算法演进——attention 变体(MHA/MQA/GQA/MLA)、稀疏、量化、压缩不断改变 KV 的形状与语义
  2. 系统层级——HBM → DRAM → SSD → 远端 KV 池让 KV 在多级介质间流动
  3. 部署形态——PD 分离、并行切分、调度、扩缩容让 KV 跨进程、跨节点存在
  4. 工作负载——多轮、Agent、Coding、RAG、Reasoning 让 KV 的访问模式高度异质

任何一个维度单独看都不至于让 KVCache 变成"系统问题",但四个维度同时拉扯,单点优化已经无法闭合。整篇综述的组织思路就是把这四股力量先各自拆开看清楚,再回到交叉点上看真实复杂度。

2. KVCache 的"双重身份"——讨论混乱的高发地

KVCache 在不同语境下指代不同的东西,这是讨论时最容易"串味"的地方:

视角 KVCache 是什么 体现形式
计算视角 Prefill 的产物、Decode 的输入 Attention kernel 里的张量
存储视角 占据显存/内存/磁盘的有状态数据 内存池中的块、文件中的对象

同一个 KV 张量,在 Attention kernel 里它是被加权求和的 V;在 Block Manager 里它是若干个 16-token 的 Block;在分布式 KV 池里它是带 hash key 的对象;在监控指标里它是 GB-hour 计费单位。

讨论"KVCache 怎么搬"的时候是存储视角,讨论"KVCache 怎么参与计算"的时候是计算视角。两个视角的界面在哪里?答案是Block Table 这一间接层——它把"Sequence 看到的逻辑 KV"映射到"内存池里的物理 Block",让计算视角和存储视角解耦。详见 运行时架构。

3. Prefill/Decode 二分法——贯穿全文的根

LLM 推理不是匀质的"一段计算",而是两个特征截然不同的阶段:

维度 Prefill Decode
计算模式 整个 Prompt 并行 每步 1 个 token
计算特征 Compute-bound Memory-bound
KV 操作 大量写入 持续读取 + 单步追加
延迟贡献 TTFT(首 token 延迟) TPOT / ITL(每 token 延迟)
适合的硬件 高算力 GPU 高带宽 HBM
批量化逻辑 大 batch 提升算力利用率 大 batch 摊薄 HBM 带宽,但受 KV 容量制约

这一二分法是后续几乎所有结构性设计的根本依据:

  • PD 分离——P 和 D 资源画像不同,混部互相干扰,干脆分开
  • Chunked Prefill——把长 Prefill 切碎与 Decode 混跑,让 GPU 既不空转也不卡
  • Prefix Cache——既然 Prefill 写入的 KV 在跨请求间常常重复,就缓存下来供 Decode 直接读
  • Cache-Aware Routing——把同一前缀的请求路由到同一副本,最大化缓存命中

读完本综述如果只能记住一件事,那就是 Prefill 和 Decode 是两种生物。

4. 关键评估维度(指标地图)

为后续讨论建立一个统一的"指标坐标系":

类别 指标 说明
容量 单 token KV size、总占用、page 粒度 决定并发上限
带宽 KV 读带宽、PCIe / RDMA 传输带宽 Decode 的瓶颈
延迟 TTFT、TPOT/ITL、长尾 P95/P99 SLA 可达性
吞吐 tokens/s/GPU、并发请求数 单卡产能
命中率/复用率 prefix hit、跨请求/会话复用 决定是否需要重算
成本 $/M tokens、KV-GB-hour 商业可持续性

详细展开见 评估方法。

5. 本综述的范围与非范围

  • ✅ 覆盖:以推理时的 KVCache 为中心的算法 + 系统 + 部署 + 负载视角
  • ❌ 不覆盖(或仅作背景):
    • 训练时的 attention 优化(FlashAttention 类)——只在与推理 kernel 相关时提及
    • KVCache 之外的 prefill/decode 通用优化(如 speculative decoding 的算法层)
    • 模型架构本身的设计动机——只关心架构选择对 KV 的影响

阅读建议:

  1. 先读完基础概念建立第一性原理
  2. 再按四个维度独立读
  3. 然后看 维度交叉 理解组合复杂度
  4. 最后用 评估方法 和 未来方向 收尾

版本历史

版本 日期 说明
v0.1 2026-05-14 框架搭建