第 24 章 模型、数据与算力如何共同扩展
假设下一次实验的算力预算已经固定。我们可以把 Mini GPT 加宽,也可以让它接触更多文本,或者把原有文本再训练几遍。这些选择改变的量并不一样。第 600 步的快照已经提醒过我们:多做更新,训练损失可能下降,验证损失却可能变差。我们需要资源估算,也需要评价规则,不能只说“全部做大”。
本章使用纸笔就能算清的给定预算,表中候选没有真的训练过。先数计算工作,再看实测的规模研究能为这些计数补充什么,最后检查:训练时最合算的选择,提供服务时也最省吗?
24.1 先数一次矩阵运算,再数整次训练
Section titled “24.1 先数一次矩阵运算,再数整次训练”回想第 5 章的一行向量乘矩阵。假如矩阵有 100 个元素,每个元素都在这次运算中使用一次,就大约需要 100 次乘法和 100 次加法。这里把一次乘法与一次加法计为 两次浮点运算 ,即使硬件可以用一条指令把它们合起来做。因此,前向计算大约需要 200 FLOPs。FLOPs 数运算次数,FLOP/s 数每秒完成多少次;速率更大,不等于模型更大。
现在假设,稠密模型中占主要计算量的矩阵共有一亿个参数。处理一个 token,应用这些权重大约需要 次运算。再采用一个估算约定:反向计算大约是前向的两倍。那么,前向加反向就是每个训练 token 需要 次运算。处理二十亿个训练 token,得到 次。
这就引出了常见的稠密模型近似式:
是计入的稠密权重参数数目, 是训练中实际处理的 token 暴露次数, 是以 FLOPs 计的训练工作量。六来自两个约定:乘加算两次,前向加反向约为前向的三倍。参数和 token 都不是字节;这个乘积估计计算,不估计存储。
它没有计入优化器工作、通信、重复计算和部分词表相关开销;当稠密矩阵运算占主导时,还忽略了随上下文长度变化的成对注意力计算。查一行嵌入,并不是每个 token 都要乘遍嵌入表的全部元素。Kaplan 等人的参数定义明确排除嵌入,其他报告也可能采用不同口径。本章表中的 指占主要计算量的稠密权重计数。因此,直接把 MG-2 的全部 13875 个数值乘六,只能得到粗略代用值,算不上对其前向程序的精确审计。
24.2 让三种选择共用一个上限
Section titled “24.2 让三种选择共用一个上限”例 24.1:同一份训练计算预算,怎样分给模型和数据。 给定上限为 FLOPs。M 表示一百万,B 表示十亿,都采用十进制单位。每行只是一个候选预算,数据质量、优化和架构的其他条件尚未指定。现在要判断的是哪些方案装得下,不是哪个模型最好。
表 24.1:训练乘积相等,分配方式不同。 暴露次数与参数的比值只是计数之比,不是推荐规则。
| 方案 | 参数 | 训练暴露 | 估计训练 FLOPs | |
|---|---|---|---|---|
| A | 100M | 2B | 20 | |
| B | 200M | 1B | 5 | |
| C | 50M | 4B | 80 |
B 把参数从 100M 翻到 200M,就要把 2B 暴露减半为 1B,才能保持乘积不变。C 把参数减半,就能处理两倍的暴露。三行乘出来都达到同一上限。如果 B 仍保留 A 的 2B 暴露,估算就变成 ,超出预算一倍。
如果可用的独立数据池只有 1B 个 token,C 的 4B 暴露就需要重复使用,或者另外获取数据。固定池训练四遍,与训练四十亿个独立 token 消耗的矩阵计算量近似相同,信息却不同。第 23 章的配比和重叠记录仍然必需。光看此表,我们也不知道 B 训练得是否充分、C 的容量是否足够,或任一方案是否保留了制度更新。
再 给定 一个有效训练速率 FLOP/s,这不是实测值。A 的耗时估计为 秒。每小时 3600 秒,所以约为 33.33 小时。如果有效速率减半,时间就翻倍为 66.67 小时。硬件规格中的峰值速率不会自动成为有效速率:精度、内核、内存读写、通信和利用率都会影响它。这是在检查假设改变后的结果,不是在承诺某块 GPU 的表现。
24.3 拟合曲线能指路,但有适用条件
Section titled “24.3 拟合曲线能指路,但有适用条件”运算次数算不出损失。要研究两者的关系,研究者需要改变参数和数据,训练多组模型,记录规定好的损失,再用简洁形式拟合观测。在这里,规模规律(scaling law) 是有测量范围和拟合假设的经验关系。名称里有“law”,也不会让它变成自然定律。
例 24.2:读懂幂关系,同时分清它不是测量。 作者给定三个点:参数为 100M、400M、1600M 时,损失分别为 4、3、2.5 奈特,并假设不存在其他瓶颈。给定的极限底值为 2 奈特,减去它,剩余损失依次为 2、1、0.5。参数每变为四倍,这部分就减半。
表 24.2:一条能逐项检查的给定曲线。 这些点是教学构造,不是表 24.1 中模型的训练结果。
| 参数 | 相对大小 | 给定损失 | 超出 2 的部分 |
|---|---|---|---|
| 100M | 1 | 4 | 2 |
| 400M | 4 | 3 | 1 |
| 1600M | 16 | 2.5 | 0.5 |
1、4、16 的平方根分别为 1、2、4,用 2 除以它们,就得到最后一列。因此规则为:
是每个目标的给定损失,单位为奈特; 用参数计数除以参数计数,因此没有单位。指数 表示平方根的倒数。代入 ,有 ,正好对应中间一行。代入 会预测 2.25,但这个值超出了给定范围,属于 外推(extrapolation) ,不是又多了一个观测点。
普通坐标轴上,相同距离表示增加同样的数值;对数坐标轴上,相同距离表示乘以同样的倍数。如果画的是 减去底值后的损失 ,而非总损失,那么在双对数坐标中,本例反复出现的“四倍/一半”会排成直线,斜率为 。第 6 章已经介绍对数,这里用它把比例变为差值。不减去假定底值,总损失就不会沿这条精确直线变化。真实拟合中的底值和指数,也都是估计出来的,并非预先知道的真理。
把参数和数据限制放在一起拟合,同样需要这种谨慎。一种可能的经验形式为:
帽子表示这是预测。 是拟合底值, 根据所选计数单位确定两项的尺度;正指数 描述两项怎样下降。它们都不是准确率保证。例如,若第一项超额固定为 1,第二项为 0.5,预测就是 ;只增加数据可以减小第二项,却留下第一项。换 tokenizer 或评测分布,会改变损失的含义,也可能使原拟合不再适用。
24.4 “训练最优”要先说清楚优化什么
Section titled “24.4 “训练最优”要先说清楚优化什么”在预算约束下,训练计算最优(compute-optimal training) 问的是:对已有测试或拟合的方案,怎样分配资源,才能让指定损失最低。它没有直接问当前制度答不答得对、延迟最短是多少,或维护是否容易。
Kaplan 等人研究了其模型、数据和训练设置下的规模关系。Hoffmann 等人用多种拟合方式和训练时长重新研究参数与 token 分配,在其实验中发现,两者适合大致共同增长。这些是方法不同的经验研究。常被转述的某个“token/参数”比例,不应硬套到所有语料、稀疏模型和部署环境。表中 A 的比值为 20,只说明它的算术关系;没有可比的损失实验,不能据此认定 A 最优。
- 模型之外A: N = 100M; D = 2B
- 模型之外B: N = 200M; D = 1B
- 模型之外C: N = 50M; D = 4B
三个候选的 6ND 都为 1.2 × 10¹⁸ FLOPs;乘积不会给出质量结论。
- 处理步骤A:再加 2 × 10¹⁸ FLOPs
- 处理步骤B:再加 4 × 10¹⁸ FLOPs
- 处理步骤C:再加 1 × 10¹⁸ FLOPs
给定近似为 2NS,S 为一百亿输出 token;尚未计入注意力、提示处理及利用率。
图 24.1 给预算加上第二阶段。假设三个候选此后都生成给定的 个输出 token,即一百亿个。为做粗比较,先忽略提示处理、注意力和缓存影响。只做前向时,每个输出 token 的稠密计算大约为 ,于是全过程的工作量变为:
数的是服务时的输出 token 暴露,与训练暴露 分开。A 在训练之外新增 FLOPs,合计 。B 合计 ,C 合计 。训练乘积相同,不表示后续成本相同。
这并没有证明应该部署 C,因为它可能达不到质量要求。它说明的是:后续使用量很大时,把更小的模型训练更久,值得作为候选研究。实际全程成本还包含提示处理、内存容量、有效执行速率、闲置资源和运维。第 30—33 章会为这些项目补上明确测量和应用契约。
24.5 本章小结
Section titled “24.5 本章小结”参数、独立内容、已处理 token、FLOPs、字节和秒是不同的量。稠密计算近似式把假设摊开,让我们能比较预算。经验拟合则补充特定训练条件下、关于特定损失的证据,外推仍然只是预测。固定算力下让训练损失最低的模型,不一定使合格服务的总成本最低。下一章进入稠密块内部,检查本章暂时视为固定条件的三项组件选择。
24.6 习题
Section titled “24.6 习题”- 一个给定稠密模型有 150M 个计入参数,处理 2B 个 token。估计训练 FLOPs。在原预算上限下,它能处理多少 token?
- 团队把 1B-token 数据池训练四遍,报告 4B 训练 token。计算公式该用哪个数?数据卡还应单独保留什么?
- 在例 24.2 中,求 的预测。为什么把这个点画出来,并不会扩大观测范围?
- 一个模型的拟合预训练损失更低,却把全部明确制度更新问题答错。“训练计算最优”能否推翻知识助手的失败判定?说清两个目标。
- 按给定有效速率 FLOP/s 估算 C 的训练小时数。为什么直接代入厂商峰值速率不能算作充分证据?
- 若全过程输出预算从 10B 降至 1B token,计算 A、C 的近似总工作量,解释两者比较发生了什么变化。
24.7 参考解答
Section titled “24.7 参考解答”- FLOPs。用 除以 ,得到约 1.333333B 次 token 暴露。实际训练日程还要取整,并为遗漏开销留余量。
- 工作量用 4B 次实际暴露。另行保留 1B 独立池、遍数或抽样规则、tokenizer,以及重复与划分信息。重复消耗计算,不会产生新的来源信息。
- 。这是把给定公式延伸到三个已有大小以外;那里没有发生训练或评测。画出的预测仍是预测。
- 不能。训练目标是在算力约束下优化损失,应用目标则要求正确使用所提供的有效制度。候选可以满足前者而不满足后者。知识助手是否合格,要由第 32 章的硬性验收条件决定。
- 耗时为 240000 秒,约 66.67 小时。速率是给定的有效值。峰值吞吐没有计入此工作负载的精度、利用率、内存或通信,不能证明实际耗时。
- A 合计 FLOPs,C 合计 。生成工作缩小十倍,两者差距也从 缩小为 。质量仍未指定,这些是粗略工作量,不是货币价格。
24.8 参考文献
Section titled “24.8 参考文献”- Kaplan 等,Scaling Laws for Neural Language Models。第 2.1 节与表 1 解释不含嵌入的计数及 FLOP 约定;拟合关系依赖论文所述训练设置。
- Hoffmann 等,Training Compute-Optimal Large Language Models。第 3 节和附录 D 比较参数与 token 分配的拟合方法,区分外推与已经训练的模型证据。