现代 AI 推理的“空间魔术”:PagedAttention 如何终结显存碎片化

在 LLM(大语言模型)的生产环境中,推理成本的高低并不直接取决于模型参数量,而取决于一个核心指标:吞吐量 (Throughput)。而限制吞吐量的最大瓶颈,往往不是 GPU 的算力,而是显存的利用率。

专属插画
现代 AI 推理的“空间魔术”:PagedAttention 如何终结显存碎片化

现代 AI 推理的“空间魔术”:PagedAttention 如何终结显存碎片化

在 LLM(大语言模型)的生产环境中,推理成本的高低并不直接取决于模型参数量,而取决于一个核心指标:吞吐量 (Throughput)。而限制吞吐量的最大瓶颈,往往不是 GPU 的算力,而是显存的利用率。

当我们讨论 KV Cache 时,大多数人关注的是它如何加速生成,但工程实践中真正的噩梦是——内存碎片化

连续存储的“死胡同”

传统的推理框架在处理 KV Cache 时,倾向于使用连续的内存分配。这带来了一个巨大的矛盾:
1. 预分配浪费:为了保证请求不因长度增加而崩溃,系统必须根据 max_seq_len(如 32k)预先划出一块连续空间。如果用户只输入了 10 个 Token,剩下的 31,990 个位置依然被占用且无法给其他请求使用。
2. 外部碎片:不同请求的生命周期交错,导致显存中出现大量细碎的空洞,无法组合成一个足够大的连续块来承载新请求。

这种“静态分配”模式导致显存利用率极低,直接限制了 Batch Size,使得昂贵的 H100 在很多时候处于“饥饿”状态。

PagedAttention:将 OS 的虚拟内存搬进 GPU

vLLM 团队提出的 PagedAttention 提供了一个优雅的解法:放弃连续存储,引入分页机制

其核心逻辑是将 KV Cache 分割成固定大小的物理块(Physical Blocks),每个块存储固定数量的 Token(例如 16 个)。

关键工程实现

  • 逻辑映射表 (Block Table):模型在逻辑上仍然认为 Token 是连续的,但底层通过一张映射表将逻辑索引指向不连续的物理块。这与操作系统的虚拟内存管理几乎完全一致。
  • 按需动态增长:只有当当前物理块填满时,系统才会为该请求申请一个新的物理块。这意味着显存占用与实际生成的 Token 数成线性关系,而非与最大长度挂钩。
  • 零拷贝共享 (Copy-on-Write):在处理并行采样(Parallel Sampling)或多轮对话时,多个请求可以共享同一个物理块(例如共享 System Prompt 的缓存)。只有当某个请求需要修改内容时,才会触发 Copy-on-Write 操作。

实战影响:从“能跑”到“高效”

PagedAttention 的引入将 LLM 推理从简单的矩阵运算升级为了复杂的资源调度问题:
- 吞吐量飞跃:由于消除了内部碎片,显存利用率可提升至 96% 以上。在相同硬件下,并发数通常能提升 2-4 倍。
- 长文本稳定性:通过灵活的分页管理,系统能够更稳定地处理超长上下文而不会轻易触发 OOM(Out of Memory)。
- 成本降低:更高的吞吐量意味着单次 Token 生成的摊销成本大幅下降。

总结

如果说 Continuous Batching 解决了推理的时间维度调度(让 GPU 不空转),那么 PagedAttention 则解决了空间的维度调度(让显存不浪费)。对于 AI 系统工程师而言,理解这一演进意味着能够更精准地调优 gpu_memory_utilization 等参数,在极致性能与系统稳定性之间找到平衡点。

留言区

欢迎分享你的想法!

发表留言

0/500

加载留言中…