大模型知识体系 第 14 章 🎮 交互版(含动画演示与测验)
← Build Your Own Small LLM(下):训练篇🏠 回到交互版首页GPU Fundamentals:从 SM 到 Roofline →
你正在浏览静态阅读版(无 JavaScript 也可阅读,便于搜索与 AI 抓取)。交互演示与答题功能请前往 交互版。
第 14 章 · 第三部分 · 扩展 (Scale)

Scaling Laws 与算力:为什么这样配置训练

参数量数法、6ND 估算、Kaplan/Chinchilla、isoFLOP 曲线、GPU hours 与 MFU。

对应课件:LLM Systems(新增)

本章定位:Scale 主线开篇。回答一个现实问题:给定预算(GPU 数量 × 时间),模型开多大、数据喂多少,才是最优的? 这是从「会训模型」到「会配置训练」的关键一跃,也是 CS336 的核心前置之一。

📘 代码类型约定(Build / Systems 章节统一)
  • 【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,标准配置)

Params≈12 L d2⏟每层 12d2,共 L 层+V d⏟embedding 与 LM Head 共享\text{Params} \approx \underbrace{12\,L\,d^2}_{\text{每层 } 12d^2 \text{,共 } L \text{ 层}} + \underbrace{V\,d}_{\text{embedding 与 LM Head 共享}}
符号 含义 典型值(7B)
LL 层数 32
dd hidden 维度 4096
VV 词表 32000
每层组成 Attention 4d² + FFN 8d²(SwiGLU) —

数值算例:LLaMA-2-7B

12×32×40962=6.44×10912 \times 32 \times 4096^2 = 6.44 \times 10^9
V×d=32000×4096=1.31×108V \times d = 32000 \times 4096 = 1.31 \times 10^8
总计≈6.57×109≈6.6B\text{总计} \approx 6.57 \times 10^9 \approx 6.6\text{B}

