返回课堂

权重能共享,上下文状态仍要付成本

本页问题

KV 本体估算为 M=2LTh_KVd_headb。指定配置每 token 为 128 KiB,8192 个已缓存 token 为 1 GiB,八份互不共享的同长请求为 8 GiB。长输入、长输出与并发分别增加不同工作,容量、首 token 等待和逐 token 延迟应分开判断。

RC-V2/b0 · 指定配置,再说每token成本

指定配置:32层 · 8组 KV · 每组128维 · BF16128 KiB / token各层 K 与 V 两份二进制 KiB / GiB缓存节省旧位置重算,仍有读取和容量成本。
指定配置,再说每token成本

给缓存计量之前,先把配置说清:三十二层、每层八组 K/V、每组一百二十八维,BF16 每数两个字节。每个 token 要保存 K 与 V 两份,乘上层数、组数、维度和字节数,得到一百二十八 KiB。这个量来自指定配置,不是所有八十亿参数模型的固定规格。

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

指图与推进 · 不朗读指规格行与128KiB/token,分别指K/V两份和存储精度。

本态来源与条件

指定配置的教学算例:32 层、8 KV 组、128 维、BF16;二进制 KiB / GiB

RC-V2/b1 · 长度和独立请求进入账本

指定配置:32层 · 8组 KV · 每组128维 · BF16128 KiB / token各层 K 与 V 两份二进制 KiB / GiB8192 token → 1 GiB输入 + 已进入缓存的生成8个独立请求 → 8 GiB仅KV本体估算一份权重可以共享;独立上下文状态各自保存。缓存节省旧位置重算,仍有读取和容量成本。
长度和独立请求进入账本

如果输入与已经进入缓存的生成部分合计八千一百九十二 token,KV 本体约一 GiB;八个不共享上下文的同长请求就是八 GiB。权重可以共用一份,当前状态却各自对应不同请求。这里用二进制 KiB/GiB,和前面训练账本的十进制 GB 分开。

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

指图与推进 · 不朗读指8192→1GiB,再指共享权重与8份独立KV。

本态来源与条件

指定配置的教学算例:32 层、8 KV 组、128 维、BF16;二进制 KiB / GiB

RC-V2/b2 · 把慢拆成三个问题

指定配置:32层 · 8组 KV · 每组128维 · BF16128 KiB / token各层 K 与 V 两份二进制 KiB / GiB8192 token → 1 GiB输入 + 已进入缓存的生成8个独立请求 → 8 GiB仅KV本体估算一份权重可以共享;独立上下文状态各自保存。长输入prefill + 历史状态长输出顺序 decode + KV增长多人并发排队 + 容量压力
把慢拆成三个问题

所以要把“慢”拆开。长输入增加 prefill 计算与历史状态;长输出增加顺序 decode 轮次,并继续增长 KV;高并发还叠加排队与容量压力。同一请求可能同时遇到几种压力,先定位增加了哪类工作。执行安排帮助计算完成,却没有给原 A/B 记录补出任何新测量。

进一步解释

深入材料按作用对象分组:分页改变 KV 物理分配;精确前缀共享减少兼容的重复状态与计算;连续批在生成轮间接纳请求;prefill/decode 分离分别配置阶段资源并支付状态交接成本。这些不是每个请求必经的顺序技术栈。

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

指图与推进 · 不朗读指长输入、长输出、并发三列,分别对照prefill、decode和容量/排队。

本态来源与条件

指定配置的教学算例:32 层、8 KV 组、128 维、BF16;二进制 KiB / GiB

接下来

系统帮助执行,却不能补出未测事实。

补充推导、边界与来源

进一步阅读

条件与来源

以下从计算对象、条件与原始证据继续展开。

原 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。

本页证据与条件

指定配置的教学算例:32 层、8 KV 组、128 维、BF16;二进制 KiB / GiB

进入主题正文