跳转到内容

PagedAttention

本页使用了标题或全文手工转换
维基百科,自由的百科全书

PagedAttention是一种用于高效服务大型语言模型(LLM)的注意力算法,于2023年由Woosuk Kwon及其同事在论文《Efficient Memory Management for Large Language Model Serving with PagedAttention》中提出,[1]并与vLLM推理引擎一同发布。该方法将自回归解码过程中使用的KV缓存(英语:Transformer (deep learning)#KV caching)(键值缓存)以固定大小的块存储,并可将这些块映射到不连续的物理内存,借鉴了虚拟内存、分页与操作系统设计中的思想[2][3]。

背景

[编辑]

在Transformer推理中,键值缓存会随着序列长度与并发请求数量而增长。Kwon等人指出,此前的服务系统通常预先保留连续的缓存区域,因而会造成预留空间、内部碎片与外部碎片。在他们的实验中,论文报告此前系统的有效内存利用率最低可降至20.4%[2]。

描述

[编辑]

PagedAttention将每个序列的缓存划分为固定大小的“KV块”(KV block)。请求的缓存表示为一系列逻辑块,而块表(block table)将这些逻辑块映射到物理GPU内存块。这样一来,相邻的逻辑块无需在物理内存中连续,并且可以在生成过程中按需分配新块[2]。

该设计还使相关解码路径之间更容易共享缓存状态。在vLLM中,物理块可以被引用计数并在请求或分支之间共享,当共享块需要被修改时使用块粒度的写时复制。原论文将该设计应用于并行采样、束搜索(英语:Beam search)以及共享前缀的提示词[2]。

数学表述

[编辑]

对于因果自注意力中的查询词元 i,标准注意力输出可写作 aij=exp⁡(𝐪i⊤𝐤j/d)∑t=1iexp⁡(𝐪i⊤𝐤t/d),𝐨i=∑j=1iaij𝐯j 其中 𝐪i、𝐤j、𝐯j 分别为查询、键与值向量,d 为注意力维度[2]。

若将缓存划分为大小为 B 的块,则键块与值块可写作 𝐊j=(𝐤(j−1)B+1,…,𝐤jB),𝐕j=(𝐯(j−1)B+1,…,𝐯jB) PagedAttention随后按块进行计算: 𝐀ij=exp⁡(𝐪i⊤𝐊j/d)∑t=1⌈i/B⌉exp⁡(𝐪i⊤𝐊t/d),𝐨i=∑j=1⌈i/B⌉𝐕j𝐀ij⊤ 其中 𝐀ij 是第 j 个KV块的注意力分数向量。在Kwon等人给出的表述中,该公式在保持因果注意力计算的同时,允许键块与值块位于不连续的物理内存中[2]。

性能与应用

[编辑]

vLLM论文报告称,在其评测的工作负载上,使用PagedAttention及其相关内存管理设计可将服务吞吐量较FasterTransformer、Orca等对比基线提升2–4倍,同时保持模型输出不变。在OPT-13B配合Alpaca轨迹的实验中,论文还报告通过KV块共享,并行采样节省内存6.1–9.8%,束搜索节省37.6–55.2%[2]。

2024年一篇关于LLM服务系统的综述将PagedAttention描述为已成为LLM服务框架中的行业规范,并列举了TGI、vLLM与TensorRT-LLM中的支持[3]。

局限与替代方案

[编辑]

后续工作指出了该方法的权衡取舍。2025年的vAttention论文认为,PagedAttention要求重写注意力内核以支持分页,增加了软件复杂度、可移植性问题、冗余与执行开销,因此提出一种内存管理器,使缓存保持虚拟内存连续,同时依赖按需分页进行物理分配[4]。

vAttention

[编辑]

与PagedAttention不同,vAttention并不引入不同的注意力规则,而是保留标准注意力计算 Attention⁡(qi,K,V)=softmax⁡(qiK⊤scale)V. 在Prabhu等人的记号中,一个请求迄今所见到的键与值张量为 K,V∈ℝL′×(H×D), 其中 L′ 为迄今所见上下文长度,H 为某个工作器上的KV头数量,D 为每个KV头的维度[4]。

在PagedAttention之前的系统中,工作器每层的K缓存(或V缓存)通常分配为形状如下的4D张量 [B,L,H,D], 其中 B 为批量大小,L 为模型支持的最大上下文长度[4]。

vAttention保留这种连续的虚拟内存视图,同时将物理内存分配推迟到运行时。服务框架为每层维护独立的K、V张量,因此vAttention在每个工作器上预留 2N 个虚拟内存缓冲区,其中 N 为该工作器管理的层数[4]。

单个虚拟内存缓冲区的最大尺寸为 BS=B×S, 其中 S 为单个请求在该工作器上每层K缓存(或V缓存)的最大尺寸。论文定义 S=L×H×D×P, 其中 P 为存储一个元素所需的字节数[4]。

在该表述中,vAttention将KV缓存在虚拟内存中保持连续,并依赖按需分页进行物理分配,而无需修改注意力内核以在非连续的KV缓存块上运算[4]。

参见

[编辑]

参考文献

[编辑]
  1. ^ Kwon, Woosuk; Li, Zhuohan; Zhuang, Siyuan; Sheng, Ying; Zheng, Lianmin; Yu, Cody Hao; Gonzalez, Joseph E.; Zhang, Hao; Stoica, Ion. Efficient Memory Management for Large Language Model Serving with PagedAttention. 2023-09-12. arXiv:2309.06180 可免费查阅 [cs.LG]. 
  2. ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 Kwon, Woosuk; Li, Zhuohan; Zhuang, Siyuan; Sheng, Ying; Zheng, Lianmin; Yu, Cody Hao; Gonzalez, Joseph E.; Zhang, Hao; Stoica, Ion. Efficient Memory Management for Large Language Model Serving with PagedAttention. Proceedings of the 29th Symposium on Operating Systems Principles. Association for Computing Machinery: 611–626. 2023. arXiv:2309.06180 可免费查阅. doi:10.1145/3600006.3613165 (英语). 
  3. ^ 3.0 3.1 Li, Baolin; Jiang, Yankai; Gadepally, Vijay; Tiwari, Devesh. LLM Inference Serving: Survey of Recent Advances and Opportunities. 2024-07-17. arXiv:2407.12391 可免费查阅 [cs.DC]. 
  4. ^ 4.0 4.1 4.2 4.3 4.4 4.5 Prabhu, Ramya; Nayak, Ajay; Mohan, Jayashree; Ramjee, Ramachandran; Panwar, Ashish. vAttention: Dynamic Memory Management for Serving LLMs without PagedAttention. Proceedings of the 30th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 1. Association for Computing Machinery: 1133–1150. 2025. doi:10.1145/3669940.3707256 可免费查阅 (英语).