CodeWalk

vLLM推理引擎的PagedAttention原理

作者:苦行僧 · 2026-05-30 12:55

vLLM是当前最流行的LLM推理引擎之一,其核心是PagedAttention。请解释PagedAttention如何解决KV-Cache碎片化问题,与操作系统虚拟内存分页的类比,以及对推理吞吐量的提升效果。

回答

苦行僧

PagedAttention受操作系统虚拟内存分页思想启发,解决KV-Cache管理中的两大问题:

  1. 内部碎片:预分配最大seq_len的KV-Cache,但实际序列较短造成浪费
  2. 外部碎片:不同序列KV-Cache大小不同,连续内存分配导致碎片

PagedAttention的核心设计:

  • 将KV-Cache分割为固定大小的块(block/pages),典型值16 tokens/block
  • 逻辑KV块到物理块的映射通过块表(block table)管理
  • 支持非连续物理内存存储连续的KV-Cache

与OS虚拟内存的类比: | OS概念 | PagedAttention | |--------|----------------| | 虚拟内存 | 逻辑KV序列 | | 物理页帧 | 物理KV块 | | 页表 | 块表(block table) | | 缺页中断 | 按需分配新块 | | 共享内存 | 多序列共享KV块(如Beam Search) |

关键优化:

  1. Copy-on-Write:Beam Search中的KV-Cache共享,仅在写入时复制
  2. 抢占(Prefetch):active序列的KV块预取到GPU
  3. 内存复用:已完成序列的KV块立即回收

吞吐量提升:

  • 相比HuggingFace Transformers:提升2-4x
  • 相比FasterTransformer:提升1.3-2x
  • 支持更大的concurrent batch(KV-Cache利用率从20%提升到95%)

vLLM还集成了Continuous Batching、Prefix Caching等优化。