真实面经题目 · 原创解析
PagedAttention 如何改善 LLM 长上下文推理的 KV Cache 管理?
这题考 PagedAttention 如何改善长上下文 LLM 推理中的 KV Cache 管理,回答重点是块化分页、减少碎片、支持连续批处理和提升显存利用率。
PagedAttention 解决的是 LLM 推理时 KV Cache 随序列长度增长带来的显存管理问题。普通实现常为每个请求预留连续 KV 内存,不同请求长度差异很大,容易出现预留浪费、内存碎片和动态扩容困难。PagedAttention 借鉴操作系统分页思想,把每个序列的 KV Cache 切成固定大小的 block,逻辑上仍是连续 token,物理上可以分散存放,通过 block table 做映射。这样不同请求可以按实际生成进度增量分配 block,释放时也按 block 回收,减少长短请求混跑时的显存浪费。它还方便服务端做 continuous batching,因为请求可以在不同时间进入和退出批次,不必要求整段 KV 连续移动。回答时要补充代价:block size、映射表访问、调度策略和 cache 命中都会影响性能,PagedAttention 提升的是显存利用和批处理能力,不是改变 Attention 的数学定义。
自回归解码时,每生成一个 token 都会保留各层 attention 的 key/value,后续 token 可以复用,避免重复计算历史上下文。长上下文和大 batch 下,KV Cache 往往成为显存大头,并且随请求长度动态增长。
如果为每个请求分配一大段连续 KV 内存,就需要提前估计最大长度。实际请求有长有短,短请求会浪费预留空间,长请求可能需要扩容;请求结束后还可能留下碎片,影响后续批次的显存利用。
PagedAttention 把序列的 KV Cache 切成固定大小的块。逻辑 token 顺序保持不变,但物理 block 可以分散在显存中,通过 block table 找到对应位置。新增 token 时按需分配新 block,结束后按 block 释放。
在线推理服务中,请求会不断进入和完成。块化 KV 让不同长度、不同阶段的请求更容易混合成连续批处理,减少因为单个长请求或内存连续性要求造成的空等和显存浪费。
PagedAttention 不改变注意力计算公式,它主要改善内存分配和访问组织。收益通常体现在可容纳更多并发、更少碎片、更高 batch 利用率和更稳定的服务吞吐,而不是让单个 token 的数学计算变少。
block 太小会增加映射和管理开销,太大又会带来块内浪费。实际系统还要考虑 prefill/decode 调度、KV 复用、抢占、复制、prefix cache 和不同长度请求混批策略。
在线请求长度不一、到达时间不同、完成时间不同。块化 KV 能按需扩展和回收,更适合 continuous batching。
注意力计算语义不变,区别在于 KV Cache 的物理存储和寻址方式,从连续大段内存变成分页 block 管理。
block 小会降低块内浪费但增加映射管理开销;block 大管理更简单但可能浪费显存,需要结合模型、上下文长度和并发调优。
不能。它主要管理 KV Cache,不减少模型参数本身的显存占用。权重显存要靠量化、并行切分或卸载等方式处理。