AB
AiBoss
Wiki

什么是分页注意力(PagedAttention)?

分页注意力(PagedAttention)是一种受操作系统虚拟内存与分页机制启发而提出的注意力算法,用于管理大语言模型推理中的键值缓存(KV cache)内存。该算法由 arXiv 论文《Efficient Memory Management for Large Language Model Serving with PagedAttention》提出,并在其之上构建了 vLLM 服务系统。

分页注意力(PagedAttention)是一种用于大语言模型(Large Language Model,LLM)推理服务的注意力算法,其核心思路借鉴了操作系统中经典的虚拟内存(virtual memory)与分页(paging)技术,用来管理推理过程中产生的键值缓存(key-value cache,简称 KV cache)内存。它要解决的问题是:在高吞吐场景下,每个请求的 KV cache 占用巨大且随生成过程动态增长与收缩,若管理不当,内存会被碎片化和冗余复制大量浪费,从而限制可同时批处理的请求数量。

为什么重要

大语言模型的高吞吐服务需要一次性批处理足够多的请求。但按照该论文的描述,已有系统在这一环节遇到明显瓶颈:每个请求对应的 KV cache 内存非常庞大,并且在解码过程中不断增长和收缩。当这部分内存被低效管理时,会产生两类浪费——内存碎片化(fragmentation)和冗余复制(redundant duplication)。

这两类浪费的直接后果是可用内存被白白占用,能塞进一个批次的请求数被迫减少,进而拖低整体吞吐。论文指出,正是这种内存管理上的低效限制了批大小(batch size),使系统无法充分发挥硬件能力。在分页注意力提出之前,主流做法是为每个请求预留或分配连续的内存空间来存放 KV cache,而连续分配在面对长度不确定、动态变化的序列时天然容易产生内部与外部碎片,也难以在多个请求之间共享相同的缓存内容。

因此,分页注意力的价值主张并不只是「让注意力算得更快」,而是从内存管理的角度重新组织 KV cache 的存放方式,把「连续分配」换成「按块分配」,从而在同样的显存预算下容纳更多并发请求。

工作机制

该论文提出的分页注意力,其基本做法是把操作系统的分页思想搬到 KV cache 的管理上。可以按以下几个要点理解:

  • 把缓存切分成块。 不再要求一个请求的 KV cache 在内存中占据一整段连续空间,而是将其划分为若干固定大小的块(block),这些块在物理内存中可以分散存放。
  • 用类似页表的结构做映射。 借助一层间接映射,把逻辑上连续的序列位置对应到物理上不连续的块,从而避免为「最坏情况长度」预留连续空间。
  • 按需分配、按块增长。 随着序列生成而逐步分配新的块,使内存占用贴近实际需要,而不是一次性预留。
  • 支持共享。 论文称该设计支持在请求内部以及跨请求灵活共享 KV cache,从而进一步降低内存占用。对于多个请求共享相同前缀内容的场景,这种共享可以减少重复存储。

论文在上述算法之上构建了 vLLM 这一 LLM 服务系统,并称其实现了两点:一是 KV cache 内存接近零浪费(near-zero waste),二是请求内与跨请求的 KV cache 灵活共享。需要强调的是,这些表述来自论文作者自身的描述与评估,属于该论文的主张,而非独立第三方给出的普遍结论。

典型例子

该论文给出的最直接实例就是 vLLM 系统本身:分页注意力是其底层注意力算法,vLLM 则是建立在其之上的服务系统。论文报告了相应的评估结果:在相同延迟水平下,vLLM 相比当时的最先进系统(论文中列举了 FasterTransformer 和 Orca)将主流大语言模型的吞吐提升了 2–4 倍。论文还指出,这种提升在序列更长、模型更大、解码算法更复杂的情况下更为明显。

此外,论文说明 vLLM 的源代码已公开。该工作发表于 SOSP 2023,提交时间为 2023 年 9 月 12 日,作者包括 Woosuk Kwon、Zhuohan Li、Siyuan Zhuang、Ying Sheng、Lianmin Zheng、Cody Hao Yu、Joseph E. Gonzalez、Hao Zhang、Ion Stoica。

边界与常见误解

第一,分页注意力不是一种新的模型结构或训练方法。它针对的是推理服务阶段的内存管理问题,不改变模型权重,也不改变注意力的数学定义本身;它改变的是 KV cache 在内存中的组织与寻址方式。

第二,不应把它理解为「任何场景下都能带来 2–4 倍吞吐」。这一数字来自该论文在特定对比系统与特定评测条件下的结果,论文同时指出提升幅度会随序列长度、模型规模和解码算法复杂度而变化。把它当作跨硬件、跨负载的通用保证是不准确的。

第三,分页带来的并非没有代价。按块管理意味着引入一层映射与间接寻址,块的大小、映射结构的维护都会带来额外开销;论文的贡献在于论证这种开销相对于所节省的内存浪费是值得的,但这属于该论文的评估结论。

第四,「接近零浪费」是论文对 vLLM 在 KV cache 内存上的描述,指的是相对于碎片化与冗余复制造成的浪费而言,并不意味着整个服务系统的显存占用为零浪费,模型权重、激活等其他部分仍然占用内存。

第五,跨请求共享 KV cache 的前提是请求之间存在可共享的内容(例如相同前缀)。当请求之间没有共同前缀时,可共享的部分自然有限,收益也会相应减弱。

参考资料