PagedAttention 如何减少 KV 分配浪费?
逻辑连续的序列不必占用连续物理显存。
内容修订 4 · 2026-10-24
S04 · 修订 1 · 2026-10-21
- 逻辑块:0 → 1 → 2
- 块表:0↦7,1↦2,2↦9
- 物理块:7、2、9
问题从哪里来
请求长度不同且输出逐步增长,预先分配最大连续缓存容易浪费,动态扩容又会产生碎片。PagedAttention 将 KV 拆成固定大小块,通过块表将序列的逻辑位置映射到非连续物理块。
关键机制
请求只在需要时获得新块;注意力内核通过块表找到对应 K/V。分支采样等场景可共享相同前缀块,并按需复制写入。它优化分配和共享,不直接压缩每个 token 的数学 KV 载荷,可与 GQA 等表示方案互补。
blocks = ceil(T / block_size)
算例与证据
教学算例:块大小16 token,长度33的请求需要3块、容量48,最后一块空15个位置。仍有尾块浪费与元数据成本,但不必预留整个最大窗口;实际内核配置与策略影响结果。
收益之外的新约束
块表间接访问、引用计数与内核实现带来复杂度;跨请求共享还需要正确的缓存键和隔离。分页提高可容纳请求数,不自动保证每个请求的延迟目标。
原始来源
- Efficient Memory Management for Large Language Model Serving with PagedAttention · 2023-09-12 · 核对 2026-10-21
启用脚本后可使用手动本地阅读记录和交互计算器。