完整深入材料 · 保留原页与全部停点。回到相关主讲
逻辑上连续,物理上可以按块长出来
N55/b0 · 六个 token 的块表
接着刚才的增长问题,我们把一块缩成容纳四个token的状态。现在有六个token:逻辑块零保存第一到第四个,逻辑块一保存第五和第六个。看中间块表,逻辑零对应物理七,逻辑一对应物理一;再去下面找到这两个物理块。它们在显存里不必相邻,读取却仍遵守逻辑顺序。尾块还空两个位置。
教师备课:指图与模拟问答
指图与推进 · 不朗读依次指上方两块内容、中间0→7和1→1映射、下方物理7与1;把物理块编号和token编号分开。
N55/b1 · 先填尾块,再申请新块
现在第七、第八个token填满原来的尾块。第九个到来时,才申请物理块五,并增加逻辑二到物理五这条映射。旧的两块内容保留原位,不必为了增长把整段缓存搬家。新尾块仍空三个槽;按块分配管理得更细,并不表示完全没有空余。
教师备课:指图与模拟问答
指图与推进 · 不朗读推进到b1;先指逻辑块1中新增的7与8,再指逻辑块2的9、块表新增项及物理5的9。
N55/b2 · 按逻辑顺序查物理位置
假如这时要按顺序访问所有状态,就从逻辑零查到物理七,再从逻辑一查到物理一,最后从逻辑二查到物理五。图中数字依然是从一到九,没有因为物理地址分散而改变。PagedAttention及vLLM的分页思路处理的是这类请求缓存的分配和访问;前面FlashAttention处理的是注意力算子内部怎样少搬中间量,两者可以配合。
教师备课:指图与模拟问答
指图与推进 · 不朗读推进到b2,沿块表0、1、2逐项找到物理7、1、5;只指当前已存在的九个token及三个尾空槽。
N55/b3 · 结束后释放独占块
请求完成以后,属于它的独占块可以释放给后来者。共享块要先看还有谁在引用,不能因为一个请求结束就全部清掉。既然同一模型同时服务多个请求,我们就接着问:如果两个请求的开头逐位相同,开头这部分状态是否需要各存一份?
教师备课:指图与模拟问答
指图与推进 · 不朗读推进到b3,核对独占物理块恢复为空;停在释放后的布局,再引出下一页的相同前缀。
补充推导、边界与来源
把逻辑序列按 B 个 token 一块组织,长度 T 需 ceil(T/B) 个块。图示 B=4、T=6,因此用两块:逻辑0保存1–4,逻辑1保存5–6,末块空2槽。生成到7、8时补满第二块;第9个需要第三块,末块空3槽。
块表把逻辑0、1、2分别映射到物理7、1、5;读写按逻辑顺序定位,物理块无需连续。它不改变 token 的因果顺序,也不是完全零浪费;尾块仍有内部空余。请求完成可以释放独占块,共享块须检查引用计数;写入共享尾块时,具体实现还需写时复制等安排。
PagedAttention/vLLM 在请求缓存的分配与访问层面工作,FlashAttention 在注意力算子的中间量存取层面工作,两者可以配合。
本页证据与条件
分页教学构造:块长 4 token,长度 6→9,物理块 7 / 1 / 5