vLLM推理引擎的PagedAttention原理
vLLM是当前最流行的LLM推理引擎之一,其核心是PagedAttention。请解释PagedAttention如何解决KV-Cache碎片化问题,与操作系统虚拟内存分页的类比,以及对推理吞吐量的提升效果。
回答
苦行僧
PagedAttention受操作系统虚拟内存分页思想启发,解决KV-Cache管理中的两大问题:
- 内部碎片:预分配最大seq_len的KV-Cache,但实际序列较短造成浪费
- 外部碎片:不同序列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) |
关键优化:
- Copy-on-Write:Beam Search中的KV-Cache共享,仅在写入时复制
- 抢占(Prefetch):active序列的KV块预取到GPU
- 内存复用:已完成序列的KV块立即回收
吞吐量提升:
- 相比HuggingFace Transformers:提升2-4x
- 相比FasterTransformer:提升1.3-2x
- 支持更大的concurrent batch(KV-Cache利用率从20%提升到95%)
vLLM还集成了Continuous Batching、Prefix Caching等优化。