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

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

Kaplan 与 Chinchilla
Kaplan 的 0.73 主要来自只数非 embedding 参数和小规模实验;Chinchilla 自己第三种方法的系数也被复现者发现有错——取整后隐含 92.6 token/参数,重拟合回到 18.4。这是一堂「证据三问」的范例课:同一份数据,口径和拟合选择就能挪动结论。
🔀

这是一堂岔路课,也是本章的「证据三问」范例课。旧版课程里有一句话:「这两条结论直接冲突——冲突本身就是最好的教材。」这一课把冲突拆开:Kaplan 2020 说最优模型 N ∝ C0.73,Chinchilla 2022 说 ∝ C0.5 左右,差别大到决定了一代模型怎么训。

本课一问:两份都是认真做的大规模实验,为什么结论不同?这条被叫作「定律」的东西,该信几分?
这一课先不碰:推理成本(回主线第 3 课)。

从已有出发

第 2 课的 U 形与谷底,在 Chinchilla 的真实点上复现了 a ≈ 0.5。这一课不换数据,只换看数据的方式:参数怎么数、拟合怎么做、系数写几位小数。用的仍是那 123 个 IsoFLOP 点(本章的贯穿任务不变:给一个 Qwen3.8-27B 级别的模型定预算,拿什么数字才靠得住)。

缩放律的演进:每一代都被上一代的某个真数字逼出来 · 高亮 = 本课所在的一代
  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. 修正史 复现与修正:这条「定律」该信几分 2024–2026 你在这里
    解决了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 的 0.73 从哪来

2024 年有两篇论文专门复现了这个差异,结论相互补充:

「只数非 embedding 参数」为什么在小规模上影响这么大?看几个真实的数:

模型全部参数其中 embedding(含输出层)占比出处
DeepSeek LLM 表 3 最小的一档(8 层、d = 512、词表 102,400)77.6M77.6M − 25.2M = 52.4M67.5%DeepSeek LLM 表 3
我们的 minillm 基线(词表 2,048,输入输出共享)3,688,704524,28814.2%04-实践项目 README
Qwen3.8-27B 文本主干26,895,998,4642,542,796,8009.5%anchor-model.json

小模型里 embedding 可以占到大头,大模型里只占零头。用「非 embedding 参数」和「全部参数」当横轴,小模型那一端的点会整体左右平移,拟合出的斜率就跟着变——而 Kaplan 的实验恰恰集中在小模型。DeepSeek LLM 为此干脆换了一把尺子:用每 token 的非 embedding FLOPs M(含注意力开销),并报告 6N 与 M 在小模型上能差到 50%(报告表 3:6N1/M 从 0.43 到 0.92)。

第二组修正:Chinchilla 自己的第三种方法也错了

Chinchilla 用三种方法求分配指数,前两种给出 a = 0.50 与 0.49,第三种(参数化拟合)给出 0.46,并附了一个窄得出奇的置信区间 [0.454, 0.455]。2024 年,Epoch AI 的 Besiroglu 等人想复现第三种方法,遇到的第一个问题是:原始数据没有公开。他们只好下载论文 PDF,从图 4 的矢量图里把 245 个点的坐标一个个读出来,loss 从颜色刻度读(256 级颜色,精度约 0.01)。复现结果:

取整这件事单独拿出来看,影响有多大:

① Chinchilla 的拟合系数:取整会挪动结论吗?
算力预算 把重拟合的 α、β 取到 小数

② Llama 3 的缩放律:同一条式子,两种写法

🎯

试三件事:① 默认预算 5.76×10²³:对比三行的 D/N(92.6 / 59.1 / 18.4);② 点「1 位」小数,把重拟合的 α、β 取到 0.3 与 0.4,D/N 一下变成 0.08——指数的末位能把结论推到荒谬;③ 看下半张表:Llama 3 报告正文的系数(两位小数)外推出 10.5T token,图例的三位小数外推出 16.3T,报告结论是 16.55T。

第三组修正:拟合方法本身

就算数据和系数都没问题,「怎么拟合」也是一个选择。下面用同一批 Chinchilla 点,在页内把 L = E + A/Nα + B/Dβ 重新拟合(变量投影:α、β 在网格上逐一试,每一组对 E、A、B 解一次 3×3 最小二乘),你来改拟合选择:

