AI Infra · 第 3 章图解

推理与训练负载

平均数相同,负载不一定相同。两分钟里同样到达 480 条请求、平均长度也一样:一种始终均匀混合,处理能力绰绰有余;另一种后一分钟集中生成长回答,就积压了 11 万步 decode 工作。本章在第 2 章“单次调用要做多少”之外再问三件事:工作何时到达,哪些步骤必须等待,什么才算完成。

两张 RTX PRO 6000 每秒最多完成约 5,591 个 decode 步(虚线 = 100%)。三段的平均请求率都是每秒 4 条,只有长输入、长输出两类请求的占比不同。
输入处理 / prefill 生成 / decode 状态驻留(KV、显存) 工具 / 环境 / 反馈 等待 / 空闲 积压 / 超限
页面里的计算器默认值都取自书中算例,结果和书一致;为演示自设的数值都标了“示意”。带 ▶ 的图可以按时间轴播放。
3.1

从单次请求到持续到达的负载

先看一个请求:恢复 S 个上下文 token,处理 P 个新输入,返回 G 个 token。调用链是 1 次 prefill + (G−1) 次 decode。首个输出来自 prefill;第 j 次 decode(j 从 0 计)开始时已有上下文 S+P+j。

图 3-1 · 一次 prefill,接着逐个 decode

两个阶段用同一套权重,需求却不同:prefill 一次读权重能和 B·P 行输入做乘加,通常受算力限制;低并发 decode 只为 B 行读整组权重,通常受显存带宽限制。只把 token 数相加,会丢掉“它属于哪个阶段、何时能执行”。

练习 3-1 · 总输出相同,请求数不同

每条输入 1,024 · 总输出 1,024
假设多条请求同步生成、每批共享一次权重读取,prefill 也合成一批。

3.1.2 先写清什么算完成,再决定统计什么

时间线上标三个事件:到达 ta、首个 token t1、最后一个 token tG。

TTTFT = t1 − ta  Trequest = tG − ta  Ttoken = (tG − t1) / (G − 1)

图 3-2 · 缩短哪一段,只改变包含它的指标

数值为示意

拖“排队”:TTFT 和完整请求时间一起变,token 间隔纹丝不动。reasoning 模型还要另记“首个有用输出”,因为首个内部思考 token 出现时,用户未必看到答案;语音还要再经过解码与设备缓冲。

要回答的问题需要的指标或记录
多久开始回应?TTFT;reasoning 另记首个有用输出
输出是否连续?逐 token/逐块间隔及其分布
多久把事情做完?完整请求时间、完整任务时间
每秒完成多少合格任务?质量与时限要求下的有效吞吐
得到一个成功结果花多少?全部尝试的模型、工具、环境成本 ÷ 成功任务数
等待期间还占着什么?状态所属请求与模型版本、大小、位置、驻留时间

p95:最近秩法

n 个观测从小到大排,取第 ⌈0.95n⌉ 个。排队、首响应、完整请求要分别排序,才看得出长等待落在哪一段。

等待也占容量:状态占用面积

AM = ∫ M(t) dt (单位 byte·s)  稳定时等待中的平均占用 ≈ λ · M0 · τ

图 3-3 · 状态没变大,但这段时间别人用不了

练习 3-2 后半

成本也一样要按“完成”来算:成功任务成本 = 所有尝试(含失败生成、工具测试、环境运行)的成本 ÷ 成功任务数。一批零成功时,只能记录消耗与失败原因,不能报出成功成本。

3.1.3 请求分布:空闲的算力存不起来

负载描述要保留到达时间与输入、输出长度的联合分布。不同客户有的主要交长文档、有的主要要长回答,各自速率一变,整体负载的形状就变(ServeGen 在生产服务中观察到了这种现象)。

例题 3-1 · 平均处理能力够,为什么还积压

长输入类 8192→256 · 长输出类 1024→2048 · 每秒 4 条

Qk+1 = max(0, Qk + Ak − μkΔt)  突发时积压 (λw−μ)τ,排空 (λw−μ)τ/μ

