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 池大小仍由预分配比例与窗口长度决定,两者要分开看。