ai-infra-interview-305

第 29 题:动态shape的算子如何优化?vllm中的PagedAttention是如何解决这个问题的?

题目

动态shape的算子如何优化?vllm中的PagedAttention是如何解决这个问题的?


完整讲解

一、动态 shape 的难点

动态 shape(batch/seq 等维度运行时才定)导致:一、 难以在编译期做满 静态分配与循环边界,易生成多份 kernel 或泛化代码;二、 不同 shape 下最优 tile、block 可能不同;三、 若按最大 shape 分配显存会浪费,按当前 shape 又可能频繁重编译或分配。

二、常见优化思路

三、vLLM 的 PagedAttention

PagedAttentionKV cache 切成固定大小的 block(如 16 个 token 一 block),物理上按 block 分配、逻辑上用 block 表 记录每个序列用了哪些 block;不同序列可共享未用 block、且 同一序列内 block 不必连续。这样 动态长度 只影响 block 个数,不触发「整块大 buffer 重分配」;显存利用率高、碎片少,且便于与 prefetch、并行解码配合。算子侧可针对「按 block 取 KV」做优化,而不是假设一大块连续 layout。


面试要点


记忆要点

  1. 动态 shape 优化:分派多 kernel、符号 shape、分页显存;避免按 max shape 一刀切。
  2. PagedAttention = KV 分 block、block 表管理;按需占 block,显存利用率高、适配变长。
  3. 算子侧可针对 block 级访问做优化,与分页策略一致。
返回模块 返回总览