本页学习说明
KV 本体估算为 M=2LTh_KVd_headb。指定配置每 token 为 128 KiB,8192 个已缓存 token 为 1 GiB,八份互不共享的同长请求为 8 GiB。长输入、长输出与并发分别增加不同工作,容量、首 token 等待和逐 token 延迟应分开判断。
进一步阅读
条件与来源
以下从计算对象、条件与原始证据继续展开。
原 N54:一个请求的当前记忆,可以占到多少空间?
本课指定教学配置为 L=32 层、每层 h_KV=8 组、每组维度 d_head=128,每数 BF16 占 b=2 bytes。KV 的常用存储估算为 $M_{KV}=2LTh_{KV}d_{head}b$,T 是已经进入缓存的输入与生成 token 总长度。首项 2 表示 K 与 V 两份,最后的 b 表示每数存储字节。
每 token:2×32×8×128×2=131072 bytes=128 KiB。8192 token:1073741824 bytes=1 GiB;32768 token=4 GiB。8 个互不共享、各长 8192 token 的请求共需 8 GiB KV。权重可以共享,当前上下文状态不能任意合并。
KiB=2¹⁰ bytes,GiB=2³⁰ bytes;与训练账本的十进制 GB 分开。GQA 是这种减少实际 KV 头/组数的一类架构安排,但本配置不是所有 8B 模型的固定规格。
原 KV 容量页 · 完整服务主题 · PagedAttention §2。
原 N55:逻辑上连续,物理上可以按块长出来
把逻辑序列按 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 在注意力算子的中间量存取层面工作,两者可以配合。
原分页图与说明 · 服务主题 · PagedAttention §4.3 / Fig.6,物理 p6。
原 N56:相同前缀,可以接出两条不同的后续
按 N54 的128 KiB/token配置,两个请求各含4096 token共同前缀与2048 token独立尾部。未共享时两份6144 token共12288 token,即1.5 GiB;共享一份前缀后总量4096+2×2048=8192 token,即1 GiB。
精确前缀复用要求同模型、相同 token 序列和兼容的位置及计算条件。文本含义相似不保证 K/V 相同;前文或前缀某个 token 改变后,从改变位置起的后续状态需要重新判断,不能把全段旧缓存当作可原样复用。共同前缀之前未改变且条件兼容的部分仍可独立核对。
两个尾部各有自己的状态和生成路径。共享节省重复 KV,也可能省重复 prefill,但不表示两条请求的全部计算合并。旧材料中的三请求2.25→1.25 GiB是另一构造,与原 N56 材料两请求1.5→1 GiB分开。
前缀匹配与 RadixAttention / SGLang · 服务主题 · PagedAttention §4.4,物理 p7–8。
原 N57:A 已经答完,C 为什么还在等待?
R_A、R_B、R_C 是服务请求标识,与实验方案A/B无关。三个请求需要的生成轮数分别为2、4、2,且为隔离接纳规则,假设入场 prefill 已完成;每轮可安排两个示意生成槽。
固定整批策略:前两轮R_A/R_B并行,R_A结束后其独占状态可释放,但R_C要等R_B整批结束,所以第3/4轮一个槽空闲,第5/6轮R_C才生成。图中的槽表示调度机会,不是GPU为每请求永久划定的物理位置。
没有给每轮规定相同实测毫秒,也没有测量GPU吞吐,因此不能直接将轮数作硬件加速比。
原批处理演示 · PagedAttention §2.3,物理 p3。
原 N58:每轮接纳新请求,把空出来的机会用上
连续批处理在生成轮次间调整活跃请求集合。此例保持N57的请求长度不变:前两轮R_A/R_B共同执行,R_A完成后第三轮R_C补入,R_B不中断;第四轮R_B/R_C均完成。总生成工作量不变,R_C比固定整批少等两轮。
六轮变四轮是调度构造,不是实测1.5倍GPU加速。真实轮耗时受活跃批量、输入处理、内存访问、算子及设备影响。新请求接纳还需要prefill准备、KV容量、延迟目标满足条件,不能只看是否有空格。
评估实际系统时区分排队时间、首token延迟、逐token延迟与吞吐;提高吞吐的安排可能增加个别请求等待。
原调度页 · 完整服务正文 · PagedAttention §2.3 / §4.5。
原 N59:输入很长、输出很长、人很多,是三种不同压力
长输入、长输出与高并发不是同一个问题。长输入增加prefill计算与状态;长输出增加顺序decode轮次并持续增长KV;高并发叠加排队、批次安排和容量压力。
在同设备上,大块prefill工作可能干扰正在decode的请求。P/D分离把两类阶段安排到不同资源,prefill结束后交接K/V等必要状态,decode继续产生输出。它允许分别配置与调度资源,也增加状态传输、模型驻留和协调成本,效果依赖输入/输出分布、请求量、设备及互联。不能因图被分成两栏就断言更快。
首token等待与后续逐token延迟应同时考察。Dynamo、LMCache、Mooncake等组件按实际职责在既有正文展开,不组成每次请求必须依次安装的技术栈。
服务技术栈与资源交接 · 完整服务主题 · DistServe §2.1–2.3 / §3.3。
阅读完整讲义