五十三:vLLM-PagedAttention¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484696&idx=1&sn=f4e624b8a40cba0af217675866115527&chksm=f01eb661c7693f77165246961715200a129c95991c65242e0d381fcba7bac88e52bf51c6ecb3#rd
1. 学习范围¶
本日主题是 vLLM,重点是PagedAttention,同时覆盖 continuous batching 和 vLLM 推理架构。
本日覆盖: - vLLM 的定位和解决的问题。
-
LLM serving 的动态请求特征。
-
Continuous batching。
-
KV cache 内存碎片问题。
-
PagedAttention 的 block/page 思想。
-
Block table、logical block、physical block。
-
vLLM 调度、吞吐、延迟和显存利用率。
-
常见面试问题和生产化注意事项。
2. vLLM 的定位¶
vLLM 是高吞吐 LLM 推理服务框架,核心目标是提高大模型服务的吞吐、显存利用率和并发能力。 它重点解决: - KV cache 显存浪费。
-
请求长度动态变化。
-
batch 低效。
-
长输出占用缓存。
-
高并发服务调度。
vLLM 最著名的技术是 PagedAttention,并结合 continuous batching 等机制提升推理效率。
3. LLM Serving 的动态性¶
LLM 服务与传统 batch inference 不同: - 请求随时到达。
-
prompt 长度不同。
-
输出长度未知。
-
有的请求提前结束。
-
每个请求 KV cache 动态增长。
-
流式输出要求稳定 ITL。
静态 batch 无法很好处理这种动态负载,因此需要 continuous batching 和高效 KV cache 管理。
4. Continuous Batching¶
Continuous batching 是动态批处理机制。在每个 decode step,调度器可以把新请求加入 batch,把完成请求移出 batch。 传统 batching:
Continuous batching: 它显著提升 GPU 利用率和吞吐,尤其适合请求长度差异大的在线服务。5. Continuous Batching 的挑战¶
挑战包括: - 活跃序列长度不同。
-
KV cache 长度不同。
-
新请求 Prefill 与旧请求 Decode 混合。
-
完成请求释放缓存。
-
调度公平性。
-
TTFT 与吞吐平衡。
Continuous batching 必须依赖高效 KV cache 管理,否则动态请求会造成显存碎片。
6. KV cache 碎片问题¶
传统 KV cache 分配常按最大长度或连续空间分配。请求长度不同会造成浪费和碎片。
问题:
- 短请求占用过大预留空间。
-
请求完成后留下不连续空洞。
-
逻辑序列增长需要连续扩容。
-
显存利用率低。
PagedAttention 的动机就是用分页方式管理 KV cache。
7. PagedAttention 的核心思想¶
PagedAttention 借鉴操作系统虚拟内存思想,把每个序列的 KV cache 切成固定大小的 blocks。
逻辑上:
物理上: 一个请求的逻辑 block 可以映射到非连续的物理 block,因此不需要连续显存。8. Logical Block 与 Physical Block¶
Logical block 是某个序列内部的逻辑 token 分块。Physical block 是 GPU 显存中实际存放 KV 的块。 Block table 记录映射关系:
logical block 0 -> physical block 17
logical block 1 -> physical block 42
logical block 2 -> physical block 8
9. Block Size¶
Block size 是每个 KV block 存放的 token 数。block size 影响: - 内部碎片。
-
block table 长度。
-
kernel 访问效率。
-
调度开销。
-
显存利用率。
太大浪费多,太小管理开销高。需要在显存效率和 kernel 效率之间取舍。
10. Block Manager¶
Block Manager 负责分配、释放和复用 physical blocks。 职责: - 为新 token 分配 block。
-
请求结束后释放 block。
-
维护 free list。
-
管理引用计数。
-
支持 prefix sharing 或 copy-on-write。
Block Manager 是 vLLM 显存效率的核心组件之一。
11. PagedAttention 的优势¶
优势: - 减少 KV cache 内存浪费。
-
缓解外部碎片。
-
支持动态增长。
-
提高并发。
-
更适合 continuous batching。
-
支持 prefix cache 和共享。
它让显存利用率更接近真实 token 数,而不是最大预留长度。
12. PagedAttention 的代价¶
代价包括: - block table 查找开销。
-
kernel 实现复杂。
-
block size 需要调优。
-
对硬件和 attention kernel 优化要求高。
-
调试复杂。
因此 PagedAttention 是系统工程优化,不只是一个简单数据结构。
13. vLLM Scheduler¶
vLLM 调度器决定哪些请求进入本轮执行,包括 Prefill 和 Decode。
调度考虑:
- 新请求等待时间。
-
活跃序列数量。
-
KV block 可用量。
-
token budget。
-
prompt 长度。
-
最大并发。
-
是否流式输出。
调度器要在 TTFT、TPOT、吞吐和公平性之间平衡。
14. Prefill 与 Decode 调度¶
vLLM 需要处理新请求的 Prefill 和已有请求的 Decode。 典型冲突: - 大 Prefill 提高 TTFT 压力。
-
Decode 需要稳定逐 token 输出。
-
KV block 不足时新请求无法进入。
调度器可能使用 token budget 或 chunked prefill 来避免大 prompt 阻塞 Decode。
15. Chunked Prefill¶
Chunked prefill 把长 prompt 的 Prefill 拆成多个 chunk 执行,避免一次大 Prefill 长时间占用 GPU。 收益: - 降低 Decode 卡顿。
-
改善公平性。
-
控制单轮 token budget。
代价: - TTFT 可能变化。
-
调度更复杂。
-
中间状态管理更多。
16. Prefix Caching¶
vLLM 支持通过缓存共享前缀来减少重复 Prefill。对于相同系统 prompt 或长模板,多请求可以复用前缀 KV。 关键问题: - cache key。
-
hash。
-
权限隔离。
-
引用计数。
-
copy-on-write。
Prefix caching 与 PagedAttention 的 block 管理天然相关。
17. Parallel Sampling¶
并行采样或多候选生成中,多个输出共享同一 prompt 前缀。Paged block 可以让多个序列共享 prefix blocks,然后在分叉后使用新 blocks。 这类似 copy-on-write:共享不变前缀,变化部分单独写入。
18. vLLM 的吞吐优势来源¶
吞吐提升来自: - continuous batching 提升 GPU 利用率。
-
PagedAttention 提升 KV 显存利用率。
-
动态调度减少空闲。
-
prefix caching 减少重复 Prefill。
-
优化 attention kernel。
核心是同时提升算力利用和显存利用。
19. vLLM 与普通 Transformers 推理¶
普通 Transformers 推理更适合单请求或小批量离线推理。vLLM 更适合在线高并发 serving。 差异: - 动态 batch。
-
KV 分页管理。
-
请求调度器。
-
服务接口。
-
多请求并发优化。
20. 性能指标¶
评估 vLLM 应关注: - TTFT。
-
TPOT。
-
tokens/s。
-
requests/s。
-
active sequences。
-
KV block usage。
-
cache hit rate。
-
GPU utilization。
-
P95/P99 latency。
-
OOM / preemption。
不能只看平均 tokens/s。
21. 常见失败模式¶
常见失败包括: - block size 配置不合适。
-
KV block 不足。
-
长 prompt 阻塞 Decode。
-
prefix cache 权限隔离不足。
-
过高并发导致 P99 恶化。
-
过度追求吞吐导致 TTFT 变差。
-
长尾请求占用大量 block。
-
调度策略不适合业务 SLO。
22. 生产化建议¶
生产使用 vLLM 时应: - 按业务负载压测。
-
设置最大 prompt/output 长度。
-
监控 KV block。
-
监控 P95/P99 TTFT/TPOT。
-
区分流式和非流式 SLO。
-
小心 prefix cache 的隔离。
-
为长请求设置策略。
-
比较不同 block size 和调度配置。
23. 核心总结¶
vLLM 的核心是为在线 LLM serving 解决动态 batch 和 KV cache 管理问题。Continuous batching 让请求可以动态加入和退出 batch,PagedAttention 用分页方式管理 KV cache,降低碎片和浪费,提高并发和吞吐。 面试表达时应突出: - vLLM 不是模型,而是推理服务框架。
-
PagedAttention 解决 KV cache 内存管理问题。
-
Continuous batching 解决动态请求调度问题。
-
二者结合提升高并发在线推理吞吐。
24. 参考资料¶
-
vLLM PagedAttention documentation: https://docs.vllm.ai/en/stable/design/paged_attention.html
-
vLLM documentation: https://docs.vllm.ai/
-
vLLM diagram overview: https://fy2462.github.io/2024/09/vllm-diagram-overview/
-
Continuous batching 介绍: https://zhuanlan.zhihu.com/p/654259045
-
10 分钟速通 vLLM: https://www.bilibili.com/video/BV1kx4y1x7bu/
预览时标签不可点<div class="