返回课堂

当前记忆,也要有地方放

V04/b0 · 六个 token,先用两块

教学块长 4 token · 6 个 token · 需要 2 个块

逻辑连续的请求

逻辑块token物理块
01–47
15–61
295

可以分散的物理空间

块 0
其他
块 1
逻辑 1
块 2
其他
块 3
其他
块 4
其他
块 5
空闲
块 6
其他
块 7
逻辑 0
6 token 先申请两块;末块空两个槽。

vLLM / PagedAttention 管理 KV 内存组织;FlashAttention 管理算子的 IO。两者可以配合。

六个 token,先用两块

开场的 K/V 不是抽象比喻,它们在服务时就是要占空间的缓存。为了画清楚,设一块能放四个 token 的状态。这条请求已有六个 token,逻辑块零装前四个,逻辑块一装后两个;实际可以分别放在物理块七和一。块表记录位置,读取时仍按连续的逻辑顺序走。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

V04/b1 · 第九个 token 到来

教学块长 4 token · 9 个 token · 需要 3 个块

逻辑连续的请求

逻辑块token物理块
01–47
15–81
295

可以分散的物理空间

块 0
其他
块 1
逻辑 1
块 2
其他
块 3
其他
块 4
其他
块 5
逻辑 2
块 6
其他
块 7
逻辑 0
第 7、8 个 token 填满第二块;第 9 个到来再申请第三块。

vLLM / PagedAttention 管理 KV 内存组织;FlashAttention 管理算子的 IO。两者可以配合。

第九个 token 到来

第七、第八个 token 先填满第二块;第九个到来,再申请物理块五,并登记新的对应。我们不必把旧状态整体搬走,也不必一开始猜最终回答多长、预留一大段连续空间。注意,新块里还会有空槽,按需分配没有消除所有浪费。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

V04/b2 · 两项优化可以配合

教学块长 4 token · 9 个 token · 需要 3 个块

逻辑连续的请求

逻辑块token物理块
01–47
15–81
295

可以分散的物理空间

块 0
其他
块 1
逻辑 1
块 2
其他
块 3
其他
块 4
其他
块 5
逻辑 2
块 6
其他
块 7
逻辑 0
PagedAttention 管 KV 空间;FlashAttention 管算子 IO。末块仍有 3 个空槽。

vLLM / PagedAttention 管理 KV 内存组织;FlashAttention 管理算子的 IO。两者可以配合。

两项优化可以配合

这就是 vLLM 中 PagedAttention 所处理的空间组织问题。它与刚才 FlashAttention 的职责不同:一个管理请求的 K/V 放在哪里,一个组织注意力算子怎样少搬数据,两者可以配合。完整缓存容量和精确前缀共享的账本放在说明里。现在多个请求都有各自的状态了;有人已经答完,排队者为什么还要等?

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

补充推导、边界与来源

当前请求的每个新 token 会形成跨层 K/V。它们随输入与生成增长,多条请求通常各自持有状态;共享模型权重并不自动共享这些不同的当前记忆。

教学块长设为 4 token。6 token 的请求占用两个逻辑块:块 0 存前四个位置,块 1 存后两个位置并余两空位;它们分别指向物理块 7、1。达到 8 token 时两块正好填满,第 9 个 token 需要逻辑块 2,映射到新分配的物理块 5。

逻辑位置按序增长,物理块不要求挨在一起,访问时根据块表找到对应存储。长度 T、块长 B 时需 ceil(T/B) 块,最后一块的浪费小于 B 个槽位;还需考虑块表和管理开销。vLLM 的 PagedAttention 解决 KV 的分配、共享与寻址组织;FlashAttention 解决 attention 算子内部的 I/O 执行,两者作用层次不同,可以结合。4 token 是本课为看清过程选的块长,不是生产默认设置。

KV完整容量账本 保留32层、8个KV头、头维度128、BF16的具体配置:每token 128 KiB,8192 token为1 GiB。精确前缀共享 则比较完全兼容的前缀状态何时可复用;它与这里的块分配是两个相连但不同的问题。

本页证据与条件

教学块长 4 token · 连续逻辑位置映射到分散物理块 · 非生产默认块长

进入主题正文