一句话定义
PagedAttention 用类似虚拟内存的方式管理 KV Cache:把缓存切成固定大小的块,用 block table 把逻辑块映射到不连续的物理页,按需分配、共享和回收。
为什么需要它
传统做法为每条请求预留连续显存,长度一变就浪费或碎片化。长上下文、多请求并发时,显存很快被“预留但没用”的空间吃光。分页让缓存按块增长,减少碎片。
怎么工作
- 把 KV Cache 划成固定大小的块(如 16 个 token 一块)。
- 每条请求维护逻辑块到物理页的 block table。
- 生成新 token 时按需分配新页,不需要连续空间。
- 相同前缀可以共享物理页;写入时用 copy-on-write。
- attention kernel 按块表读取 K/V。
关键取舍
- 块越大,元数据越少,但内部碎片越多;块越小,管理越灵活,开销越高。
- 需要 attention kernel 支持非连续布局;实现复杂度高于连续缓存。
- 分页提升显存利用率,但不减少 KV Cache 的总计算量。
- 和 Continuous Batching 配合,才能发挥高并发吞吐。
常见误区
- PagedAttention 不是新的注意力公式:它改变缓存管理,不改变 QKᵀV 的语义。
- 它不是量化:不降低数值精度,只减少碎片和浪费。
- 不是只有 vLLM 能用:它是一种缓存管理思路,vLLM 是代表实现。
- 分页不等于无限上下文:显存仍然有上限。
用在哪里
- 高并发推理服务、长上下文、多轮对话。
- 需要动态 batch 和 KV Cache 共享的场景。
- vLLM 等推理框架的核心优化之一。
相关概念
- KV Cache:被管理的数据。
- Continuous Batching:常一起使用的调度方式。
- Offloading:显存不够时的另一条路。