PagedAttention是vLLM背后的创新,现已被大多数LLM服务框架采用。与朴素实现相比,它通过消除碎片化造成的内存浪费,将服务吞吐量提高了2–4倍。没有它,为许多并发用户提供长上下文模型的成本将大幅增加。
PagedAttention解决的问题:当请求到来时,你不知道响应会有多长,因此必须为最大可能长度预分配KV缓存。如果最大长度为4096个token但响应只有200个token,95%的分配内存被浪费。乘以数百个并发请求,GPU内存很快就会填满,限制吞吐量。
PagedAttention将KV缓存分成固定大小的页(例如每页16个token)。页仅在需要时分配,可以存储在GPU内存的任何位置(非连续)。页表将逻辑位置映射到物理内存位置,就像操作系统的虚拟内存一样。这消除了碎片化:内存按页分配,随着响应的增长而逐页分配,释放的页立即可用于新请求。
一个强大的扩展:当多个请求共享相同的提示前缀时(系统提示共享很常见),它们该前缀的KV缓存页可以物理共享——在内存中只存储一次但被所有请求引用。这是从操作系统设计的写时复制语义应用到LLM服务的做法。对于许多用户共享相同系统提示的应用,共享部分的内存使用可以减少50%以上。