处理率 μ 是显存带宽给的物理上限:每步 decode 至少读一遍 15.14 GB 共享权重,再读 64 条序列的旧 KV(每 token 144 KiB,平均上下文按 decode 步加权约 2,742)。一步读写 41.02 GB、耗时 22.89 ms,一卡每秒约 2,795.66 步(书中取值)。prefill 能力另算,实测只会更低。

真实回放 · KV 池满了,空着的算力也接不了新请求

Qwen3-8B · vLLM 0.23 · 1 张 RTX PRO 6000 · KV 池 24 GiB · 64 序列 · 前缀缓存关
实际观察均匀混合前 9:1、后 1:9
完整请求 p95约 299.4 s约 299.4 s
TTFT p95242.9 s258.9 s
初次调度等待 p95242.4 s258.4 s
最后完成时刻419.8 s418.7 s
抢占事件6224

两次都大量积压,这在带宽下界里就能预见:一卡每秒最多约 2,796 步,低于均匀混合的 4,604 步平均需求,还要兼做 prefill。480 条共 552,480 步 decode,至少 197.6 s,而请求 120 s 内就全到了。两次 KV 池都到过 100%:输入输出的时段组合改变了状态何时释放、新请求何时被接纳,于是整批完成时间接近,TTFT 却差约 16 秒。

排队既可能因为算得不够快,也可能因为状态没释放:KV 池填满后,就算部分计算单元空着,新请求也得等。

3.2

多轮交互与 Agent 任务

多轮对话的下一次请求通常带着之前的上下文。第 i 轮输入 Ii、可复用前缀 Ki,则本轮新处理 Pi = Ii − Ki,恢复 Si = Ki。投影和 FFN 只算新 token,注意力仍要让新查询访问完整前缀。

缓存复用减少了重算,却没有把旧上下文从后续计算里删掉,而且要求系统继续保留旧状态。

改了多少不要紧,改在哪儿才要紧

已有上下文 2,000 token

末尾追加不动原前缀;摘要替换一段旧内容,替换点之后都要从新前缀重算;工具定义或模板一变,可能更早就失配。追加有利复用,却让陈旧内容继续占上下文;替换能缩短上下文,却要重建缓存(第 8 章)。所以负载记录还应包含稳定前缀、改写位置、分支依赖和复用间隔。

四轮代码修复任务的缓存收益

思考模式开启的真实轨迹复算

四轮累计输入 5,297 token,命中 4,480、未命中 817。第二轮输入 1,443、命中 1,392,只需处理 51 个新 token,但之后的 decode 仍要访问它的全部上下文状态。

3.2.2 多花计算换正确率,值不值

推理时多花计算有三种方式:延长一条回答的思考、同时生成多份再选、按难度分配次数和长度。判断标准只有一个:每个成功任务的成本。

Csuccess = c / p  新方法更省 ⇔ p2/p1 > c2/c1

图 3-9 · 各尝试 100 次:失败也进分子

练习 3-3

单价降到 1/10,成功成本反而涨

只计模型成本、假定重试分布稳定时:0.1 × 20 × 0.5 / 0.8 = 1.25。价格下降、质量提高和成功成本上升可以同时发生。

延长生成不等于做对

一次数学题实验:四道题各生成多份回答,输出上限从 1024 提到 4096 token,两轮尝试仍没有一份最终答案通过评分。资源花了,任务没完成。

检查答案要分两类错误:格式正确但算错,与数值正确但缺字段。分开才知道该调生成方式、输出约束还是解题过程。

3.2.3 智能体:模型、工具、再模型

代码 Agent 先生成修改,工具写文件、跑测试,模型再读测试结果决定下一步。工具日志成为下一轮输入:少一点无关日志,就少一点下一轮的 prefill 和上下文状态;少一次无效修改,就少一个循环。检索增强问答同理:质量相同时,检索返回越少,后续 prefill、KV 和读取越省。

代码任务轨迹 · 修复区间合并函数(思考模式开启)

