标签:#LLM #vLLM #PagedAttention #CUDA #Inference #SystemDesign
📉 前言:显存碎片的“诅咒”
在 vLLM 出现之前,HuggingFace Transformers 的默认推理极其浪费显存。
LLM 推理是自回归的(生成一个 Token,存入 KV Cache,再生成下一个)。传统的 KV Cache 管理方式是预分配 (Pre-allocation):
假设最大序列长度是 2048,系统就会直接在显存里划出一块能存 2048 个 Token 的连续空间。
问题来了:
- 内部碎片:用户只问了句 “Hi”,占用了 5 个 Token,剩下的 2043 个 Token 空间全部闲置,但无法被其他请求使用。
- 外部碎片:不同请求的长短不一,导致显存中充斥着无法合并的小空洞。
这导致 GPU 显存利用率通常不到20%。显存塞满了,但没跑几个并发请求,吞吐量自然上不去。
💡 一、 灵感来源:操作系统的虚拟内存
vLLM 的作者从操作系统(OS)中找到了灵感。
OS 是怎么解决内存碎片的?分页 (Paging)。
- 逻辑上连续的内存(虚拟内存),物理上可以是离散的(物理页框)