跳到内容

3 章 · 约 24 分钟

推理与训练负载

请求怎样到来,资源需求与等待如何被改写?

阅读中·实验未完成·考核未交

负载不是一条请求

到达过程会改写下界

单次请求的 M、F、R 是起点。真实服务里,请求持续到达、长度不一、有的带着很长的前缀、有的是多轮 Agent。同一套加速器,短问答和长文档的表现可以差出一个数量级。

Prefill 偏计算:一次吃进整段输入,算术强度高。Decode 偏带宽:每步几乎要把权重再读一遍,再扫一遍不断变长的 KV。把两者平均成“每秒多少 token”会掩盖首字时间和后续间隔的分裂。

Prefill

Decode

Prefill 一次吃进已知输入;decode 每步追加一个 token,并重读已有 KV。

排队、KV 容量、首字时间

连续到达时,系统像一个有限容量的服务员。KV 把并发上限钉死:96 GB 卡放下 Qwen3-8B 的 16.4 GB 权重后,剩下的空间按每条 8K 请求 1.125 GiB 来分。并发到顶,新请求只能排队。排队等待会直接叠进 TTFT。

提高 decode 吞吐的常用手段是把多条请求打成一批,共享一次权重读取。流体模型里这会抬高服务率;代价是每条请求都要等这一批结束,TPOT 上升。第 8 章会把这个权衡做成调度问题。

训练不是三倍前向就结束

粗算常说“训练 ≈ 3 × 前向”(前向、反向、参数更新相关的额外工作)。对 Qwen3-8B、8192 token、全参数、无重计算,逐项累计前向加反向约 431 TFLOPs,而 6ND 粗算约 403 TFLOPs。差距来自注意力配对、词表头范围和状态更新。

更关键的是状态。混合精度 Adam 每参数约 16 字节:BF16 权重与梯度、FP32 主权重、两份矩。Qwen3-8B 约 131 GB 常驻训练状态——一张能推理它的卡,远远装不下训练它。强化学习还要把生成和训练耦合:生成副本需要新权重,策略概率要和训练端对齐。

实验

Prefill / Decode

Prefill

230.58 ms

算力墙

读取 R/β2%
计算 F/Π100%

下限取两者较大者。较短的一根无论再缩短,只要没超过另一根,总时间就不动。

Decode 合计

1.15 s

带宽墙

读取 R/β100%
计算 F/Π3%

下限取两者较大者。较短的一根无论再缩短,只要没超过另一根,总时间就不动。

考核

第 3 章考核

4 题

  1. 1.同一条 Qwen3-8B 请求。为什么 prefill 常被算力限制,decode 常被带宽限制?

  2. 2.混合精度 Adam 训练 Qwen3-8B,常驻状态大约?

  3. 3.Agent 电话里,模型单步已经低于 10 ms,用户仍觉得“慢了一拍”。最可能的原因?

  4. 4.KV 把并发钉在 64 条。到达突然超过服务率时,首先变坏的是?

全部作答后交卷。