现代 AI 推理的“空间魔术”:PagedAttention 深度解析

在 LLM(大语言模型)的生产环境中,内存管理是决定吞吐量和成本的核心瓶颈。如果你关注过 vLLM 等高性能推理框架,一定会听到一个核心概念:PagedAttention。

专属插画
现代 AI 推理的“空间魔术”:PagedAttention 深度解析

现代 AI 推理的“空间魔术”:PagedAttention 深度解析

在 LLM(大语言模型)的生产环境中,内存管理是决定吞吐量和成本的核心瓶颈。如果你关注过 vLLM 等高性能推理框架,一定会听到一个核心概念:PagedAttention

简单来说,PagedAttention 解决了 LLM 推理中一个极其低效的问题:KV Cache 的内存碎片化

为什么需要 PagedAttention?

在生成式 AI 推理过程中,为了避免重复计算之前生成的 token,系统会将每个 token 的 Key 和 Value 向量存储在内存中,这就是 KV Cache

传统的 KV Cache 管理方式是“连续存储”。这意味着系统必须为每个请求预先分配一块连续的内存空间。但这里存在两个致命问题:
1. 内部碎片(Internal Fragmentation):由于无法预知模型最终会生成多少个 token,系统通常会按照最大长度(Max Sequence Length)预分配空间。如果模型只生成了 10 个 token 但预分配了 2048 个,那么绝大部分内存被白白浪费。
2. 外部碎片(External Fragmentation):随着请求的动态增加和结束,内存中会出现大量不连续的小空隙,导致无法分配大块连续空间给新请求。

这种低效导致 GPU 显存利用率极低,限制了并发请求数(Batch Size)。

PagedAttention 的核心逻辑:借鉴虚拟内存

PagedAttention 的灵感直接来源于操作系统中的虚拟内存(Virtual Memory)分页机制(Paging)

它不再要求 KV Cache 在物理内存中连续存储,而是将其划分为固定大小的“页”(Blocks)。
- 逻辑块 $\rightarrow$ 物理块:每个请求拥有一个逻辑上的 KV Cache 序列,但这些序列被映射到不连续的物理内存块中。
- 块表(Block Table):系统维护一张映射表,记录逻辑页索引与物理页地址的对应关系。当模型需要读取之前的 KV Cache 时,通过块表快速定位到物理地址。

这带来了什么实际好处?

  1. 近乎零浪费:除了最后一个块可能没填满外,所有物理块都被完全利用。显存利用率从之前的 $\sim$60% 提升到了 $\sim$96% 以上。
  2. 动态扩展:当当前块满时,系统只需动态申请一个新的物理块并将其添加到块表中即可,无需移动原有数据或重新分配大块空间。
  3. 高效共享(Copy-on-Write):在并行采样(Parallel Sampling)或 Beam Search 时,多个输出序列可以共享同一个前缀(Prompt)的物理块。只有当某个序列产生新 token 需要修改时,才执行“写时复制”,极大降低了多路径生成的显存开销。

对工程实践的影响

PagedAttention 的出现让 vLLM 等框架能够将 Batch Size 提升数倍而无需增加硬件成本。对于开发者而言,这意味着:
- 更高的吞吐量 (Throughput):单位时间内能处理更多请求。
- 更低的延迟 (Latency):通过提高并发度降低了排队等待时间。
- 更灵活的部署:可以在更小的 GPU 上运行更大规模的并发任务。

总结

如果说 Continuous Batching 是解决了“时间轴”上的调度浪费,那么 PagedAttention 就是解决了“空间轴”上的存储浪费。两者结合,构成了现代高性能 LLM 推理引擎的基石,将 AI 从“昂贵的实验室玩具”推向了“高效率的工业级产品”。

留言区

欢迎分享你的想法!

发表留言

0/500

加载留言中…