首页/AI/大模型部署与运维速查/PagedAttention:KV 分页管理
推理参数与优化50 条

PagedAttention:KV 分页管理

把 KV 缓存按固定大小块(block)分页管理,类似操作系统虚拟内存:减少碎片、支持非连续存储与跨请求共享,是 vLLM 高并发吞吐的基础机制。

PagedAttention 是什么

PagedAttention 把 KV 缓存按固定大小的块(block)分页管理,思路类似操作系统的虚拟内存:块与块之间不必连续,减少了碎片,还支持多个请求共享同一段前缀的 KV。它是高并发引擎能做到高显存利用率的基础机制;对使用者来说,重点在于看懂它暴露出来的那几个水位指标。

基本信息

机制KV 缓存按块分页管理
主要好处减少碎片、支持非连续存放与共享
典型实现vLLM 等推理引擎
暴露信号KV 水位、排队请求数、抢占次数
观测入口引擎的 metrics 接口

典型使用场景

  • 判断实例是否已经吃满 KV,需要扩容还是限流
  • 排查吞吐周期性抖动,确认是否来自抢占重算
  • 评估公共系统提示带来的前缀共享收益
  • 为容量表取 KV 池实际可容纳的 token 数
  • 对比两次发布之间的 KV 水位变化,判断改动是否推高了缓存占用

观察 KV 水位

观察 KV 水位
curl -s http://127.0.0.1:8000/metrics | grep -E 'gpu_cache_usage|num_requests'
# 指标名随版本可能微调,以文档为准
while true; do curl -s http://127.0.0.1:8000/metrics | grep gpu_cache_usage; sleep 2; done
# 滚动观察:压测期间水位是否长期贴顶

三个信号怎么读

信号健康表现异常表现
KV 水位常态下留有余量长期贴近上限
排队请求数短期波动持续累积不回落
抢占重算偶发反复出现,吞吐抖动
使用侧重点不在内部实现,而在三个信号:KV 水位、排队请求数、是否出现抢占重算,后者是吞吐周期性抖动的常见来源。
多个请求共享同一段系统提示时,前缀共享能显著节省 KV 空间:这也是把公共提示词固定放在最前面的一个实际理由。
分页管理降低的是碎片与浪费,不会凭空增加显存:KV 池大小仍由预分配比例与窗口长度决定,两者要分开看。

易错点

  • 把 KV 打满当健康:接近上限会出现排队与抢占重算,前后抖动明显,应先扩容或限流
  • 只看总显存已用:引擎按利用率预分配,要看 KV 水位才看得出真实余量
  • 忽略指标名随版本变化:照抄旧脚本抓不到数据,会误以为指标没暴露
  • 把吞吐抖动都归因于网络:先看抢占次数,这是同机内最容易被忽略的原因
  • 把不同实例的水位横向比较:窗口与并发档位不同,水位不可直接对比,要连同配置一起看

数据来源与参考

  • vLLM 官方博客:PagedAttention(blog.vllm.ai)
  • vLLM 官方文档:Production Metrics(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