PagedAttention 如何减少 KV 分配浪费?

逻辑连续的序列不必占用连续物理显存。

内容修订 4 · 2026-10-24

S04 · 修订 1 · 2026-10-21

  1. 逻辑块:0 → 1 → 2
  2. 块表:0↦7,1↦2,2↦9
  3. 物理块:7、2、9
本站重绘:非连续映射重绘;编号仅为教学示例。

问题从哪里来

请求长度不同且输出逐步增长,预先分配最大连续缓存容易浪费,动态扩容又会产生碎片。PagedAttention 将 KV 拆成固定大小块,通过块表将序列的逻辑位置映射到非连续物理块。

关键机制

请求只在需要时获得新块;注意力内核通过块表找到对应 K/V。分支采样等场景可共享相同前缀块,并按需复制写入。它优化分配和共享,不直接压缩每个 token 的数学 KV 载荷,可与 GQA 等表示方案互补。

blocks = ceil(T / block_size)

算例与证据

教学算例:块大小16 token,长度33的请求需要3块、容量48,最后一块空15个位置。仍有尾块浪费与元数据成本,但不必预留整个最大窗口;实际内核配置与策略影响结果。

收益之外的新约束

块表间接访问、引用计数与内核实现带来复杂度;跨请求共享还需要正确的缓存键和隔离。分页提高可容纳请求数,不自动保证每个请求的延迟目标。

原始来源

启用脚本后可使用手动本地阅读记录和交互计算器。

继续追问

I01 · KV cache 为什么随上下文和并发增长?

S05 · 连续批处理如何兼顾吞吐和用户延迟?

全部18题