题目重点:解释逻辑 token 位置到物理 KV 块的映射、内部碎片和前缀共享,区分它与局部注意力窗口。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 以 vLLM 论文的 PagedAttention 思路为技术参照:KV cache 分固定大小块,逻辑块通过映射表指向非连续物理块。
- 这是服务端内存管理策略,不自动改变模型原始全注意力可见位置;具体实现、抢占与共享策略依框架版本而异。
解题路线
- 传统每请求预留连续最大 KV 空间会浪费未用的 token 容量,还可能因碎片限制并发。PagedAttention 随序列增长按块分配,逻辑连续 token 可落在非连续物理内存。
- 注意力 kernel 根据逻辑到物理块映射读对应 K/V;请求完成后回收块。最后一块可能未填满,块越大管理元数据少但尾部碎片多,块越小管理开销更高。
- 相同前缀/beam 分支可共享只读物理块,在分叉需要修改时采用引用计数/写时复制;这有利于多请求前缀缓存,但必须在版本/位置/模型参数一致时才可复用。
- 与 sliding window 的区别:window 限制每个 query 能看哪些 token,可减计算与可保留 KV;paging 不改变可见性,而改善显存分配/共享,二者可组合。
- 评估请求长度分布、KV 浪费率、可同时运行请求数、吞吐、TTFT/TPOT 及块分配开销;不要直接套论文倍率到不同硬件。
手动走一遍
两个请求共享 1000-token prompt、之后各生成不同后续。共享前缀 KV 块可被两请求引用,新增 token 分配各自的新块;其中一个结束时只释放它独占块,共享块等另一请求也结束后回收。
规模与取舍
KV 原始内容仍随总缓存 token 数增长,块映射多一层元数据;内部碎片上界大致是每活动序列末块未使用的不到一个 block 容量。吞吐提升依请求长度和显存瓶颈,不能称 paging 降低 full attention 的理论 O(L²) 计算。
易错点与追问
容易失分的边界
- 把 PagedAttention 说成只看最近 W token。
- 共享 KV 后未处理写时复制,beam 分支互相覆盖。
- 块太大导致尾部浪费却仍宣称零碎片。
- 跨模型版本/位置编码复用前缀缓存。
- 只看显存利用率,不看块管理开销与 P95。
继续深挖
- block size 怎样影响尾部碎片与 kernel 访问?
- beam search 的共享前缀何时需要 copy-on-write?
- 分页和请求抢占/换出怎样协作?
- 与滑动窗口同时使用时哪些 KV 可真正删除?
技术参考
- PagedAttention/vLLM 原论文:非连续 KV 块、共享及内存利用率的技术依据。
