什么是 PagedAttention?

PagedAttention 是一种 LLM 服务显存管理与注意力方法,它把每个序列的固定大小逻辑 KV Cache Block 映射到按需分配且无需连续的物理块。

快速了解

创建时间2023 年由加州大学伯克利分校 vLLM 作者团队及合作者提出
规范文档官方规范

工作原理

映射逻辑块与物理块

Scheduler 为每个序列分配 0..n Logical Block Index,Block Table 将逻辑索引映射到 Physical Block ID,因此同一请求的块无需在 GPU 显存中相邻。Prefill 按输入长度申请块,Decode 先向未填满 Tail Block 追加 Token,只有块填满后才申请新块。分配失败必须显式触发 Admission Control、Preemption、Swap 或拒绝,不能覆盖其他序列状态。

共享但不污染状态

多个序列可以为共同 Prefix 或并行采样分支引用不可变物理块,并通过 Reference Count 决定回收时机。某个序列需要写入共享的 Partial Block 时,Copy-on-write 会申请私有块、复制有效条目,并只更新该序列的 Block Table。Cache Identity 应包含精确 Model、Tokenizer、Template、Adapter、Input Token 和相关 Execution Setting;文本相似不能作为安全共享键。

区分思想与单一内核

Paged KV Management、Attention Kernel 与 Serving Scheduler 相互配合但并非同一概念。当前 [vLLM Paged Attention 页面](https://docs.vllm.ai/en/stable/design/paged_attention/)明确把其 Kernel Walkthrough 标为历史文档,并说明已不能代表今天的代码。

其他系统可以采用不同布局的分页缓存;[vAttention](https://arxiv.org/abs/2405.04437)则保留连续虚拟地址并按需映射物理页。应在固定实现上测试分配浪费、Page Fault、Preemption、TTFT、TPOT 与 Goodput。

主要特点

  • 把每个序列的 KV Cache 切分为固定 Token 数的逻辑块
  • 通过 Block Table 将逻辑顺序映射到不连续的 GPU 物理块
  • 随着序列增长、结束或被抢占而动态分配与回收容量
  • 可共享不可变 Prefix Block,并用 Copy-on-write 隔离写入
  • 降低预留与外部碎片,但仍存在尾块、元数据和 Runtime 开销
  • 只有当前 Allocator、Kernel 与 Scheduler 协同时才能转化为容量收益

常见用途

  1. 在 KV Cache 限制 Active Concurrency 时服务变长请求
  2. 支持 Continuous Batching,而不为每个请求预留最大长度
  3. 在并行采样或重复 Prefix 间共享不可变缓存状态
  4. 跟踪 Block Pressure,支持 Admission、Preemption 与 Eviction 决策
  5. 在固定 Serving Runtime 上比较分页与虚拟内存 KV 布局

示例

loading...
Loading code...

常见问题

PagedAttention 如何减少 KV Cache 浪费?

它随序列增长按需分配固定大小物理块,而不是预留一整块最大长度连续 Buffer。Block Table 保留逻辑顺序,因此即使空闲物理地址不相邻也能被利用。

PagedAttention 与 FlashAttention 相同吗?

不同。PagedAttention 主要解决服务时 KV Cache 的放置与访问;FlashAttention 是 IO-aware Attention Algorithm 与 Kernel 家族。Serving Runtime 可以把分页 KV 存储与兼容的优化 Kernel 组合使用。

PagedAttention 能消除所有显存碎片吗?

不能。它大幅减少最大长度连续预留和外部碎片,但每个序列的最后一块仍可能部分为空,Block Metadata、Allocator Reserve 与 Runtime Buffer 也会占用显存。

PagedAttention 为什么需要 Copy-on-write?

共享 Prefix 或分支块必须对其他序列保持不可变。一个序列要写入共享 Partial Block 时,Copy-on-write 为它创建私有副本,同时保留原块的其他引用。

原始 PagedAttention 论文能精确描述当前 vLLM 内部实现吗?

不能。论文定义了基础设计,但 vLLM 稳定版文档已把 Kernel Walkthrough 标为历史内容。当前 Block Layout、Kernel 与性能都应视为版本化实现细节,并核验实际部署版本。

相关术语

相关文章