算力固定,参数 N 和数据 D 怎么分?
本课一问:上一课把预算写成了一个数 C ≈ 6ND。C 固定时,N 和 D 此消彼长:是做一个大模型、少喂点数据,还是做一个小模型、多喂点数据?
这一课先不碰:模型训完还要被调用多少次(第 3 课)、Kaplan 和 Chinchilla 为什么得出不同结论、拟合结果该信几分(岔路课)、学习率和 batch(第 4 课)。
从已有出发
模型的结构 C1–C4 已经定了,这一课只动它的尺寸。贯穿任务还是那个:如果给你一个算力预算 C,Qwen3.8-27B 这样的模型该做多大、喂多少?(一句话例句在这里用不上,原因见第 1 课。)
第 1 课给了尺子:C ≈ 6·N·D。预算一定,N × D 就是一个常数 C/6——N 翻倍,D 就得减半。问题变成:沿着这条「等算力线」,哪一点的 loss 最低?
- 解决了loss 随参数、数据、算力按幂律下降:参数翻倍,loss 乘以 0.9487(Kaplan 式 1.1)。幂律的多领域实证首见 Hestness 2017。卡在纯幂律没有底,直线外推偏乐观:Llama 3 的数据只用 ≤3×10²⁰ 的预算外推 10²²,预测 0.6574,真实 0.6931。
- 解决了给出 N ∝ C0.73:预算 ×10,模型 ×5.37、数据只 ×1.86。卡在Gopher 280B 只训 300B token;同预算的 Chinchilla 70B 训 1.4T,MMLU 60.0% → 67.6%。
- 解决了每个预算扫一遍模型大小,loss 呈 U 形,谷底连成前沿:N ∝ C≈0.5,约 20 token/参数。页内用 Chinchilla 的真实点拟得 a = 0.511,外推到 5.76×10²³ 得 67.1B / 1.43T。卡在只算训练的账。模型要服务 10T 个 token 时,按训练最优做的模型总算力 2.02×10²⁴,换成同样 loss 的 34.1B 小模型只要 1.44×10²⁴。
- 解决了Kaplan 偏大的主因找到了:只数非 embedding 参数 + 规模小(Pearce & Song);末层计算、warmup、按规模调优化器(Porian)。卡在Chinchilla 自己的拟合系数也有错:正文取整后的系数在 5.76×10²³ 隐含 92.6 token/参数,Besiroglu 重拟合是 18.4;抛物线法本身也有偏差(Llama 3 数据上相当于 6.5% 的预算配错)。
- 解决了把推理的 2N FLOPs/token 算进总账,最优模型变小、数据变多:Llama 3 8B 1,875 token/参数,Qwen3-0.6B 60,000。卡在小模型上调好的超参搬不过去:按 DeepSeek LLM 的式子,10¹⁷ FLOPs 的最优学习率是 67B 那一档的 7.5 倍。
- 解决了最优学习率、batch 写成 C 的幂律:DeepSeek LLM 7B 预测 η = 4.25e-4,实际用 4.2e-4。卡在换结构、换优化器,最优点就挪:Qwen3.8 报告里旧配方末了 loss 高 7.8e-3、下游平均低 4.14 分(自报);多数团队不公开系数。
- 解决了缩放不止一条轴:数据从哪来(C7)、测试时多想一会儿(C12)都进了预算。卡在高质量数据会先用完:我们项目只有 50 万 token 语料,val 在第 300 步(约 4.9 个 epoch)最低 4.7713,之后一路升到 6.9065(实验课)。
先自己设计:沿用 Kaplan 2020 的建议
Kaplan 2020 的答案是:预算增加时,主要花在更大的模型上,训练时长和数据量不必大涨;它给出的最优模型大小 N ∝ C0.73,也就是预算 ×10,模型 ×5.37、数据只 ×1.86。2020–2021 年的大模型基本照此训练:GPT-3 175B、Gopher 280B 都只训了约 300B token。
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
Chinchilla 论文用同一个训练预算(与 Gopher 相同)做了一次对照:
| 模型 | 参数 N | 训练 token D | token/参数 | MMLU(5-shot) |
|---|---|---|---|---|
| Gopher | 280B | 300B | 1.07 | 60.0% |
| Chinchilla | 70B | 1.4T | 20 | 67.6% |
按 6ND 算,两者分别是 5.04×10²³ 与 5.88×10²³ FLOPs,同一量级;论文统一按 5.76×10²³ 比较。参数砍到 1/4、数据翻 4 倍,反而全面胜出。
小尺度上也单独核对过(原文附录 D.4):在 10²¹ FLOPs 上,Kaplan 的式子建议 4.68B,Chinchilla 的方法建议 2.86B;实际各训一个(4.74B 与 2.80B,深宽比相同),小的那个训练 loss 更低。
不从旧公式出发,而是直接测:固定一个预算 C,训一组大小不同的模型,每个模型喂 D = C/(6N) 个 token,看谁的 loss 最低。换一个预算再做一遍。这就是 Chinchilla 的「Approach 2:IsoFLOP 剖面」,下面用他们的真实实验点在页内重做一次。
这个对照不是纯粹的「只改 N 和 D」:原文附录 G 写明,Gopher 用 Adam、Chinchilla 用 AdamW,Chinchilla 还在优化器状态里存了更高精度的权重副本;MMLU 也只是一个评测。所以它是一个很有说服力的例子,但不是严格的单变量实验——真正的证据是下面这类系统扫描。
改进:IsoFLOP 剖面——每个预算找一次谷底
做法只有三步:
- 固定预算:Chinchilla 选了 6×10¹⁸ 到 3×10²¹ 之间的 9 个预算。
- 扫模型大小:每个预算训一组 N 不同的模型,token 数 D = C/(6N),记下最终 loss。
- 找谷底:把 loss 对 log N 画出来,是一个 U 形;拟合一条抛物线,顶点就是这个预算下最省的模型。
九个顶点连起来,就是「预算 → 最优模型大小」的前沿;它在 log-log 图上是一条直线,斜率 a 就是 Nopt ∝ Ca 的指数。
试三件事:① 默认选中的是 6×10²⁰ 这一档:13 个模型的抛物线顶点在 N = 2.235B,D = C/(6N) = 44.7B,D/N = 20.0;逐个点其它预算,看 U 形怎么随预算右移。② 点「全部预算一起拟合」:前沿指数 a = 0.511(原文表 2 的 Approach 2 是 0.49),外推到 5.76×10²³ 得 67.1B / 1.43T,原文表 3 是 67B / 1.5T,真正训出来的 Chinchilla 是 70B / 1.4T。③ 切到「Llama 3 133 点」:同一套算法拟出最优 token 数 D = 0.2994·C0.5368,和 Llama 3 报告图 3 的图例(A = 0.299、α = 0.537)对得上。
为什么是 U 形?把 loss 拆成三段
IsoFLOP 剖面告诉我们谷底在哪,Chinchilla 的第三种方法(Approach 3)试图说明它为什么在那:把最终 loss 写成三项之和,再在 C = 6ND 的约束下求最小值。
对这个式子在 C = 6ND 上求导,谷底有闭式解:
下面把 U 形画出来,并把 Kaplan 的建议放在同一条曲线上:
试四件事:① 先看线性横轴——曲线挤在最左边,读不出结构;切到对数横轴,U 形才出来,紫线(参数不够)和橙线(数据不够)在谷底两侧此消彼长。② 预算停在 5.76×10²³:Kaplan 的建议是 484.9B 参数、198B token(D/N = 0.41),落在 U 形右坡上,loss 2.0125,比谷底(1.9744)高。③ 点预设 10²¹:Kaplan 的点是 4.683B,正是 Chinchilla 附录 D.4 引用的 4.68B。④ 把系数切到「Hoffmann 2022 正文(取整)」:谷底一下移到 32.2B,D/N 变成 92.6——同一篇论文的另外两种方法和它自己训练用的都是约 20。这个矛盾留给岔路课。
🔍 旧版计算器为什么算出 10,992B 参数?
旧版 ScalingCalc 用了一个自拟的 Kaplan 式子,默认预算下给出「N ≈ 10,992B、D ≈ 4M token」这种荒谬结果(迁移审计 R5 Q-E1),它的 loss 曲线系数也是示意的(Q-F9)。本课的 ScalingCalc2 改用 Kaplan 原文表 6:Nopt = 1.3×10⁹ · Cmin0.73,Cmin 以 PF-day(8.64×10¹⁹ FLOPs)为单位;按原文式 5.5,在临界 batch 下训练时 Cmin = C/2。这个换算在 10²¹ FLOPs 处给出 4.683B,与 Chinchilla 附录 D.4 引用的数字一致——说明换算方式和 Chinchilla 作者当年用的相同。U 形曲线全部用已发表的拟合系数现算。
常见误解一:「20 token/参数是一条定律。」
它是 Chinchilla 的数据(MassiveText)、分词、训练设置下拟合出来的经验值。换了数据,指数就变:DeepSeek LLM 在自家早期数据、现在的数据、OpenWebText2 上拟出的 a 分别是 0.45、0.524、0.578(报告表 4;数据质量越高越该把预算给模型)。就连同一套方法换成 Llama 3 的数据,外推到 5.76×10²³ 也是 D/N ≈ 30,不是 20。原文表 3 本身也不是常数:1B 参数配 20.2B token,10T 参数配 216.2T token。
常见误解二:「Chinchilla 把 Kaplan 全推翻了。」
保留下来的比推翻的多:loss 随规模按幂律下降、C ≈ 6ND、「大模型不该训到收敛」,Chinchilla 都认同(论文引言原话:「我们得出同样的结论,但认为大模型应该训更多 token」)。被修正的是分配指数:0.73 → 约 0.5。至于 Kaplan 为什么得到 0.73,是岔路课的内容。
常见误解三:「预算固定时,模型越大越好。」
U 形的右半边就是反例:模型越大,每个参数分到的 token 越少,「数据不够」那一项会反超上来。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 同样的算力,怎么分给参数和数据,训出的模型最好 |
| ② 数学上为什么可能有效? | 给定 L = E + A/Nα + B/Dβ,约束 6ND = C 下的最优点有闭式解,a = β/(α+β) 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条求导是严格的;但式子本身的形状与系数来自拟合。 出处Hoffmann 2022 式 (4) ↗ ;三项分解有统计学习的动机 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条近似误差 + 估计误差 + 不可约项;不是对 Transformer 的证明。 出处Hoffmann 2022 附录 D.2 ↗ |
| ③ 实验上为什么选了它? | 三种独立方法给出 a = 0.50 / 0.49 / 0.46 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条MassiveText、70M–16B 参数、400 多个 run;第三种方法的系数后来被发现有问题(岔路课)。 出处Hoffmann 2022 表 2 ↗ ;页内用重建的 123 个点复现 a = 0.511;Chinchilla 70B 在同预算下胜过 Gopher 280B(有混杂因素,见上) |
一句话
算力固定时,loss 对模型大小是一条 U 形谷:太小装不下,太大喂不饱。谷底随预算右移,参数和数据大致同比例长——在 Chinchilla 的设置下约 20 token/参数,但这个数随数据和拟合方法变。
先停在这里:记住「U 形、谷底、同比例」,进下一课。
再深一层:走一趟岔路课——同一份数据,为什么 Kaplan、Chinchilla 自己、复现者得出的数各不相同。
下一个缺口
训练最优就是部署最优吗?模型训完还要被调用十亿次。 → 第 3 课:模型要被调用十亿次,还按训练最优训吗?
岔路:为什么 Kaplan 与 Chinchilla 结论不同?这条「定律」该信几分? → 岔路课
你可能会问
- 「GPT-3 是不是训少了?」 按 6ND,GPT-3(175B、300B token)花了 3.15×10²³ FLOPs;同样的预算,Besiroglu 重拟合的最优点是 53.0B 参数、990B token。按训练最优的标准,它参数多了约 3.3 倍、数据少了约 3.3 倍——这是在 MassiveText 上拟出的系数,只作相对比较。
- 「为什么 Kaplan 得出 0.73?」 主要原因是只数不含 embedding 的参数、实验规模偏小,另有末层计算、warmup 和按规模调优化器等因素——见岔路课。
- 「抛物线拟合有没有问题?」 有:Czech 等人 2026 年指出,抛物线对不对称的 U 形有系统偏差,用在 Llama 3 的数据上相当于配错了 6.5% 的预算。岔路课会用同一批点看这些拟合选择的影响。