任务总时间76.510 s
模型调用合计76.294 s
工具执行合计0.078 s
控制与交接(差额)0.138 s

四轮依次是:输出截断、写文件、运行测试、结束。首轮截断的等待也算进任务时间。工具很快,所以工具与交接的条在这个尺度上几乎看不见;它们在各轮之间的具体分配书中未给出,图中位置为示意。

观察思考模式关闭思考模式开启
模型调用轮数124
总输出 token7652,733
模型调用实际耗时之和13.156 s76.294 s
工具执行实际耗时之和0.476 s0.078 s
返回值正确 + 输入不变检查315/10131013/1013
额外检查:返回子列表无别名1/1013710/1013

关闭思考时 12 轮里读文件 1 次、改写 5 次、跑测试 6 次,缓存命中率约 83.4%,仍没修好。开启后原定两项检查全过,但额外的无别名检查只过了 710 个,另 303 个仍与输入共享子列表:完成标准必须具体到可执行的验证。

例题 3-2 · Amdahl:加速首轮能省多少

练习 3-4 后半

首轮占总时间约 47.5%,减半省约 23.8%;其余阶段仍约 40.1 s。局部加速倍数再高,收益也被它原来所占的比例封顶。

3.2.4 分支、工具等待与状态驻留

把模型调用和工具执行的先后画成依赖图:串行路径时间相加,独立分支可以同时开始,汇合点等较慢的那支。累计耗时最长的路径是关键路径,决定任务最早何时完成。

图 3-11 / 3-12 · 工具有没有依赖

练习 3-4 设定:仅在等工具返回时占 1 GiB 状态。并行把关键路径从 21 s 缩到 15 s,工具总工作量仍是 16 s。若工具换成 10 s 的编译,模型暂停期间下一轮上下文一直占着容量,多个任务同时等待时按任务累加。

图 3-13 · 分支共享前缀

长度为示意

总状态 cKV(H₀ + Σhi),cKV 取 Qwen3-8B 的 144 KiB/token。并行缩短关键路径,也让更多分支的状态同时占内存。

图 3-14 · 负载推动结构:V4.1 Flash 的 CED

Agent 常是“前缀未命中、输入多、输出短”。V4.1 用 20 层因果编码器 + 20 层解码器:大部分输入只走编码器,解码器全局 KV 从编码器末层投影;为建解码器 SWA 状态,提示末尾最多 128 token 重新送入解码器。输出 token 仍走全部 40 层。只比专家层:40P 对 20P + 20·min(P,128)。

3.3

多模态与实时交互

图片进入语言模型前要经过预处理、视觉编码和投影。记 E 为视觉编码、P 为语言 prefill、D 为 decode,视觉问答就是 E → P → D。图片大小决定 E 的工作量,编码后的视觉 token 数决定语言部分的工作量,两者分开算。

nv = Himg·Wimg / (ppatch² · r²)

图 3-15 / 3-16 · 像素 → 块 → 视觉 token → 三种数据

Qwen3-VL-4B:16×16 patch,2×2 合并;DeepStack 把三个中间视觉层与最终层特征拼起来,每个视觉 token 是 4 × 2560 维 BF16;语言 KV 每 token 144 KiB。一张图视觉编码矩阵运算约 1.310 TFLOPs。练习 3-5 把边长改到 1280 试试;“四张图 + 400 文本 token”应得 EC 31.25 MiB、输入 KV 281.25 MiB。

对象本例大小(640×640)能否复用取决于
压缩截图0.8 MB(给定输入)同一文件内容
完整编码结果 EC7.8125 MiB图片、预处理、编码器与输出格式一致
视觉 token 的语言 KV56.25 MiB还依赖先前上下文、顺序、位置与模型

特征拼接增加的是宽度,图片变大增加的是 token 数。边长加倍,视觉 token、EC、视觉 KV 都变四倍。问题放在图片之前,换问题就会改变视觉 token 的 KV;放在之后,因果注意力让视觉 KV 不变。

