从0训练LLM · 现代大模型体系 阅读 + 实验 ≈ 35 分钟 页内实验 ×3
C6 规模:训多大、喂多少 第 2 课

算力固定,参数 N 和数据 D 怎么分?

N 和 D 怎么分
Kaplan 2020 说预算主要加给参数,于是 Gopher 280B 只训了 300B token;同样的算力,Chinchilla 70B 训 1.4T token 全面胜出。在真实的 IsoFLOP 点上逐预算找 U 形的谷底,参数和数据大致同比例长——在 Chinchilla 的设置下约 20 token/参数。
❓

本课一问:上一课把预算写成了一个数 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 最低?

缩放律的演进:每一代都被上一代的某个真数字逼出来 · 高亮 = 本课所在的一代
  1. 起点 训完再看 没有缩放律的时候
    解决了不需要任何理论,直接训。
    卡在一次就是全部预算:DeepSeek-V3 全程 278.8 万 H800 GPU 小时,没有第二次试错机会。
  2. 第一代 幂律:用小模型外推大模型 Hestness 2017 → Kaplan 2020
    解决了loss 随参数、数据、算力按幂律下降:参数翻倍,loss 乘以 0.9487(Kaplan 式 1.1)。幂律的多领域实证首见 Hestness 2017。
    卡在纯幂律没有底,直线外推偏乐观:Llama 3 的数据只用 ≤3×10²⁰ 的预算外推 10²²,预测 0.6574,真实 0.6931。
  3. 第一代 · 分配 Kaplan 的算力分配:主要加参数 Kaplan 2020
    解决了给出 N ∝ C0.73:预算 ×10,模型 ×5.37、数据只 ×1.86。
    卡在Gopher 280B 只训 300B token;同预算的 Chinchilla 70B 训 1.4T,MMLU 60.0% → 67.6%。
  4. 第二代 Chinchilla:参数与数据同比例长 Hoffmann 2022 你在这里
    解决了每个预算扫一遍模型大小,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²⁴。
  5. 解决了Kaplan 偏大的主因找到了:只数非 embedding 参数 + 规模小(Pearce & Song);末层计算、warmup、按规模调优化器(Porian)。
    卡在Chinchilla 自己的拟合系数也有错:正文取整后的系数在 5.76×10²³ 隐含 92.6 token/参数,Besiroglu 重拟合是 18.4;抛物线法本身也有偏差(Llama 3 数据上相当于 6.5% 的预算配错)。
  6. 第三代 过训练:为推理成本训小一点、久一点 LLaMA 2023 → Sardana 2023 → Gadre 2024
    解决了把推理的 2N FLOPs/token 算进总账,最优模型变小、数据变多:Llama 3 8B 1,875 token/参数,Qwen3-0.6B 60,000。
    卡在小模型上调好的超参搬不过去:按 DeepSeek LLM 的式子,10¹⁷ FLOPs 的最优学习率是 67B 那一档的 7.5 倍。
  7. 第四代 超参也拟缩放律(或换参数化) DeepSeek LLM 2024 → Qwen3 2025 → Qwen3.8 2026;μP 在 C8
    解决了最优学习率、batch 写成 C 的幂律:DeepSeek LLM 7B 预测 η = 4.25e-4,实际用 4.2e-4。
    卡在换结构、换优化器,最优点就挪:Qwen3.8 报告里旧配方末了 loss 高 7.8e-3、下游平均低 4.14 分(自报);多数团队不公开系数。
  8. 解决了缩放不止一条轴:数据从哪来(C7)、测试时多想一会儿(C12)都进了预算。
    卡在高质量数据会先用完:我们项目只有 50 万 token 语料,val 在第 300 步(约 4.9 个 epoch)最低 4.7713,之后一路升到 6.9065(实验课)。
