✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

vLLM 中的 PagedAttention 解决了什么问题?它和传统 KV Cache 管理方式相比,核心优势在哪里?

创建时间:2026-09-18 更新时间:2026-09-18 阅读次数:1049 次 分类:分布式训练与工程优化

一、核心思想

PagedAttention 是 vLLM 提出的核心显存管理技术,专门用来优化大模型推理中的 KV Cache 管理。

它的核心思想是:借鉴操作系统的虚拟内存分页机制,把 KV Cache 切成固定大小的 block,用非连续的物理显存块来存储逻辑上连续的 KV Cache。

传统 KV Cache 管理方式要求每个请求预分配一段连续的显存,导致严重的显存碎片和浪费。PagedAttention 通过分页管理,让 KV Cache 可以离散存储,显存利用率大幅提升。

一句话总结:PagedAttention 把操作系统的分页思想搬到了 KV Cache 管理上,解决了显存碎片和浪费问题。


二、先看传统 KV Cache 管理的问题

1、传统方式怎么做

在 vLLM 之前,主流推理框架对 KV Cache 的管理方式是:

  • 每个请求预分配一段连续的显存空间
  • 这段空间要能容纳该请求可能达到的最大序列长度;
  • 请求结束后释放整段显存。

比如一个请求最大可能生成 2048 个 token,那就按 2048 预分配。

2、问题一:内部碎片

预分配按最大长度来,但实际生成长度往往远小于最大值。

假设预分配 2048 个 token 的空间,实际只生成了 200 个 token:

  • 已用:200;
  • 浪费:1848;
  • 浪费率超过 90%。

这部分浪费叫内部碎片,是传统方式最严重的问题。

3、问题二:外部碎片

不同请求的序列长度不同:

  • 有的请求长,有的请求短;
  • 每个请求都要一段连续显存;
  • 显存被切得七零八落。

即使总空闲显存足够,也可能找不到一块足够大的连续空间分配给新请求,这就是外部碎片

4、问题三:无法共享

多个请求如果有相同的前缀,比如相同的 system prompt:

  • 传统方式每个请求都要各自存一份;
  • 无法共享这部分 KV Cache;
  • 显存重复占用。

5、问题四:显存利用率低

综合以上问题,传统方式的显存利用率可能只有 20% 到 40%。

这意味着:

  • 能同时处理的请求数少;
  • batch size 上不去;
  • 吞吐低;
  • 长上下文场景下更严重。

三、PagedAttention 的核心思想

1、分页管理

PagedAttention 把 KV Cache 分成固定大小的 block

  • 每个 block 存储固定数量 token 的 K、V;
  • 比如一个 block 存 16 个 token 的 KV;
  • block 是显存分配的基本单位。

逻辑上,一个请求的 KV Cache 是连续的;物理上,它可以分散在多个不连续的 block 中。

2、逻辑 block 和物理 block

引入两层结构:

  • 逻辑 block:请求视角下连续的 KV Cache;
  • 物理 block:实际显存中的存储块。

通过一张 block table 建立映射:

$$ \text{逻辑 block } i \rightarrow \text{物理 block } j $$

这和操作系统中的页表几乎一样。

3、按需分配

PagedAttention 不再预分配最大长度,而是:

  • 生成新 token 时,才分配新的 block;
  • 一个 block 满了,再分配下一个;
  • 请求结束时,释放它占用的所有 block。

这样显存按实际需要分配,几乎没有内部碎片。


四、PagedAttention 的核心优势

1、几乎消除内部碎片

因为按需分配,最后一个 block 可能没满,但浪费最多只有一个 block 的大小。

假设 block 大小为 $B$,平均浪费约为:

$$ \frac{B}{2} $$

相比传统方式浪费整个最大长度,内部碎片大幅降低。

显存利用率可以从传统方式的 20% 到 40%,提升到 90% 以上。

2、消除外部碎片

因为 block 是固定大小的,物理上不需要连续:

  • 任何空闲 block 都可以分配给任何请求;
  • 不会出现“总空间够但没有连续空间”的问题;
  • 外部碎片基本消除。

3、支持前缀共享

多个请求如果有相同前缀,可以:

  • 让它们的逻辑 block 指向相同的物理 block;
  • 共享这部分 KV Cache;
  • 通过引用计数管理,避免重复存储。

这在以下场景非常有用:

  • 相同的 system prompt;
  • few-shot 示例相同;
  • 并行采样,同一个 prompt 生成多个回答;
  • beam search。

4、支持 Copy-on-Write