原图交接后接收方
还要做视觉编码
E →
EC接收方从
语言 prefill 开始
P →
KV交接已完成的
语言上下文
D →
输出文本 token
或声音、图像

三种表示对应三个交接位置:第 8 章安排同卡执行,第 9 章比较阶段交接,第 12 章放到端、边、云链路上。

3.3.2 输出是声音或图像时,循环换了形状

语音:帧内还有一层循环

Fish Audio S2 Pro

慢速路径每次推进一帧;快速路径先用 1 次前向建立状态,再 9 次预测补齐码本,即每帧 10 次快速前向。codec 再把码本编号还原成波形。所以语言 token/s、声学帧/s、每秒生成的音频时长是三种不同的速度。

图像:反复更新同一组 latent

Qwen-Image-2512 · 1024² · 4096 个 latent 位置

总运算量 ns·nb·Fstep(nv);默认 100 次 DiT 前向、约 7.830×10¹⁵ FLOPs(文本编码器与 VAE 另算)。步数加倍运算量加倍;分辨率提高会增加 latent 位置数,单步内部的行数和位置间交互都涨,不是线性。文本生成不断追加上下文,图像去噪在固定分辨率下随步数线性累积。

3.3.3 实时播放:每一块都要按时到

Baudio(t) = A(t) − P(t) (已到达的可播放时长 − 已播放时长)

播放期间 P(t) 每秒涨 1 秒,A(t) 随数据块跳跃增长。余量降到零而下一块没到,声音就断。两次语音实测里,用户停说到首块音频到达约 400 ms、370 ms,后续块到达间隔中位数约 94 ms。

图 3-18 / 3-19 · 抖动缓冲与打断

20 ms 一块、24 kHz 单声道 2 字节:24,000 × 0.020 × 2 = 960 bytes。每块采完后处理 12 ms、发送 1 ms、网络通常 5 ms,第一块 38 ms 到。圆点 = 到达,短竖线 = 原定播放,色条 = 实际播放。打断:控制延迟 5 ms,设备每 10 ms 检查一次指令;设备静音、后端停止生成、释放缓冲与状态是三个不同时刻。

到达跟不上播放,缓冲只是延后中断

持续观察也要筛选

截图 Agent 只在动作结束后看屏幕,会漏掉中途出现又消失的弹窗。AOI 把屏幕观测和动作执行分开,持续收集图像、音频和事件,再挑出交给模型的记录。观测越频繁发现越多短暂事件,但关键帧太多会挤占上下文、反而降低效果。

编码视觉或音频
形成模型输入
→
语言模型理解并
生成回复
→
声学生成产生音频
采样
→
缓冲与播放决定何时
真正发声

任务不同,时间要求也不同:有的要尽快开始(TTFT),有的要持续流畅(播放),有的要尽早全部完成。RAW 图片精修就只关心成片何时完成,而且必须保留原始图像信息,视觉理解用的 EC 替代不了原图。

3.4

训练的计算与状态需求

推理用权重求输出;训练还要用输出与目标的差异调整权重。以 y = x·w 为例:后一层传回 ∂ℒ/∂y,要算 ∂ℒ/∂w 就需要当时的 x,要把梯度传给前一步就需要 w。所以前向的某些输入要一直留到反向用完。

线性层 Y = XW:三次矩阵乘,运算量一样

形状为示意

三次都含 m·k·n 个乘加,合计 6mkn。所有训练 token 都经过同一组主要参数矩阵时,就得到常见近似 Ftrain ≈ 6ND。冻结某个权重可省其权重梯度;只要更早的层还要梯度,输入梯度照算。MoE 按选中专家累计,注意力按查询—键配对累计。

例题 3-3 · 还没算激活,状态就超出一张卡

Qwen3-8B · 8,190,735,360 参数

BF16 权重用于前反向,FP32 梯度用于算更新量,FP32 主权重用于高精度更新,Adam 两个矩估计累计梯度及其平方的移动平均。不分片时每参数 2+4+4+4+4 = 18 字节,是推理 BF16 权重的 9 倍。“均分”只是把状态切开分给多卡保存的粗略示意,第 10 章细讲。

