Scaling Laws 与算力:为什么这样配置训练
参数量数法、6ND 估算、Kaplan/Chinchilla、isoFLOP 曲线、GPU hours 与 MFU。
对应课件:LLM Systems(新增)
本章定位:Scale 主线开篇。回答一个现实问题:给定预算(GPU 数量 × 时间),模型开多大、数据喂多少,才是最优的? 这是从「会训模型」到「会配置训练」的关键一跃,也是 CS336 的核心前置之一。
- 【Runnable】可直接运行(关键逻辑已在本课程验证脚本中实测)
- 【Skeleton】工程骨架:逻辑完整,需要自备数据/环境/权重
- 【Pseudo-code】算法示意:用于解释思路,不保证可直接运行
14.1 为什么需要 Scaling Laws
先懂直觉
训练大模型是几千万美元级的工程决策:模型开 7B 还是 70B?数据喂 1T 还是 15T token?GPU 买 1000 张还是 10000 张?Scaling Laws 用小规模实验的幂律规律来预测大规模训练的结果,把「拍脑袋」变成「算得出来」。
它回答三个问题:
| 问题 | Scaling Laws 的回答 |
|---|---|
| 模型越大越好吗? | 不是——同算力下有最优大小;超过后收益递减 |
| 数据要多少? | 与参数量配比存在最优点(Chinchilla ≈ 20 token/参数) |
| 该花多少钱? | 给定模型大小,损失随算力呈可预测的幂律下降 |
核心工具链:参数量 → 训练 FLOPs(6ND)→ GPU hours(÷ 吞吐)→ 损失预测(幂律)。
14.2 参数量怎么数
先懂直觉
Transformer 的参数量有简洁公式,不用逐层数。这也是判断「一个模型声称 X B 参数是否合理」的基本功。
公式(decoder-only,标准配置)
| 符号 | 含义 | 典型值(7B) |
|---|---|---|
| 层数 | 32 | |
| hidden 维度 | 4096 | |
| 词表 | 32000 | |
| 每层组成 | Attention 4d² + FFN 8d²(SwiGLU) | — |
数值算例:LLaMA-2-7B
(实际报告 6.7B,差异来自 norm/bias 等小项 ✅)
快速一览表
| 模型 | L | d | 12Ld² | +Vd | ≈ 参数量 |
|---|---|---|---|---|---|
| GPT-2 Small | 12 | 768 | 0.085B | 0.025B | 0.11B |
| TinyLM(第 12 章) | 6 | 256 | 0.0047B | 0.008B | 0.013B |
| LLaMA-2-7B | 32 | 4096 | 6.44B | 0.13B | 6.6B |
| LLaMA-2-70B | 80 | 8192 | 64.4B | 0.26B | 64.7B(GQA 略减) |
| GPT-3 | 96 | 12288 | 173B | 0.39B | 175B |
- 12d² 是 SwiGLU 时代的数字:如果 FFN 用 4d 的 ReLU FFN,每层是 4d² + 8d² = 12d²(一样);如果 d_ff 不是 4d 要按实际算。
- 词表大时 embedding 不可忽略:小模型(d=256)里 V·d 占 60%+。
- MoE 是例外:参数量按专家总数算,但激活参数远小于总参数。
14.3 训练算力:6ND
先懂直觉
训练一次(前向 + 反向)的计算量有个经典估算:每个参数、每个 token 大约 6 次浮点运算。记住 6ND,你就能口算任何训练任务的算力。
公式与推导直觉
| 项 | 含义 | 为什么是 6 |
|---|---|---|
| 前向 | 每个参数对每个 token 一次乘加(2 FLOPs)= 2ND | 矩阵乘里每个权重参与一次乘 + 一次加 |
| 反向(对输入) | 同样规模 = 2ND | 链式法则要乘权重 |
| 反向(对权重) | 同样规模 = 2ND | 计算权重梯度 |
| 合计 | 6ND | 2+2+2 |
数值算例
| 配置 | N | D | C = 6ND |
|---|---|---|---|
| TinyLM(第 12 章) | 13M | 1B | 7.8e16 |
| GPT-2 | 0.11B | 10B | 6.6e18 |
| LLaMA-2-7B | 7B | 2T | 8.4e22 |
| GPT-3 | 175B | 300B | 3.15e23 |
| LLaMA-3-8B | 8B | 15T | 7.2e23 |
以 LLaMA-2-7B(8.4e22 FLOPs)在 1000 张 A100(312 TFLOPS BF16)上为例:
- 有效算力 = 312 × 0.35(MFU)= 109 TFLOPS/卡
- GPU 总时长 = 8.4e22 ÷ 109e12 ≈ 7.7e8 GPU 秒 ≈ 214,000 GPU hours
- 1000 卡 → 约 9 天
14.4 Kaplan Scaling Laws
先懂直觉
2020 年 Kaplan 等人发现:损失随模型大小、数据量、算力都呈幂律下降——画在 log-log 坐标上就是直线。这意味着小实验可以预测大训练的结果。
| 规律 | 含义 |
|---|---|
| 幂律(power law) | 每翻倍规模,损失下降固定比例(log-log 直线) |
| 指数很小(0.05~0.1) | 想再降一点损失,规模要翻很多倍 |
| 结论 | 大模型时代「更大 = 更好」有了定量依据 |
Kaplan 的结论是「固定算力下,模型优先放大」——这让 GPT-3(175B/300B 数据)成为当时的「最优解」。但两年后 Chinchilla 用更严谨的实验推翻了这个配比。
14.5 Chinchilla:compute-optimal 配比
先懂直觉
2022 年 DeepMind 的 Chinchilla 重新做了大规模对照实验,发现:当时的模型都「参数太大、数据太少」。给定算力预算,模型大小和训练 token 数应该等比例增长——每 1 个参数配约 20 个 token。
公式
参数化损失函数(Chinchilla 论文附录报告的拟合形式与系数):
用论文的拟合系数直接求最优点,得到的 D/N 比值会与 headline 的「约 20:1」有出入(论文的 IsoFLOP 分析与参数化拟合两种方法给出的指数略有差异)。因此本页的 chinchilla-curve 演示使用了一个教学用简化拟合(令 α=β=0.3,并校准到 D*/N*≈20),目的是展示 isoFLOP 曲线的定性形状与「最优配比」的直觉,不是原论文曲线的精确复现。需要论文原值请查阅 Chinchilla 论文(附录 Table A9)。
数值算例:三种模型的真实配置对比
先把三个历史事实摆清楚(FLOPs 按 6ND 口径估算):
| GPT-3(2020) | Gopher(2021) | Chinchilla(2022) | |
|---|---|---|---|
| 参数量 | 175B | 280B | 70B |
| 训练 token | 300B | 300B | 1.4T |
| D/N | 1.7 | 1.1 | 20 |
| 训练 FLOPs(6ND) | 3.15e23 | 5.04e23 | 5.88e23 |
怎么读这张表(三个层次,不要混在一起):
- Chinchilla vs Gopher(直接对照):两者训练预算同量级(≈5e23),但 Chinchilla 参数少 4 倍、数据多 4 倍,在绝大多数评测任务上全面胜出。这是「同样的钱,更均衡的分配」最直接的证据。
- Chinchilla vs GPT-3:Chinchilla 参数只有 GPT-3 的 40%,却表现更好。注意:Chinchilla 的训练 FLOPs(5.88e23)高于 GPT-3 的训练 FLOPs(3.15e23)——所以不能说「Chinchilla 用更少的算力超越了 GPT-3」,而是「用少得多的参数(部署更便宜)达到了更好的效果」。
- compute-optimal 分析(论文的核心结论):如果把预算定在 GPT-3 的 3.15e23 FLOPs,按其拟合关系,约 40~50B 参数配约 1T token 就能超过 GPT-3。也就是说:GPT-3 不是算力不够,是参数/数据分配远离最优点。
一句话总结 Chinchilla 的核心结论:在固定训练计算预算下,参数 与数据 应当均衡扩张(近似等比例),而不是一味堆参数。
「D/N ≈ 20」来自 Chinchilla 论文的实验设定(他们的数据、tokenizer、架构,且只优化训练成本)。它是有用的数量级参考,但不是所有现代训练的硬规则,原因:
- 推理成本也进目标函数:部署场景下常故意「过度训练」小模型(见 14.8);
- 数据质量差异:高质量数据可重复多轮(epoch),等效 token 数变多;
- tokenizer 不同:同样的文本,token 数不同,D/N 比值随之变化;
- 架构与任务不同(GQA/MoE、多语言、代码/数学配比)也会移动最优点。
正确用法:把它当作起点和直觉校准,而不是教条——先算 20N 做参考,再根据部署成本、数据质量做实验调整。
拖动算力预算滑块,观察凹点(最优点)如何移动:算力越大,最优模型越大、数据越多。注意:图中曲线为教学简化拟合(非原论文精确复现),用于展示定性形状。
14.6 isoFLOP 曲线:为什么不是越大越好
先懂直觉
固定算力预算 C,模型开大 → 数据就少(D = C/6N);模型开小 → 数据可以多。损失随模型大小先降后升(呈 U 形)——中间那个谷底就是最优配置。
Loss
│ ╲ ╱ ← 数据太少(大模型侧)
│ ╲___ ___╱
│ ╲___ ___╱ ← 谷底 = 最优 N*(D* = C/6N*)
│ ╲____╱
│ ↑ 参数量不足(小模型侧)
└──────────────────────────→ 模型参数量 N(log)
| 区域 | 现象 | 原因 |
|---|---|---|
| 谷底左侧 | 模型太小 | 容量不足,损失降不下去 |
| 谷底右侧 | 模型太大 | 数据被摊薄(D = C/6N 太小),欠训练 |
| 谷底 | 最优配比 | 参数与数据的边际收益相等 |
14.7 GPU hours 与 MFU
先懂直觉
FLOPs 是「活的总量」,GPU 是「干活的工人」。**MFU(Model FLOPs Utilization)**衡量「模型需要的 FLOPs」占「集群理论峰值」的比例——它是大模型训练最重要的工程指标之一,实际通常在 30%~50%。
公式(先定义量纲,再谈利用率)
训练耗时 (秒),则实际达到的算力为 (FLOPs/s),于是:
| 符号 | 含义 | 单位 |
|---|---|---|
| 模型训练总 FLOPs | FLOPs | |
| 训练耗时 | 秒(s) | |
| 实际算力 | FLOPs/s | |
| 集群理论峰值 | FLOPs/s | |
| MFU | 两者之比(无量纲) | % |
7B 模型 × 2T token,1000 张 A100(BF16 峰值 312 TFLOPS/卡),实测 MFU = 35%:
反推验证:实际算力 FLOPs/s,等价于每卡 109 TFLOPS; ✅ 与设定一致。
| 概念 | 含义 | 典型值 |
|---|---|---|
| 峰值算力 | 硬件理论最大(A100 BF16 dense:312 TFLOPS,不含稀疏加速) | — |
| MFU | 只计「模型有效 FLOPs」的利用率 | 30%~50% |
| HFU | 计「硬件实际执行 FLOPs」的利用率(含 activation checkpointing 的重算等额外开销) | 通常 ≈ 1.2~1.5 × MFU |
| GPU hours | 训练总成本单位(云上约 3/卡时,随市场波动) | — |
MFU vs HFU:开了 activation checkpointing 后,反向会重算一遍前向,硬件多做了约 1/3 的活。这些重算的 FLOPs 不算在 MFU 里(MFU 只认 6ND),但算在 HFU 里。所以 HFU 可以高于 MFU 而不矛盾——两个指标回答的问题不同。
调整参数量、token 数、GPU 数量、MFU,实时看到 FLOPs / GPU hours / 墙钟时间(T = 6ND/(N_gpu·P·MFU)),并对比 Chinchilla 参考配比。
工程里怎么用(估算训练预算的三行代码)
# 类型:【Runnable】纯算术
N = 7e9 # 参数量
D = 2e12 # token 数
C = 6 * N * D # FLOPs
gpu_hours = C / (312e12 * 0.35) / 3600
print(f"{C:.2e} FLOPs, {gpu_hours:,.0f} GPU hours, 1000卡约 {gpu_hours/1000/24:.1f} 天")
# → 8.40e+22 FLOPs, 213,675 GPU hours, 1000卡约 8.9 天
14.8 现代实践:Chinchilla 之后
先懂直觉
Chinchilla 是「训练算力最优」,但推理成本也是钱。现代模型故意「过度训练」:用小模型喂远超 20 倍的数据,训练多花一点,换来推理时永久更便宜。
| 模型 | 参数量 | 训练 token | D/N | 策略 |
|---|---|---|---|---|
| GPT-3(2020) | 175B | 300B | 1.7 | 参数优先(Kaplan 时代) |
| Chinchilla(2022) | 70B | 1.4T | 20 | 训练算力最优 |
| LLaMA-2(2023) | 7B | 2T | 286 | 过度训练 |
| LLaMA-3(2024) | 8B | 15T | 1875 | 极致过度训练 |
| Qwen2.5(2024) | 7B | 18T | ≈2570 | 同上 |
为什么? 训练是一次性成本,推理是持续成本。一个 8B 模型服务 1 年,推理算力远超训练。所以现代共识:
用小模型 + 海量数据,把训练算力「过度投入」,换取部署时的低成本。
| 概念 | 公式/结论 |
|---|---|
| 参数量 | ≈ 12Ld² + Vd(SwiGLU/ReLU 同价) |
| 训练算力 | C ≈ 6ND |
| Kaplan | 幂律 L ∝ C^-0.05,参数优先 |
| Chinchilla | N* ∝ D* ∝ C^0.5,D/N ≈ 20,算力最优 |
| isoFLOP | 固定算力下损失对 N 呈 U 形,谷底即最优 |
| 时间 | T = 6ND / (GPU数 × 峰值 × MFU) |
| MFU | 有效利用率,大训练 30%~50% |
| 现代实践 | 过度训练(D/N ≫ 20)换推理成本 |
显示答案与解析
正确答案:B
每个参数对每个 token 在前向是 1 次乘加(2 FLOPs),反向要分别对输入和权重求导,各再 2ND。合计 6ND。显示答案与解析
正确答案:B
6 × 7e9 × 2e12 = 8.4e22 FLOPs。显示答案与解析
正确答案:B
Chinchilla 发现 N* ∝ D* ∝ C^0.5,最优配比约 20 token/参数。GPT-3 时代参数过大、数据不足。显示答案与解析
正确答案:B
Chinchilla 只优化训练算力。实际部署中推理是持续成本,用小模型过度训练换取推理效率是行业共识。