当前记忆,也要有地方放
V04/b0 · 六个 token,先用两块
逻辑连续的请求
| 逻辑块 | token | 物理块 |
|---|---|---|
| 0 | 1–4 | 7 |
| 1 | 5–6 | 1 |
| 2 | 9 | 5 |
可以分散的物理空间
其他
逻辑 1
其他
其他
其他
空闲
其他
逻辑 0
vLLM / PagedAttention 管理 KV 内存组织;FlashAttention 管理算子的 IO。两者可以配合。
开场的 K/V 不是抽象比喻,它们在服务时就是要占空间的缓存。为了画清楚,设一块能放四个 token 的状态。这条请求已有六个 token,逻辑块零装前四个,逻辑块一装后两个;实际可以分别放在物理块七和一。块表记录位置,读取时仍按连续的逻辑顺序走。
教师备课:指图与模拟问答
指图与推进 · 不朗读教师指向当前高亮对象,随后推进。
V04/b1 · 第九个 token 到来
逻辑连续的请求
| 逻辑块 | token | 物理块 |
|---|---|---|
| 0 | 1–4 | 7 |
| 1 | 5–8 | 1 |
| 2 | 9 | 5 |
可以分散的物理空间
其他
逻辑 1
其他
其他
其他
逻辑 2
其他
逻辑 0
vLLM / PagedAttention 管理 KV 内存组织;FlashAttention 管理算子的 IO。两者可以配合。
第七、第八个 token 先填满第二块;第九个到来,再申请物理块五,并登记新的对应。我们不必把旧状态整体搬走,也不必一开始猜最终回答多长、预留一大段连续空间。注意,新块里还会有空槽,按需分配没有消除所有浪费。
教师备课:指图与模拟问答
指图与推进 · 不朗读教师指向当前高亮对象,随后推进。
V04/b2 · 两项优化可以配合
逻辑连续的请求
| 逻辑块 | token | 物理块 |
|---|---|---|
| 0 | 1–4 | 7 |
| 1 | 5–8 | 1 |
| 2 | 9 | 5 |
可以分散的物理空间
其他
逻辑 1
其他
其他
其他
逻辑 2
其他
逻辑 0
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 · 连续逻辑位置映射到分散物理块 · 非生产默认块长