图 3-20 · 激活的生命周期与 micro-batch

4 层、时长为示意

一层激活从前向完成保留到对应反向用完。显存放不下完整 batch 时,拆成 a 个 micro-batch 累计梯度、最后更新一次:执行顺序和激活生命周期变了,激活峰值只剩一个 micro-batch 的量,总训练数据量不变;参数状态则一直驻留。训练时还要不断准备下一批输入,双缓冲让 CPU 准备与加速器计算交替进行(第 5 章)。

3.4.2 预训练、中期训练与 SFT:都归结为三个数

输入多少 token,哪些 token 参与损失,多少个 micro-batch 后更新一次。Qwen3:通用阶段 4096 长度训练超过 30 万亿 token,再加 STEM、代码、reasoning 与合成数据约 5 万亿,长上下文阶段扩到 32768。

同样 8192 个 token,切法不同,注意力工作不同

两份独立文档 · Qwen3-8B 一层
第二份 = 8192 − 第一份

因果注意力的有效查询—键配对 = Σ L(L+1)/2;投影与 FFN 的行数不变。较长文档里的 token 能看到更多前文,于是总行数不变时上下文交互增加。整层增幅取决于这部分占原工作的比例。

一次更新读多少、监督多少

练习 3-6

每次更新读 a·Bμ·P 个输入;损失归一化用 a·Bμ·Plabel。增大 a 扩大更新 batch,同时把一次更新拆成多次前反向。

SFT:读的 token ≠ 算损失的 token

一条样本有系统提示、问题、工具结果和回答,常只对回答算损失;其余 token 仍要过主干,给回答提供上下文。

只在损失里屏蔽不监督的 token、却没跳过它们的词表投影,这部分矩阵乘照样执行。只训练部分参数时,要存梯度和优化器状态的参数变少;但梯度仍要穿过冻结模块传到更早的可训练模块,输入梯度照算。

3.4.3 从 6ND 粗算到逐项核算

图 3-23 · Qwen3-8B,B=1,P=8192,全参数训练,无重计算

粗算漏了注意力:查询与上下文的矩阵乘不对应任何参数,前反向却贡献 59.381 TFLOPs;又多算了词嵌入这类不对每个 token 做完整矩阵乘的参数。两项相抵,逐项总量比 6ND 高约 7.15%。这是模型本身的差距,与实现无关;只有修正后的下界才能用来衡量利用率。只屏蔽标签而仍对全部 token 做词表投影,运算量不变。

参数投影随输入行数涨,注意力随查询—键配对数涨,优化器更新随参数量和更新次数涨。序列越短,更新开销占比越高;用重计算省容量,重做的前向要加回 Ftrain。新增的前向操作(上下文压缩、mHC、MoE 选中专家)都会带来对应的反向。

3.5

强化学习(RL)

RL 把推理和训练接成一个环:当前策略先生成回答(rollout),再由反馈决定如何更新,更新后的策略继续产生下一批数据。代码、数学这类易检查任务的反馈来自规则或测试(DeepSeek-R1 的可验证奖励);需要实际操作的任务要跑工具和环境;奖励若由另一个模型给,还要额外推理。DeepSeek V4-Flash 先用 SFT + RL 训领域专家,再用多教师同策略蒸馏(OPD)合成一个模型:学生自己生成轨迹,教师在这些位置给出概率分布。

图 3-24 · 先找数据的生产者和消费者

某个角色变慢,后继角色就要等;加教师模型就多一份前向计算和权重存储。同步方案等新权重就绪再生成;异步方案让部分阶段重叠,但要处理样本版本与滞后(第 10 章)。

相同奖励,学习信号归零

组内相对优势 · 点击切换对错

优势 = 本条奖励 − 组内平均。四条全对(或全错)时优势全为零,策略梯度为零:生成、评分、更新都做了,这组却没学到区分优劣的信号。损失的平均方式也有讲究:要对整个 batch 的有效 token 求平均,累计各 micro-batch 时分母就该用整个 batch 的有效 token 总数;先各自求均值再平均,会让有效 token 少的 micro-batch 里每个 token 权重更大。