(实际报告 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,你就能口算任何训练任务的算力。

公式与推导直觉

C≈6 N DC \approx 6\,N\,D
项 含义 为什么是 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
🧮 从 FLOPs 到时间(完整链路)
墙钟时间=CNgpu×峰值算力×MFU\text{墙钟时间} = \frac{C}{N_{gpu} \times \text{峰值算力} \times \text{MFU}}

以 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 坐标上就是直线。这意味着小实验可以预测大训练的结果。

L(N)∝N−0.076,L(D)∝D−0.095,L(C)∝C−0.050L(N) \propto N^{-0.076}, \qquad L(D) \propto D^{-0.095}, \qquad L(C) \propto C^{-0.050}
规律 含义
幂律(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。

公式

N∗∝C0.5,D∗∝C0.5,D∗N∗≈20N^* \propto C^{0.5}, \qquad D^* \propto C^{0.5}, \qquad \frac{D^*}{N^*} \approx 20

参数化损失函数(Chinchilla 论文附录报告的拟合形式与系数):

L(N,D)=E+ANα+BDβ,E=1.69, A=406.4, B=410.7, α=0.34, β=0.28L(N, D) = E + \frac{A}{N^{\alpha}} + \frac{B}{D^{\beta}}, \qquad E = 1.69,\ A = 406.4,\ B = 410.7,\ \alpha = 0.34,\ \beta = 0.28
⚠️ 关于本页交互演示的说明

用论文的拟合系数直接求最优点,得到的 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

怎么读这张表(三个层次,不要混在一起):

  1. Chinchilla vs Gopher(直接对照):两者训练预算同量级(≈5e23),但 Chinchilla 参数少 4 倍、数据多 4 倍,在绝大多数评测任务上全面胜出。这是「同样的钱,更均衡的分配」最直接的证据。
  2. Chinchilla vs GPT-3:Chinchilla 参数只有 GPT-3 的 40%,却表现更好。注意:Chinchilla 的训练 FLOPs(5.88e23)高于 GPT-3 的训练 FLOPs(3.15e23)——所以不能说「Chinchilla 用更少的算力超越了 GPT-3」,而是「用少得多的参数(部署更便宜)达到了更好的效果」。
  3. compute-optimal 分析(论文的核心结论):如果把预算定在 GPT-3 的 3.15e23 FLOPs,按其拟合关系,约 40~50B 参数配约 1T token 就能超过 GPT-3。也就是说:GPT-3 不是算力不够,是参数/数据分配远离最优点。

一句话总结 Chinchilla 的核心结论:在固定训练计算预算下,参数 NN 与数据 DD 应当均衡扩张(近似等比例),而不是一味堆参数。

⚠️ 20 token/param 是经典参考,不是永恒定律

「D/N ≈ 20」来自 Chinchilla 论文的实验设定(他们的数据、tokenizer、架构,且只优化训练成本)。它是有用的数量级参考,但不是所有现代训练的硬规则,原因:

  • 推理成本也进目标函数:部署场景下常故意「过度训练」小模型(见 14.8);
  • 数据质量差异:高质量数据可重复多轮(epoch),等效 token 数变多;
  • tokenizer 不同:同样的文本,token 数不同,D/N 比值随之变化;
  • 架构与任务不同(GQA/MoE、多语言、代码/数学配比)也会移动最优点。

正确用法:把它当作起点和直觉校准,而不是教条——先算 20N 做参考,再根据部署成本、数据质量做实验调整。

🎮 交互:isoFLOP 曲线与最优配比交互演示 · 静态阅读版

拖动算力预算滑块,观察凹点(最优点)如何移动:算力越大,最优模型越大、数据越多。注意:图中曲线为教学简化拟合(非原论文精确复现),用于展示定性形状。

在交互版中打开这个演示 →

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

公式(先定义量纲,再谈利用率)

Cmodel≈6ND⏟模型侧:训练总 FLOPs,Ppeak=Ngpu×Pgpu⏟硬件侧:集群理论峰值 FLOPs/s\underbrace{C_{model} \approx 6ND}_{\text{模型侧:训练总 FLOPs}}, \qquad \underbrace{P_{peak} = N_{gpu} \times P_{gpu}}_{\text{硬件侧:集群理论峰值 FLOPs/s}}

训练耗时 TT(秒),则实际达到的算力为 Cmodel/TC_{model}/T(FLOPs/s),于是:

MFU=Cmodel/TNgpu×Pgpu    ⟹    T=6NDNgpu⋅Pgpu⋅MFU\text{MFU} = \frac{C_{model} / T}{N_{gpu} \times P_{gpu}} \;\;\Longrightarrow\;\; T = \frac{6ND}{N_{gpu} \cdot P_{gpu} \cdot \text{MFU}}
符号 含义 单位
Cmodel=6NDC_{model} = 6ND 模型训练总 FLOPs FLOPs
TT 训练耗时 秒(s)
Cmodel/TC_{model}/T 实际算力 FLOPs/s
Ngpu×PgpuN_{gpu} \times P_{gpu} 集群理论峰值 FLOPs/s
MFU 两者之比(无量纲) %
🧮 数字算例(与计算器一致)

7B 模型 × 2T token,1000 张 A100(BF16 峰值 312 TFLOPS/卡),实测 MFU = 35%:

Cmodel=6×7×109×2×1012=8.4×1022 FLOPsC_{model} = 6 \times 7{\times}10^9 \times 2{\times}10^{12} = 8.4 \times 10^{22}\ \text{FLOPs}
T=8.4×10221000×312×1012×0.35≈7.69×105 s≈8.9 天T = \frac{8.4{\times}10^{22}}{1000 \times 312{\times}10^{12} \times 0.35} \approx 7.69 \times 10^5\ \text{s} \approx 8.9\ \text{天}

反推验证:实际算力 =8.4×1022/7.69×105≈1.09×1017= 8.4{\times}10^{22} / 7.69{\times}10^5 \approx 1.09{\times}10^{17} FLOPs/s,等价于每卡 109 TFLOPS;109/312=35%109 / 312 = 35\% ✅ 与设定一致。

概念 含义 典型值
峰值算力 硬件理论最大(A100 BF16 dense:312 TFLOPS,不含稀疏加速) —
MFU 只计「模型有效 FLOPs」的利用率 30%~50%
HFU 计「硬件实际执行 FLOPs」的利用率(含 activation checkpointing 的重算等额外开销) 通常 ≈ 1.2~1.5 × MFU
GPU hours 训练总成本单位(云上约 1 1~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)换推理成本
📝 小测验
估算训练算力的经典公式 C ≈ 6ND 中,系数 6 的来源是?
A模型有 6 层
B前向 2ND + 反向对输入 2ND + 反向对权重 2ND
C6 种矩阵乘法
D经验值,没有解释
显示答案与解析

正确答案:B

每个参数对每个 token 在前向是 1 次乘加(2 FLOPs),反向要分别对输入和权重求导,各再 2ND。合计 6ND。
📝 小测验
一个 7B 模型训练 2T token,FLOPs 大约是多少?
A8.4e19
B8.4e22
C8.4e25
D8.4e18
显示答案与解析

正确答案:B

6 × 7e9 × 2e12 = 8.4e22 FLOPs。
📝 小测验
Chinchilla 的核心结论是?
A模型越大越好
B固定算力下,模型大小与训练数据应等比例放大,D/N ≈ 20
C数据越多越好
D学习率决定一切
显示答案与解析

正确答案:B

Chinchilla 发现 N* ∝ D* ∝ C^0.5,最优配比约 20 token/参数。GPT-3 时代参数过大、数据不足。
📝 小测验
为什么 LLaMA-3-8B 要用 15T token 训练(D/N ≈ 1875,远超 Chinchilla 最优)?
A团队算错了
B过度训练:训练成本是一次性的,小模型推理成本低,长期部署更省钱
C数据不要钱
D为了刷榜
显示答案与解析

正确答案:B

Chinchilla 只优化训练算力。实际部署中推理是持续成本,用小模型过度训练换取推理效率是行业共识。
← Build Your Own Small LLM(下):训练篇🏠 回到交互版首页GPU Fundamentals:从 SM 到 Roofline →
本章完。原始 Markdown:content/14-scaling-laws.md