🎯

试四件事:① 默认(最小二乘、排除 5 个离群点):5.76×10²³ 处 D/N = 12.2;把离群点「包含」进来,变成 2.9——5 个点改变了结论。② 目标函数切到 Huber(近似 Chinchilla 原文的做法):排除离群点时 12.1,包含时 7.5——Huber 对离群点更稳,这正是原文选它的理由。③ 「只用这些预算」选 ≤3×10²⁰:D/N 掉到 3.1;选「取 2 位小数」:几乎不动(12.3)。④ 点「8 个随机种子」:σ = 0.01 的噪声(正好是从颜色读 loss 的精度)就让 D/N 在 9.5–13.4 之间摆动;再点「算法自检」,同一段代码在 ml-scalefit 版数据上复现数据集卡片公布的 α = 0.39、β = 0.43、E = 1.916。

这些数都比 Besiroglu 的 18.4 小,因为这里只有 123 个点(落在 9 个 IsoFLOP 预算附近的那部分),而他们用了图 4 的全部 245 个点——这本身就说明:用哪些点拟合,也是结论的一部分。抛物线法(Approach 2)也不是无懈可击:Czech 等人 2026 年证明,当 U 形左右不对称(α ≠ β)、或者采样的模型没有以谷底为中心时,抛物线顶点会系统性地偏离真正的最优点;用在 Llama 3 公开的数据上,相当于把 3.8×10²⁵ FLOPs 预算的 6.5% 配错了地方,按 50% 的 H100 利用率折合约 1.4 百万美元(90% 置信区间 412 千到 2.9 百万美元) 。

⚠

常见误解一:「经验定律就是真理。」缩放律是在特定数据、分词、参数口径、训练设置下拟合出来的经验规律。换了其中任何一项,指数都可能变(DeepSeek LLM 表 4:换数据,a 从 0.450 到 0.578)。

常见误解二:「系数写到两位小数就够了。」C 动辄 10²⁴ 以上,指数乘上 ln C ≈ 55–59,末位的 0.007 就是 1.5 倍的差别。Besiroglu 的原话大意是:只报告几位有效数字的指数,不足以准确确定这个关系。

常见误解三:「拟合结果只取决于数据。」离群点留不留、目标函数用平方还是 Huber、用哪些预算,都会挪动结论(上面的探针)。报告缩放律时要一并报告这些选择。

证据三问:这条缩放律该信几分

把第 2 课的结论逐层拆开:

层内容能信到什么程度
数学可证明 若 L = E + A/Nα + B/Dβ,则最优 a = β/(α+β);α ≈ β 时 N、D 同比例长推导本身可靠;但它只把「系数」翻译成「建议」,系数错了建议就错
有理论动机 三段分解:语言的熵 + 模型类太小 + 样本有限说明「为什么可能是这个形状」,不说明指数是多少
实验验证 三种方法 a ≈ 0.46–0.50;被 Epoch、Porian 等独立复现并修正;DeepSeek、Llama 3 在自家数据上各拟一遍「参数和数据大致同比例长」这个定性结论很稳;「具体是 20」要连同数据与拟合方法一起说

这正是 C2 岔路课留下的那条证据链的最后一环——对话样本里的原话是:「Scaling:验证扩大到 7B / 70B / 训练万亿 token 后规律还成立吗」。缩放律本身,也要过这一关。

🔍 为什么 Chinchilla 选 Huber、选 log 残差?

原文附录 D.2:在 log loss 上做 Huber(δ = 10⁻³),因为小预算的点残差大,平方损失会被它们主导,预测不好留出的大预算点;δ 取更大会过拟合小算力区域,取更小则不影响结果。本页的 Huber 选项用相对残差 r/L 近似 log 残差(r/L ≈ log L − log L̂),用迭代加权最小二乘(IRLS)求解,是原文目标函数的一阶近似,不是逐字复刻。

一句话

📌

Kaplan 与 Chinchilla 的差别主要来自参数口径和实验设置,连 Chinchilla 自己的系数也被复现者修正过:缩放律是经验规律,引用时要连同数据、口径和拟合方法一起引用。

回到主线

回主线第 3 课:模型要被调用十亿次,还按训练最优训吗? → 第 3 课

你可能会问