ngenerate ≈ nkeep / a  Fcycle(n) = n(fg + fr) + Fu

例题 3-4 · 保留比例下降,为保住 16 条更新样本要多算多少

Qwen3-8B · P=1024 · G=256 · 等长 · 不提前停 · 不共享前缀

生成每条 1 次 prefill + 255 次 decode。评分和训练时轨迹已定,用教师强制(teacher forcing)一次处理全部已知 token:输入长 P+G−1 = 1279,256 个输出标签;16 条保留样本每轮更新输入 20,464 token、监督 4,096。由表反推每条回答 fg+fr ≈ 38.411 TFLOPs,Fu = 952.416 TFLOPs。生成逐 token 推进、评分与训练一次处理多个 token,矩阵形状不同,估时间时要分开记。

3.6

从负载需求到训练与服务预算

总预算 C ≈ 6ND:多给参数 N,就得少给数据 D。Scaling Law 用实验拟合参数、数据与验证损失的关系:

L(N, D) = E + A/Nα + B/Dβ ⇒ Nopt = (αA/βB)1/(α+β) (C/6)β/(α+β),Dopt ∝ Cα/(α+β)

预算翻倍,新增计算分给谁

练习 3-8

例题 3-5 · 留出检验

datablations · C4 · 6 点拟合、2 点留出
H1 预测 − 观测+0.009
H2 预测 − 观测+0.026
留出 RMSE≈0.0193

留出的是 N ≥ 2×10⁹ 的两个模型,实际 2.574、2.337,预测 2.583、2.363 nats/token,都略偏高。拟合点上的误差只说明曲线贴住了求系数的数据,能否外推得靠留出点。同样规模换随机种子也会得到不同曲线,多 seed 重复才能区分趋势与偶然。

计算最优只在“固定训练预算、不计推理成本”时成立。上线后要服务大量请求时,最优会偏向更小、训练更充分的模型:Beyond Chinchilla-Optimal 用 47 个模型(150M–6B)把推理需求纳入分析,150M 训练量最高达每参数 10,000 token。

图 3-28 · 训练投入是截距,单次调用是斜率

目标损失 2.9 · P=512 · G=128 · H100 SXM 40% MFU = 395.76 TFLOP/GPU·s

训练 6ND,每个请求 2N[P+(G−1)]。0.1B 模型需约 298.6B 训练 token,超出拟合数据范围(虚线 = 外推),约 125.7 GPU 小时,比 0.5B 多 73.5;每次调用少用约 0.00129 GPU 秒。训练与服务按同一系数折算,所以交点只取决于运算量,与 MFU 取值无关。书中图还画了 1B 与 2.81B(外推)两条,具体截距未在正文给出,这里不画。

Q* = ΔC₀ / Δc · 选哪个模型取决于未来调用量

练习 3-10 后半

Clife(m) = C0(m) + Q · Σj wj cj(m)  比较前,各模型都要满足相同质量、时限与完成条件;cj 含失败与重试。

3.6.2 从 Llama 到 Qwen:数据越给越多

模型训练 tokenD/N6ND(FLOPs)
Llama 1 · 6.7B1T1494.02×10²²
Llama 2 · 约 7B2T2868.40×10²²
Llama 3.1 · 约 8B约 15T约 1,875约 7.20×10²³
Qwen2.5 · 约 7B(系列披露)约 18T约 2,571约 7.56×10²³
Qwen3 · 约 8B(系列披露)约 36T约 4,500约 1.728×10²⁴

按 Chinchilla 约每参数 20 token,8B 模型约 160B token 就是“计算最优”;实际投入 1T–36T,超出一至两个数量级。这不是拟合算错,而是目标不同:开发者把上线后的服务成本也算了进去。