共享的 block 如果某个请求要修改:

  • 不直接改共享 block;
  • 而是复制一份新的物理 block;
  • 再修改。

这和操作系统的写时复制机制一致,保证共享安全。

5、显存利用率高,吞吐提升

显存利用率提升后:

  • 能同时容纳更多请求;
  • batch size 更大;
  • GPU 利用率更高;
  • 吞吐显著提升。

vLLM 论文报告,PagedAttention 相比传统方式,吞吐可以提升 2 到 4 倍,尤其是长序列、大并发场景。

6、支持动态批处理和连续批处理

因为 block 可以灵活分配和回收:

  • 新请求可以随时加入;
  • 完成的请求可以立即释放 block;
  • 和连续批处理天然契合。

五、PagedAttention 的工作流程

1、预填充阶段

处理 prompt 时:

  • 计算所有 prompt token 的 K、V;
  • 按 block 大小切分;
  • 为每个逻辑 block 分配物理 block;
  • 写入 block table。

2、解码阶段

每生成一个新 token:

  • 计算当前 token 的 K、V;
  • 找到最后一个逻辑 block;
  • 如果没满,追加进去;
  • 如果满了,分配新物理 block;
  • 更新 block table。

3、注意力计算

计算注意力时:

  • 通过 block table 找到所有物理 block;
  • 按逻辑顺序读取 K、V;
  • 和当前 Q 做注意力。

因为 block 在物理上离散,所以叫 PagedAttention。

4、请求结束

请求完成后:

  • 释放它占用的所有物理 block;
  • 引用计数减一;
  • 如果引用计数为 0,block 回收到空闲池。

六、和传统 KV Cache 管理的对比

维度 传统方式 PagedAttention
分配方式 预分配连续显存 按需分配固定大小 block
内部碎片 严重 几乎消除
外部碎片 严重 基本消除
显存利用率 20% 到 40% 90% 以上
前缀共享 不支持 支持
Copy-on-Write 不支持 支持
动态批处理 不友好 天然支持
吞吐 较低 提升 2 到 4 倍

七、PagedAttention 的代价和限制

1、实现复杂

需要:

  • block table 管理;
  • 物理 block 分配和回收;
  • 引用计数;
  • Copy-on-Write;
  • 定制化的注意力 kernel。

2、Kernel 需要专门优化

因为 KV Cache 在物理上不连续,标准的注意力 kernel 不能直接用,需要专门实现 PagedAttention kernel。

3、block 大小需要调优

block 太大:

  • 内部碎片增加;
  • 共享粒度粗。

block 太小:

  • block table 变大;
  • 管理开销增加。

通常需要根据模型和负载调优。

4、对某些场景收益有限

如果请求长度都差不多,且都很短,传统方式浪费不大,PagedAttention 收益就没那么明显。


八、简单评价这道面试题

1、这道题的价值

  • 这是大模型推理优化中非常经典的一道题;
  • 一道题能考察 KV Cache 管理、显存碎片、分页思想、前缀共享等多个核心概念;
  • 区分度好,初级可能只知道 vLLM 快,中级能说清 PagedAttention 原理,高级能讲清 block table、Copy-on-Write 和实际调优;
  • 贴近实战,vLLM 是目前最主流的推理框架之一。

2、这道题的不足

  • 题目偏具体,如果候选人没用过 vLLM,可能答不上来;
  • 没有涉及和 Continuous Batching、Prefix Caching 的配合;
  • 对 kernel 实现细节考察不够;
  • 没有涉及多卡、分布式推理下的 PagedAttention。

3、建议的追问方向

  • PagedAttention 的 block 大小怎么选?太大太小各有什么问题?
  • block table 具体怎么设计?
  • Copy-on-Write 在什么场景下触发?
  • PagedAttention 和 Continuous Batching 怎么配合?
  • Prefix Caching 和 PagedAttention 是什么关系?
  • PagedAttention 在多卡推理中怎么扩展?

4、总体评价

这是一道很好的大模型推理优化面试题,适合考察候选人对 KV Cache 管理和 vLLM 核心技术的理解。它既能考察操作系统分页思想的迁移,也能延伸到工程实现和性能调优。如果候选人能把 PagedAttention 解决的问题、核心思想、block table 机制、前缀共享和 Copy-on-Write 都讲清楚,基本可以判断其具备大模型推理优化的扎实基础。


📌 面试天下网:一款便捷的大模型学习口袋书,让富士康流水线的打工人也能摸到改命逆天的机会!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...