✨ 复制成功!

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

📋 已复制到剪贴板:

在大模型推理中,KV Cache 的 CUDA 管理是一个关键问题。PagedAttention 的 kernel 相比传统 Attention kernel,在显存访问模式上有什么不同?它为什么能提升显存利用率和吞吐?

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

一、核心结论

PagedAttention 的 kernel 和传统 Attention kernel 最大的区别在于:

传统 Attention kernel 假设 KV Cache 在显存中是一段连续的、按序列顺序排列的空间;PagedAttention kernel 则把 KV Cache 切成固定大小的 block,通过 block table 做逻辑到物理的映射,允许 KV Cache 在物理显存上离散存储。

这个变化带来的直接结果是:

  • 显存碎片大幅减少,利用率从 20%–40% 提升到 90% 以上;
  • 支持前缀共享和 Copy-on-Write;
  • 能同时服务更多请求,吞吐提升 2–4 倍。

一句话总结:PagedAttention 把操作系统的分页思想搬到了 KV Cache 管理上,让 Attention kernel 从“访问连续内存”变成“通过 block table 访问离散内存”。


二、传统 Attention kernel 的显存访问模式

1、连续预分配

传统推理框架对每个请求:

  • 按最大可能序列长度预分配一段连续显存;
  • 这段显存存放该请求所有 token 的 K、V;
  • K 和 V 通常按层、按头、按 token 顺序排列。

访问时,kernel 直接按连续地址读取。

2、访问模式

对于第 $t$ 个 token 的注意力计算:

  • 需要读取前 $t$ 个 token 的所有 K、V;
  • 地址是连续的;
  • 步长固定。

这种模式对 kernel 友好:

  • 合并访问;
  • 缓存友好;
  • 实现简单。

3、问题

连续预分配带来:

  • 内部碎片:预分配长度远大于实际长度;
  • 外部碎片:不同请求长度不同,显存被切碎;
  • 无法共享:相同前缀不能共享;
  • 利用率低:20%–40%。

三、PagedAttention kernel 的显存访问模式

1、分块存储

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

  • 每个 block 存 $B$ 个 token 的 K、V;
  • block 是显存分配的基本单位;
  • 逻辑上连续的 KV Cache 在物理上可以离散。

2、Block Table

每个请求维护一张 block table:

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

kernel 访问时:

  • 先查 block table;
  • 找到物理 block;
  • 再读取 block 内的 K、V。

3、访问模式的变化

传统模式:

  • 一次连续读取;
  • 地址 = 基址 + 偏移。

PagedAttention 模式:

  • 按 block 读取;
  • 每个 block 地址来自 block table;
  • block 之间不连续。

这相当于把“连续数组访问”变成“间接索引访问”。

4、对 kernel 的影响

  • 不能直接用标准连续访存的 kernel;
  • 需要定制 kernel,支持 block table 查表;
  • 需要处理 block 边界;
  • 需要支持不同请求的 block 数量不同。

四、为什么能提升显存利用率

1、几乎消除内部碎片

按需分配:

  • 生成新 token 才分配 block;
  • 最后一个 block 可能没满,但浪费最多一个 block;
  • 平均浪费约 $B/2$。

相比预分配最大长度,浪费大幅降低。

2、消除外部碎片

block 固定大小:

  • 任何空闲 block 可以分配给任何请求;
  • 不需要连续空间;
  • 不会出现“总空间够但没有连续空间”的问题。

3、支持前缀共享

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

  • 逻辑 block 指向相同物理 block;
  • 引用计数管理;
  • 避免重复存储。

典型场景:

  • 相同 system prompt;
  • few-shot 示例相同;
  • 并行采样、beam search。

4、支持 Copy-on-Write

共享 block 被修改时:

  • 复制一份新 block;
  • 再修改;
  • 保证共享安全。

5、利用率提升

综合以上:

  • 显存利用率从 20%–40% 提升到 90% 以上;
  • 同样显存能服务更多请求。