质量门槛要按自己的任务定:Llama 3 8B 与 Llama 2 70B 在 MMLU 上 66.6/69.7,在 TriviaQA-Wiki 上 78.5/87.5,两项差距不同。MoE 要分别列总参数和激活参数:DeepSeek-V3 671B/约 37B、预训练 14.8T;V4-Flash 284B/约 13B、32T;V4-Pro 1.6T/约 49B、33T。V4-Flash 主干专家 18·nL·h·f·(6+1) ≈ 45.4495 GFLOPs/token,32T 累计约 1.45438×10²⁴;V4-Pro 约 169.2465 GFLOPs/token、5.58513×10²⁴。损失权重不是执行比例:MTP 权重 0.3 不表示只做 30% 的辅助计算。

图 3-30 · GPU 小时折算成 A100 等效(对数尺度)

H100/H800 ÷ A100 BF16 稠密峰值 = 989.4/312 ≈ 3.17

折算假定各设备实际利用率相近,只比投入规模,不代表效率或成本差异。DeepSeek-V3 只计预训练。后训练也能这样比:Qwen3 表 21 中同一个 8B 模型,RL 路线 17,920 GPU 小时,OPD 路线 1,800 GPU 小时(二选一)。

GPU 小时 ÷ 卡数 = 日历时间

练习 3-10 前半

后续章节要用的负载记录

负载必须保留的字段后续使用
Chat/Agent任务检查、模型与版本、每轮输入/命中/输出、到达、工具依赖、分支与复用间隔第 8 章批处理与状态;第 9 章交接与路由;第 11 章工具环境
视觉/实时原图字节、E/P/D、EC/KV、帧或块到达、首响应/连续播放要求、打断后不再需要的计算第 8、9 章编码与交接;第 12 章链路与执行位置
训练/RL数据与质量、长度和标签、micro-batch/更新、生成样本数/保留样本数、奖励计算与模型调用、权重版本、完成期限第 4–7 章算力、存储与通信;第 10 章学习;第 11 章环境与资源池
谬误与陷阱

四个常见误区

✗ 平均请求率和长度相同,负载就相同

少量超长请求、输入输出长度的组合、到达顺序都会改变短时间内的需求。例题 3-1 平均能力够,后一分钟仍积压 112,792 步。

✗ token 单价降了,成功任务成本就降了

额外思考、没过检查的回答、工具与环境都进分子,合格任务数进分母。零成功的 batch 只能报告消耗与失败。

✗ 训练 token 总数相同,工作量就相同

序列切法改变查询—键配对数,标签与词表头策略改变输出工作,更新次数改变优化器成本;RL 还要为没被采用的回答付生成与反馈的钱。

✗ Scaling Law 的计算最优规模就是该用的规模

它只在固定训练预算、不计推理成本时成立。公开模型每参数 token 数超出这一基准一至两个数量级,是计入长期服务成本后的选择。

本章小结

负载 = 工作量 × 到达时间 × 依赖 × 完成标准

一、平均值藏起了积压

平均速率能粗估资源;短时间的积压和状态驻留才暴露压力。前一分钟空闲的算力留不到后一分钟;KV 池满了,空着的算力也接不了新请求。

二、等待也占资源

多轮任务有工具等待和失败尝试:前缀复用省重算但要保留状态,关键路径决定完成时间,状态面积 λM₀τ 决定容量。实时任务还要每块数据按时到达。

三、按同一完成标准比成本

训练多了反向、更新和权重同步;RL 为保留样本多付生成。比较方案时用相同质量与完成标准;Scaling Law 给训练分配,长期服务需求可能改变前期投入。

两分钟请求中,各时段的输入输出比例决定积压何时出现;代码 Agent 中,工具依赖决定等待多久、状态保存多久;RL 中,筛选前后的样本数决定生成与更新各处理多少数据。第 4 章把这些矩阵尺寸、状态大小和访问次数放到芯片的算力、容量与带宽上。

练习

动手验证

练习 3-1〔延伸〕· 相同输出总量下,请求数如何改变调用次数

一条请求输出 1024 token,对比八条各输出 128 token,每条输入 1024。求 prefill 次数、decode 总步数、结束时上下文长度;八条同步生成时比较共享权重的读取轮数,并解释总输出相同为何不足以判断完成时间。(3.1 节的练习 3-1 卡片可以直接切请求数。)