数字口径:论文原文数字(Kaplan 2020、Hoffmann 2022、Besiroglu 2024、DeepSeek LLM 2024、Llama 3 2024、Qwen3 2025、Qwen3.8-Flash-Next 2026)与现算结果都存在 src/data/precomputed/c06-isoflop.json,由 gen_c06_isoflop.py 生成;Qwen3.8 的数字是官方自报(第③层可信度);项目一格来自 04-实践项目 的真实日志。

先自己设计:沿用 Kaplan 2020 的建议

Kaplan 2020 的答案是:预算增加时,主要花在更大的模型上,训练时长和数据量不必大涨;它给出的最优模型大小 N ∝ C0.73,也就是预算 ×10,模型 ×5.37、数据只 ×1.86。2020–2021 年的大模型基本照此训练:GPT-3 175B、Gopher 280B 都只训了约 300B token。

  1. ① 朴素方案
  2. ② 它在哪失败
  3. ③ 改进方案
朴素方案按 Kaplan 2020:预算主要加给参数(N ∝ C^0.73)

Chinchilla 论文用同一个训练预算(与 Gopher 相同)做了一次对照:

模型参数 N训练 token Dtoken/参数MMLU(5-shot)
Gopher280B300B1.0760.0%
Chinchilla70B1.4T2067.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 更低。

⚖

这个对照不是纯粹的「只改 N 和 D」:原文附录 G 写明,Gopher 用 Adam、Chinchilla 用 AdamW,Chinchilla 还在优化器状态里存了更高精度的权重副本;MMLU 也只是一个评测。所以它是一个很有说服力的例子,但不是严格的单变量实验——真正的证据是下面这类系统扫描。

改进:IsoFLOP 剖面——每个预算找一次谷底

做法只有三步:

  1. 固定预算:Chinchilla 选了 6×10¹⁸ 到 3×10²¹ 之间的 9 个预算。
  2. 扫模型大小:每个预算训一组 N 不同的模型,token 数 D = C/(6N),记下最终 loss。
  3. 找谷底:把 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 的约束下求最小值。

Chinchilla 的参数化 loss(Hoffmann 2022 式 10;400 多个训练 run 拟合)
= + +
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
在 C = 6ND 上往左走(小模型、多数据),A/Nα 涨;往右走(大模型、少数据),B/Dβ 涨;两者此消彼长,中间就是谷底。正文系数取整后有问题(岔路课细讲),下面的组件默认用 Besiroglu 2024 的重拟合值。

对这个式子在 C = 6ND 上求导,谷底有闭式解:

约束 C = 6ND 下的最优点(Hoffmann 2022 式 4)
= · (C/6)
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
代入 C = 5.76×10²³(重拟合系数):Nopt = 72.2B,Dopt = 1.33T,D/N = 18.4。求导这一步是严格的,但结果只和拟合系数一样可靠。

下面把 U 形画出来,并把 Kaplan 的建议放在同一条曲线上:

U 形曲线用哪组拟合系数 横轴

🎯

试四件事:① 先看线性横轴——曲线挤在最左边,读不出结构;切到对数横轴,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 = β/(α+β) ;三项分解有统计学习的动机
③ 实验上为什么选了它?三种独立方法给出 a = 0.50 / 0.49 / 0.46 ;页内用重建的 123 个点复现 a = 0.511;Chinchilla 70B 在同预算下胜过 Gopher 280B(有混杂因素,见上)

一句话

📌

算力固定时,loss 对模型大小是一条 U 形谷:太小装不下,太大喂不饱。谷底随预算右移,参数和数据大致同比例长——在 Chinchilla 的设置下约 20 token/参数,但这个数随数据和拟合方法变。

🚦

先停在这里:记住「U 形、谷底、同比例」,进下一课。
再深一层:走一趟岔路课——同一份数据,为什么 Kaplan、Chinchilla 自己、复现者得出的数各不相同。

下一个缺口

训练最优就是部署最优吗?模型训完还要被调用十亿次。 → 第 3 课:模型要被调用十亿次,还按训练最优训吗?

岔路:为什么 Kaplan 与 Chinchilla 结论不同?这条「定律」该信几分? → 岔路课

你可能会问