五、为什么能提升吞吐

1、更多并发请求

显存利用率提升后:

  • 能同时容纳更多请求;
  • batch size 更大;
  • GPU 利用率更高。

2、减少显存分配开销

block 分配和回收是固定大小:

  • 分配快;
  • 碎片少;
  • 不需要频繁整理。

3、支持连续批处理

block 可以灵活分配和回收:

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

4、减少重复计算

前缀共享后:

  • 相同前缀只算一次;
  • 多个请求复用;
  • 节省计算和显存。

5、提升 Decode 阶段效率

Decode 阶段是显存带宽受限:

  • 读取 KV Cache 是主要开销;
  • PagedAttention 让 KV Cache 布局更紧凑;
  • 减少无效读取;
  • 提升有效带宽利用率。

6、实测效果

vLLM 论文报告:

  • 相比传统方式,吞吐提升 2–4 倍;
  • 长序列、大并发下更明显;
  • 显存利用率显著提升。

六、PagedAttention kernel 的实现要点

1、Block Table 查表

kernel 中需要:

  • 读取 block table;
  • 根据逻辑 block 找到物理 block;
  • 计算实际地址。

2、Block 内连续访问

虽然 block 之间离散,但 block 内连续:

  • 可以合并访问;
  • 可以利用缓存;
  • 减少访存开销。

3、处理变长序列

不同请求:

  • block 数量不同;
  • 最后一个 block 可能未满;
  • 需要边界处理。

4、支持多头

每个头:

  • 有独立的 KV;
  • block 布局可能按头组织;
  • kernel 需要正确处理。

5、和 FlashAttention 结合

现代实现:

  • PagedAttention 负责 KV Cache 管理;
  • FlashAttention 负责注意力计算;
  • 两者结合,兼顾显存和速度。

6、定制 kernel

因为访问模式特殊:

  • 不能直接用标准 kernel;
  • 需要专门实现;
  • 需要针对 GPU 架构优化。

七、和传统 Attention kernel 的对比

维度 传统 Attention kernel PagedAttention kernel
KV Cache 布局 连续预分配 固定大小 block,离散
地址计算 基址 + 偏移 block table 查表
内部碎片 严重 几乎消除
外部碎片 严重 基本消除
前缀共享 不支持 支持
Copy-on-Write 不支持 支持
显存利用率 20%–40% 90% 以上
吞吐 较低 提升 2–4 倍
kernel 复杂度 简单 复杂

八、代价和限制

1、实现复杂

  • block table 管理;
  • 物理 block 分配回收;
  • 引用计数;
  • Copy-on-Write;
  • 定制 kernel。

2、Kernel 需要专门优化

  • 间接索引访存;
  • block 边界处理;
  • 不同 GPU 架构适配。

3、Block 大小需要调优

  • 太大:内部碎片增加;
  • 太小:block table 变大,管理开销增加。

4、对短请求收益有限

如果请求都很短且长度相近:

  • 传统方式浪费不大;
  • PagedAttention 收益有限。

九、简单评价这道面试题

1、这道题的价值

  • 这是大模型推理优化中非常核心的一道题;
  • 一道题能考察 KV Cache 管理、显存访问模式、分页思想和吞吐优化;
  • 区分度好,初级可能只知道 vLLM 快,中级能说清 PagedAttention 原理,高级能讲清 kernel 访问模式和 block table;
  • 贴近实战,vLLM 是目前最主流的推理框架之一。

2、这道题的不足

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

3、建议的追问方向

  • PagedAttention 的 block 大小怎么选?
  • block table 具体怎么设计?
  • Copy-on-Write 在什么场景下触发?
  • PagedAttention 和 Continuous Batching 怎么配合?
  • PagedAttention 和 FlashAttention 怎么结合?
  • PagedAttention 在多卡推理中怎么扩展?

4、总体评价

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


📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...