AI基础设施与推理优化 · 第 6 期

vLLM快24倍,靠的是抄OS

PagedAttention · KV缓存分页 · 显存碎片

vLLM的核心创新:把KV缓存当虚拟内存管。OS用分页解决内存碎片,vLLM用分页解决KV缓存碎片——切成固定大小的block,按需分配、逻辑连续物理离散。显存利用率从20%拉到80~90%,长序列和多变长请求不再OOM,吞吐24倍。
⏱ 约 10 分钟 🎯 想搞懂vLLM为什么快的人 📦 源:推理优化

01问题:KV缓存是显存黑洞

连续批处理下,请求长短不一、随时进出,KV缓存要按最大长度预分配——大部分预分配空间空着,还碎片化。

传统做法:每个请求预分配一块连续KV缓存(按max_seq_len)。问题有三:①预分配浪费(实际生成长度常远小于max,预留的空着);②碎片化(请求结束释放的块大小不一,新请求塞不进);③写爆OOM(凑不齐连续大块,明明总剩余够却分配失败)。实测传统KV缓存显存利用率只有20~40%。

传统:1请求 = 1块连续显存(按max预分配)
利用率 ≈ 20~40% 碎片 ≈ 高 长请求易 OOM
Paged:1请求 = N个固定block(按需分配,逻辑链表)
利用率 ≈ 80~90% 碎片 ≈ 0 按需扩容

PagedAttention的洞见:attention计算不需要KV在物理上连续。把KV缓存切成固定大小block(如16个token一块),每个请求用一个block table记录自己用了哪些block——逻辑上连续,物理上离散。需要更多就再申请一个block,用完就还回池子。这就是OS虚拟内存的分页机制,搬到了GPU显存上。

显存碎片是OS解决过的问题,
vLLM抄了答案。
灏天文库 · AI基础设施与推理优化 P.16

02显存碎片 vs 分页演示

点「跑一批请求」,看传统连续分配(碎片化、OOM)和PagedAttention分页(紧凑、无碎片)的显存利用率差距。同样32格显存,传统塞不下时Paged还能继续接。

🗂 显存碎片 vs 分页演示
32格显存,看传统连续分配怎么碎片化,分页怎么紧凑。
已跑 0 批
传统连续分配
PagedAttention 分页
已用碎片(释放但不可用)空闲

03PagedAttention还解锁了什么

组合效果:vLLM在相同硬件下,吞吐量是HF Transformers的 14~24倍,显存利用率从20%拉到80%+。这是为什么2023年后几乎所有线上大模型服务都迁移到vLLM/TGI/SGLang——PagedAttention成了推理引擎的标配。后续SGLang的RadixAttention进一步把前缀缓存做到极致,复杂Agent场景再加速。

分页

消除碎片

固定block按需分配,利用率20%→80%+。

CoW

共享前缀

多请求共享前缀KV页,写时复制,省n倍。

前缀缓存

复用命中

常见prompt KV缓存复用,首token延迟砍半。

变长

零浪费

用多少占多少,长短请求混跑无压力。

把OS的成熟机制,
搬到新问题上,就是创新。
灏天文库 · AI基础设施与推理优化 P.17

04带走这套清单

✅ PagedAttention 与显存优化 6 条可执行规则

  1. 线上推理用vLLM/SGLang:PagedAttention自带,吞吐直接14~24倍,别裸跑HF。
  2. 开prefix caching:固定系统提示的KV缓存复用,首token延迟砍半。
  3. beam采样开CoW:多候选共享前缀KV页,显存按候选数砍倍。
  4. 别按max预分配:Paged按需扩容,max_seq_len设大点也不浪费显存。
  5. 盯KV显存占比:长上下文模型KV是大头,配KV量化(INT8/FP8)再省一半。
  6. chunked prefill配Paged:长输入分段+分页,prefill峰值显存可控。
显存不是不够,
是碎片把它浪费了。
灏天文库 · AI基础设施与推理优化 P.18