Scaling Laws 与算力预算
第 7 课:Scaling Laws 与算力预算
第一部分我们看清了模型长什么样。现在进入第二部分——模型是怎么被"造"出来的。第一站是最底层的约束:给定一笔算力预算,该造多大的模型、喂多少数据?这不是拍脑袋,而是有可计算的公式。
② 说清 Chinchilla 的 20:1 规则怎么来的,以及为什么现代模型故意"过训练"
③ 判断一个模型的训练配方是否合理,并解释 MoE(混合专家:把模型拆成许多个专家子网络,每个 token 只激活其中少数几个,用较少计算换取更大参数量)为什么让数据墙更严重
上一课我们把 LLM 家族画成了一张全景图。从这一课起,镜头切到「模型是怎么被造出来的」,第一站是最底层的约束——算力。
要谈「该造多大模型」,前提是先能算清一次训练花多少算力。这条公式(训练 FLOPs ≈ 6 × 参数量 × token 数,算力按 BF16(一种训练常用的半精度浮点格式)口径计)已在第 5 课推导过,这里直接拿来用,不再重复。
但「怎么算」只是一把尺子,真正有故事的问题是怎么分:同一笔算力预算,是换成一个更大的模型,还是换成更多的训练数据?2019 到 2022 年,这个问题被两篇论文公开「吵」了一架。
可以把这类比成给仓库配货架和货:算力是装修预算,货架是模型参数(决定能装多少),货是要喂的数据(决定装了什么)。Kaplan 一派说「多搭货架,货少一点也高效」;Chinchilla 一派说「货架和货要按比例一起加,光搭货架是浪费」。
谁赢了、为什么赢,以及这个故事怎么直接引出后面「过训练」的那张卡,都在下面的算账里。
照 Kaplan 的配方,算力会被浪费:GPT-3 用 175B 参数却只喂了 300B token(约 1.7 token / 参数),而按后来修正的 20:1,它本应喂约 3.5T token——数据少了约 12 倍,多出来的是「空转」的大模型。
| 论文 | 参数量随算力增长 | 数据量随算力增长 | 两者相乘(≈6ND 倍数) |
|---|---|---|---|
| Kaplan et al. (2020) | N ∝ C0.73(约 5.5×) | D ∝ C0.27(约 1.8×) | 5.5 × 1.8 ≈ 9.9× |
| Chinchilla (2022) | N ∝ C0.50(约 3.16×) | D ∝ C0.50(约 3.16×) | 3.16 × 3.16 ≈ 10× |
| 方案 | 参数量 N | 数据 D | 算力 6ND | 相对基准 |
|---|---|---|---|---|
| 基准(示意) | 10B | 100B | 6 × 10e9 × 100e9 = 6 × 10²¹ | 1× |
| 只把参数翻倍(Kaplan 式) | 20B | 100B | 6 × 20e9 × 100e9 = 1.2 × 10²² | 2× |
| 参数与数据一起翻倍(Chinchilla 式) | 20B | 200B | 6 × 20e9 × 200e9 = 2.4 × 10²² | 4× |
| 步骤 | 计算 | 结果 |
|---|---|---|
| 算力公式 | C ≈ 6 × N × D | —— |
| 代入 D = 20 N | C ≈ 6 × N × 20N | = 120 N² |
| 反解模型大小 | N ≈ √(C / 120) | 给定预算即可定 N |
| 复算 Chinchilla | 70B × 20 | = 1.4 × 10¹² = 1.4T token |
| 模型 | 参数量 | 训练 token | token / 参数 | 训练算力 6ND |
|---|---|---|---|---|
| Gopher | 280B | 300B | ≈1.1 | 6 × 280e9 × 300e9 ≈ 5.04 × 10²³ |
| Chinchilla | 70B | 1.4T | 20 | 6 × 70e9 × 1.4e12 ≈ 5.88 × 10²³ |
这不是「谁对谁错」的学术八卦,而是一次关于口径与实验方法的教训:Kaplan 的分配之所以偏保守,是因为实验中的口径偏差(哪些参数与算力被计入)与设置差异,把结论推向了「模型越大越好」。Chinchilla 修正后给出一个可复算的答案——同一笔算力下,模型与数据应近似等比例增长(约 20 token / 参数)。但「训练最省」不等于「总成本最省」:工业界很快发现,把模型压小、数据喂到远超 20:1(过训练),长期推理反而更便宜——这正是本课第 3 张卡要算的账。
上一张卡片我们有了算力公式 C ≈ 6ND。现在问题来了:给定一笔预算 C,N 和 D 该怎么分?
先看两个极端:模型极大但数据极少(参数没喂饱),或模型极小但数据极多(容量不够用)。因为两者都会浪费算力,所以必然存在一个最优分配点——Chinchilla 用 400+ 次实验把它找了出来。
可以把这类比成给一个固定大小的厨房配厨师和食材:厨师太多(参数大)但食材不够,厨师闲着;厨师太少(参数小)但食材堆积,做不完。最优配比是两者同步增长。
| 结论 | Nopt 的指数 | Dopt 的指数 | 含义 |
|---|---|---|---|
| Kaplan et al. (2020) | C0.73 | C0.27 | 算力主要用来放大模型 |
| Chinchilla (2022) | C0.50 | C0.50 | 模型与数据等比例增长 |
| 项目 | 计算 | 结果 |
|---|---|---|
| 算力公式 | C ≈ 6 × N × D | —— |
| 代入 D = 20N | C ≈ 6 × N × 20N = 120 N² | —— |
| 反解 N | Nopt ≈ √(C / 120) | 给定预算即可算最优参数量 |
| Chinchilla 验证 | N = 70B → D = 20 × 70B | = 1.4T token(与论文一致) |
| 模型 | 参数量 | 训练 token | token/参数 | MMLU 平均(Chinchilla 论文口径,可核验) |
|---|---|---|---|---|
| Gopher | 280B | 300B | ≈1.1 | 60.0% |
| GPT-3 | 175B | 300B | ≈1.7 | 43.9% |
| Chinchilla | 70B | 1.4T | 20 | 67.5% |
Chinchilla 的结论可以一句话概括:在固定算力下,模型大小和数据量应该同步增长,而不是一味放大模型。这条规则把"该造多大"从直觉变成了可计算的问题——给定预算 C,最优参数量就是 √(C/120)。
上一张卡片我们得到 20:1 这个"训练最省"的点。但现实是:Llama 3 8B 用了约 1875:1——是 Chinchilla 建议的近 100 倍。为什么?
因为算力只在训练时花一次,而推理成本要跟着模型服务一辈子,所以"训练最省"不等于"总成本最低"。可以把这类比成买车:买车时多花点钱买省油的车,长期油费省得更多。反过来说,死守 20:1 也不划算:8B 模型按 20:1 只需喂约 160B token,训练端暂且省了,可上线之后推理要按每次调用重复付出——省的是「训练一次」,亏的是「推理一辈子」。
| 方案 | 参数量 N | token D | token/参数 | 训练算力 6ND |
|---|---|---|---|---|
| Chinchilla 最优 | 70B | 1.4T | 20:1 | 6 × 70e9 × 1.4e12 = 5.9 × 10²³ |
| 过训练(示意) | 20B | 4T | 200:1 | 6 × 20e9 × 4e12 = 4.8 × 10²³ |
| 项目 | 70B 模型 | 20B 模型 | 倍数 |
|---|---|---|---|
| 单次推理 FLOPs(每 token) | 2 × 70e9 = 1.4e11 | 2 × 20e9 = 4.0e10 | 3.5× |
| 权重显存(fp16) | 140 GB | 40 GB | 3.5× |
| 假设服务 10¹² 个 token | 1.4e23 FLOPs | 4.0e22 FLOPs | 3.5× |
| 项目 | 计算 | 结果 |
|---|---|---|
| 训练算力差 | 5.9e23 − 4.8e23 | 1.1 × 10²³ FLOPs(70B 多花) |
| 每 token 推理算力差 | 1.4e11 − 4.0e10 | 1.0 × 10¹¹ FLOPs |
| 平衡服务量 | 1.1e23 ÷ 1.0e11 | ≈ 1.1 × 10¹² token |
Chinchilla 回答的是"训练最省",而工业界要的是"总成本最省"。因为推理成本正比于参数量、且要乘以服务次数,所以把模型压小、把数据喂多(过训练)几乎总是更优——这就是为什么现代开源模型普遍在 100:1 到 2000:1 之间,而不是 20:1。
上一张卡片我们看到过训练需要海量数据。那问题来了:数据够吗?
因为高质量公开文本的总量是有限的,而模型规模还在指数增长,所以必然存在一个"撞墙"的时刻。可以把这类比成粮仓:粮食总量固定,但吃饭的人越来越多、饭量越来越大。
| 模型规模 | Chinchilla 最优 token(20:1) | 过训练 100:1 |
|---|---|---|
| 7B | 140B | 700B |
| 70B | 1.4T | 7T |
| 405B | 8.1T | 40.5T |
| 1T | 20T | 100T |
| 10T | 200T | 1000T |
| 项目 | 数值 | 说明 |
|---|---|---|
| 高质量公开文本存量 | ≈300 万亿 token | Epoch AI 估算(口径差异大) |
| 被施加访问限制 | 约 25%~28% 的最活跃关键来源(二手来源口径不一) | Data Provenance Initiative 报告;"C4 中 45% 受限"未见一手原句,需人工核实 |
| 实际可用(保守估计) | ≈216 万亿 token 量级(按"关键来源 28%"近似套用于 token 存量,粗估) | 300 × (1 − 28%) |
| 对比项 | 需求 | 可用存量 | 缺口 |
|---|---|---|---|
| 1T 参数模型(20:1) | 20T | 216T | 无缺口 |
| 10T 参数模型(20:1) | 200T | 216T | 接近耗尽 |
| 10T 参数模型(100:1) | 1000T | 216T | 缺 4.6 倍(按 285T 口径则约 3.5 倍) |
数据墙不是"没有数据",而是"能直接下锅的数据不够":存量有限(约 300 万亿 token,估算)、最活跃的关键来源还在被锁(28%)、而过训练又把需求放大了 5 倍。这三者叠加,使得"继续靠堆数据提升能力"这条路在 2026~2032 年间逐步失效。
上一张卡片我们看到数据墙。一个自然的想法是:用 MoE 不就能绕过去吗?——毕竟 MoE 每 token 只激活一小部分参数,看起来"更省"。
但这个直觉是错的。因为 MoE 省的是算力不是显存,而数据需求恰恰跟着总参数走,所以 MoE 让数据墙更严重。可以把这类比成一家有 256 位专科医生的大医院:挂号只叫 8 位进诊室(省算力),但每位医生都得积累足够病例才能成为专家(数据需求按 256 人算)。
| 资源 | 看哪个参数 | 以 671B/37B 为例 |
|---|---|---|
| 显存占用 | 总参数 | 671B(4-bit 约 404GB) |
| 每 token 算力 | 激活参数 | 37B(约为总参数的 5.5%) |
| 项目 | 计算 | 结果 |
|---|---|---|
| 路由专家数 E | —— | 256(DeepSeek-V3 口径,另有 1 个共享专家) |
| 每 token 激活的专家数 K | —— | 8(top-8 路由) |
| 每专家实际见到的 token | D × K ÷ E | D × 8 / 256 = D / 32 |
| 若 D = 15T | 15e12 × 8 ÷ 256 | ≈ 4.7 × 10¹¹(4700 亿) |
| 口径 | 数据需求(20:1) | 是否现实 |
|---|---|---|
| 按激活参数 37B | 740B token | 看起来很容易满足 |
| 按总参数 671B | 13.4T token | 接近 Llama 3 的 15.6T 量级 |
MoE 是一个算力-数据交换:用"更多参数、更少激活"换取推理便宜,代价是数据需求按总参数增长。所以在数据墙的背景下,MoE 不是解药——它把问题从"算力不够"换成了"数据更不够"。真正的出路是合成数据、数据复用与推理时计算(test-time compute)。
前面五张卡片分别讲了算力公式、Chinchilla 规则、过训练、数据墙、MoE。现在把它们串成一个可操作的决策流程。
因为每一步都有明确公式,所以这套流程可以当"审配方"的检查表用——拿到任何一份训练方案,都能逐步验算它是否合理。可以把这类比成装修前的预算表:先算总面积(算力),再定房间数(模型大小),最后核对材料够不够(数据存量)——每一步都能提前验算,而不是装到一半才发现钱不够。
| 输入 | 换算 | 示例 |
|---|---|---|
| GPU 数量 × 卡时 | × 单卡有效算力 | 16384 卡 × 54 天 |
| 单卡有效算力 | BF16 dense 峰值 × 利用率 | 989 TFLOPS × 50% ≈ 4.9e14 FLOP/s(50% 为假设的 MFU,估算) |
| 总算力 C | 16384 × 4.9e14 × 54×86400 | ≈ 3.8 × 10²⁵ FLOPs |
| 步骤 | 公式 | 代入 C = 3.8e25 |
|---|---|---|
| Chinchilla 关系 | C ≈ 120 N² | —— |
| 反解 N | N ≈ √(C / 120) | √(3.8e25 / 120) ≈ 5.6 × 10¹¹ |
| 结果 | —— | ≈ 560B 参数(Chinchilla 最优) |
| 方案 | 参数量 | token 数 | 数据是否够 |
|---|---|---|---|
| Chinchilla 最优 | 560B | 11.2T(20:1) | 够(存量 216T) |
| 过训练约 38:1 | 405B | 15.6T | 够(Llama 3 实际选择) |
| 过训练 100:1 | 405B | 40.5T | 够,但需大量重复 |
| 过训练 100:1 | 1T | 100T | 接近存量上限 |
这套流程的价值在于:它把"造模型"从"烧钱试错"变成了"先算后做"。给定预算,你能提前算出模型该多大、数据要多少、会不会撞数据墙——而不是训完才发现配方不对。这也是为什么第二部分后续每一课(数据、预训练、微调、对齐)都要建立在这张算力账上。