练习 3-2〔核心〕· 突发请求与工具等待如何增加积压和状态占用

第二分钟强度(每秒 7,471.2 步)只持续 30 秒,decode 用两张或三张卡(每卡约 2,796 步/s),初始队列空:求 30 秒内积压曲线和停止到达后的排空时间。再求每秒 2 个任务进入工具等待、每个等 10 秒占 1 GiB 时的平均等待任务数与占用;等待改为 30 秒再算。(例题 3-1 预设 ③④ 与图 3-3 卡片。)

练习 3-3〔延伸〕· 成功率提高能否抵消单次成本增加

旧方法 1 单位、50%;新方法 2 单位、80%:比较每个成功任务的成本。新方法降到 1.5 单位时,成功率至少多少才不比旧方法贵?多次采样时,生成、验证和失败尝试怎么计入总成本。(图 3-9 卡片会给出盈亏成功率。)

练习 3-4〔核心〕· 工具并行与局部加速能省多少

模型 2 s → 两个独立工具 6 s、10 s → 模型 3 s。求串行与并行总时间,以及仅在等工具时占 1 GiB 下的 GiB·s。再对 76.510 s 的实测任务,分别把首轮模型加速到 4 倍、所有工具加速到 2 倍,解释为什么局部加速倍数不能单独决定收益。

练习 3-5〔延伸〕· 图像分辨率与音频缓冲

Qwen3-VL-4B 输入从 640×640 改为 1280×1280,求视觉 token 数、完整 EC 和视觉 KV。比较 40 ms 与 60 ms 初始缓冲的首播时刻与停顿。若每秒只收到 0.9 秒可播放音频、开播时已缓存 0.3 秒,多久耗尽?有限缓冲能解决什么问题。

练习 3-6〔延伸〕· 一次更新要多少计算、状态和监督 token

从 Y = XW 推导两种梯度的尺寸,说明三次矩阵乘运算量为何相同。Qwen3-8B 每参数 18 字节的长期状态总量是多少,梯度改为 BF16 省多少。每 micro-batch 2 条、每条 4096 输入、1024 监督,累计 8 个后更新:求每次更新的输入与监督 token 总数。比较“只屏蔽损失”与“只对监督 token 做词表投影”的计算量差别。

练习 3-7〔核心〕· 更新样本不变时,多生成的 RL 开销

用生成 32 条与 64 条时的周期总运算量,求每多生成一条增加的生成与参考模型运算量,以及一次更新的固定运算量;预测生成 48 条的周期总量。再加一个同结构教师对 48 条各前向一次,求新增运算量;BF16 权重独立发给四个副本,求总传输量。最后画出生成、反馈、更新与同步的依赖,指出哪些阶段可在不同 batch 间重叠。(例题 3-4 预设 ③。)

练习 3-8〔延伸〕· 在参数与数据之间分配预算

由 L = E + A/Nα + B/Dβ 与 C = 6ND 推导最优 N、D 随 C 的增长;取 α = β,预算增至 4 倍、9 倍时各增至几倍。再用八个 C4 观测(六拟合、二检验)算检验点误差,解释拟合点误差为何不能替代留出误差。

练习 3-9〔延伸〕· 加数据或加专家改变哪些资源

按 Llama/Qwen 表重算 D/N 与 6ND。参数不变、数据增至 4 倍时,训练计算与上线后的纯权重容量各怎么变。MoE 总专家数加倍、每 token 选中数不变时,参数容量和专家训练计算能否都按两倍估。

练习 3-10〔延伸〕· 训练完成时间与累计服务成本

1,022,362 A100 GPU 小时分别用 2048 张、1024 张卡持续训练,各需几天。小模型多投入 10 万 H100 GPU 小时、每个成功任务省 0.72 GPU 秒:预计两亿项、十亿项任务时各选哪个、总成本差多少,任务量变到哪里选择反转。(最后两张计算卡片。)