训一个大模型之前,能预测它训完的 loss 吗?
本课一问:训一个大模型,一次就要花掉全部预算。能不能在训之前,就预测它训完的 loss?
这一课先不碰:预算定了之后参数和数据怎么分(第 2 课)、模型训完还要被调用多少次(第 3 课)、学习率和 batch 怎么跟着规模变(第 4 课)、拟合方法本身靠不靠得住(岔路课)。
从已有出发
到 C4 为止,一台完整的模型已经搭好:文字 → token → 向量 → 64 层解码层 → 下一个 token 的概率;C5 让它训得动(AdamW、学习率调度、梯度裁剪)。点下面最右边的「softmax 概率」,能看到锚点模型 Qwen3.8-27B 全部参数的真实合计。
这一章不往流水线上加新环节,而是问一个更贵的问题:这台机器该做多大(参数 N),喂多少数据(token 数 D)?这两件事一起决定了一次训练要花多少算力,也决定了它最后能到什么 loss。
为什么这一章换了例子:前几章贯穿的「小明把苹果给了小王」是一句话,而规模问题讨论的是一整次训练——一句话里没有 N,也没有 D。所以本章换成一个贯穿任务:「如果要从头训一个 Qwen3.8-27B 这么大的模型,要多少算力、喂多少 token、学习率和 batch 取多少?」它的参数量来自真实 config,训练 token 数官方没有公开,每一课都让你自己给 D,再对照公开了数字的模型。项目侧是同一个问题的小尺度版:我们 3,688,704 参数的模型,只有 501,615 个训练 token。
这一课在缩放律演进史里的位置:
- 解决了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(实验课)。
先自己设计:训出来再说?
最直接的想法:定一个规模,训完看 loss,不满意再换一个规模重训。
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
两个公开的真实账本:
- DeepSeek-V3:整个训练用了 278.8 万 H800 GPU 小时(其中预训练 266.4 万),报告按每 GPU 小时 2 美元算,约 557.6 万美元。
- Llama 3 405B:预训练算力 3.8×10²⁵ FLOPs,是 Llama 2 最大模型的将近 50 倍(报告 §1)。
「训完再看」意味着每换一个配置就再付一次这笔钱。Chinchilla 论文开头就写:大模型通常只训得起一次,所以在开训之前估准超参数至关重要。
用小得多的模型做实验,找出 loss 随参数、数据、算力变化的规律,再把规律外推到大模型:
- Chinchilla 为了决定一个 70B 模型怎么训,先训了 400 多个 7,000 万到 160 亿参数的模型(5B 到 500B token)。
- Llama 3 的缩放实验预算在 6×10¹⁸ 到 10²² FLOPs 之间(模型 40M 到 16B),最大的一档也只有正式训练的 1/3,800。
这一课要回答的是:这种外推凭什么能做,又会在哪里出错。
改进第一步:把「预算」变成一个数
要谈「用小模型预测大模型」,先得有一把统一的尺子量「花了多少」。最常用的是训练总浮点运算数:
试三件事:① 选「Llama 3.1 405B」,读 6ND 和报告值 3.8×10²⁵ 差多少(约 −0.2%);选「Chinchilla 70B」,6ND 比论文用的 5.76×10²³ 高约 2%。② 回到锚点 Qwen3.8-27B,把上下文从 4K 拉到 256K:锚点 16 个全注意力层的上下文项从 2N 的 1.5% 涨到 95.8%,6ND 严重低估。③ 选「我们的 minillm 基线」:7.25×10¹³ FLOPs,比 Chinchilla 最小的实验还小 5 个数量级。
常见误解:「6ND 永远准,各家报的 FLOPs 可以直接比。」
6ND 是在「上下文不长、只数矩阵乘」的前提下的近似。长上下文时注意力那一项会追上来;MoE 要换成激活参数;而且各家算法不同——Chinchilla 自己的逐项计数和 6ND 差 −1% 到 +10%(原文附录 F 表 A4);Llama 3 说 3.8×10²⁵ FLOPs 应训 402B 参数、16.55T token,但 3.8×10²⁵ ÷ (6 × 16.55T) 只有 383B,说明他们用的不是 6ND,报告没写明用的是什么。引用 FLOPs 时,要连口径一起引用。
改进第二步:loss 随规模怎么变?
有了尺子,下一个问题是:把 N、D 或 C 往大了推,loss 会以什么规律下降?这件事是被一步步问出来的:
- 2017 · Hestness 等(百度):在机器翻译、语言模型、图像分类、语音识别四个领域系统测量,发现泛化误差随训练数据量呈幂律下降;换更好的模型只是把曲线整体平移,指数几乎不变 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条四个领域的大规模实测;幂律是观察到的规律,文中说指数「尚待理论解释」。 出处Hestness et al. 2017 摘要 ↗需联网 。幂律缩放不是 Kaplan 首先发现的。
- 2020 · Kaplan 等(OpenAI):在语言模型上把参数、数据、算力三者写成统一的幂律,并给出算力该怎么分配的建议(第 2 课会看到这个建议后来被修正)。
- 2022 · Hoffmann 等(Chinchilla):给 loss 加上一个压不掉的常数 E,写成 E + A/Nα + B/Dβ。
- 2024 起:开训前先拟缩放律成了标准工序——DeepSeek LLM 用 1,000 倍小的实验预测了 7B、67B 的 loss,Llama 3 用它定下 405B 这个尺寸。
Kaplan 的第一条定律,逐项看:
用真数据检验一次:外推准不准?
光看公式不够,拿公开的真实实验点来试。下面每个点是一个算力预算下「能达到的最低 loss」(怎么从一组模型里找出最低点,是第 2 课的内容)。先猜形状,再看数据,再只用小预算的点去外推大预算:
试三件事:① 先选一个猜测,再在「线性 / log-log」之间切换——线性图上点挤成一团,log-log 图上几乎是一条直线;② 点「只用小预算拟合」,用最小的 6 个预算外推:Llama 3 数据上,直线预测 10²² FLOPs 的最低 loss 是 0.6574,真实是 0.6931,直线偏乐观;③ 再加上压不掉的底 E,预测变成 0.6876。切到 Chinchilla 数据再做一遍(3×10²¹ 处:直线 2.0960,带 E 2.2088,真实 2.2034)。
常见误解一:「幂律就是 log-log 图上的直线,可以一直外推。」
纯幂律 L = k·C−γ 会一路降到 0,而语言本身有不可约的不确定性(「今天天气真」后面可以是「好」也可以是「热」)。越接近这个底,每多 10 倍算力换来的下降越少,点会慢慢向上弯离直线。用小预算拟直线去外推,系统性地偏乐观——上面两份真数据都是这样。所以 Chinchilla 的形式里有一项常数 E。
常见误解二:「loss 是一个数,不同模型可以直接比大小。」
Kaplan 原文说 Nc、Dc 这些尺度常数取决于词表和分词,「没有本质含义」。上面 Llama 3 数据的 loss 在 0.69–0.93 之间,Chinchilla 的在 2.2–3.0 之间,不是一个比另一个好,而是尺子不同(数据、分词、归一方式都不同)。能比的是同一套实验内部的相对变化,以及指数。
🔍 为什么偏偏是幂律?有没有理论?
没有一个公认的推导。Chinchilla 附录 D.2 给了一个动机:把 loss 拆成三部分——语言本身的熵(E)、「模型类太小」造成的近似误差(随 N 下降)、「只见过有限样本、优化没走完」造成的误差(随 D 下降),各自按经验写成幂律相加。这是有理论动机的函数形式,不是证明;Hestness 2017 自己也说这些指数「尚待理论解释」。Lilian Weng 的长文把几种理论解释(数据流形维度、统计学习的误差分解等)列在一起,可以对照着读。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 大模型只训得起一次;用小实验预测大实验,把试错放到便宜的地方 |
| ② 数学上为什么可能有效? | C ≈ 6ND 是矩阵乘的计数 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条前向每参数 2 次乘加、反向约 2 倍;前提是忽略与上下文长度成正比的注意力项与非矩阵运算。 出处Kaplan 2020 表 1 ↗ ;E + A/Nα + B/Dβ 的三段分解有统计学习上的动机 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条风险分解给出函数形式的理由,但指数和系数只能拟合。 出处Chinchilla 附录 D.2 ↗ |
| ③ 实验上为什么信它? | 多个领域、多个团队反复观测到幂律 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条是观测到的经验规律,只在实验覆盖的规模与数据上成立;外推越远越要小心。 出处Hestness 2017;Kaplan 2020 ↗需联网 ;DeepSeek LLM 用小实验预测 7B、67B 的 loss 基本准确(报告 §3.2 图 5,自报)。前沿报告还拿它当尺子:Kimi K3 自报「同等算力下 scaling 效率比 K2 高约 2.5 倍」,依据是内部 run 拟出的缩放律——第三方无法复现,只能算第③层可信度 |
一句话
大模型只训得起一次,所以先把预算写成 C ≈ 6ND,再用一串小模型把 loss 随算力的规律拟出来外推——但那条线不是直的,loss 有个压不掉的底。
先停在这里:记住「6ND」和「外推要带底 E」,进下一课。
再深一层:展开上面「为什么偏偏是幂律」的 Dig,再读 Lilian Weng 的长文前三节。
下一个缺口
预算 C 定了,是做一个大模型少喂点数据,还是做一个小模型多喂点数据? → 第 2 课:算力固定,参数 N 和数据 D 怎么分?
你可能会问
- 「Kaplan 和 Chinchilla 给的指数不一样,信哪个?」 这个问题值得单独一课:岔路课:为什么 Kaplan 与 Chinchilla 结论不同?(建议先学完第 2 课)。
- 「Qwen3.8-27B 训了多少 token、花了多少算力?」 官方没有公开。上面的组件里锚点的 D 默认按「20 token/参数」填,只是一个假设;第 3 课会看到,近几年的开源模型实际喂的 token 远不止这个数。
- 「6 为什么不是 8?重计算(activation checkpointing)呢?」 6 只数了一遍前向和一遍反向。开了重计算,反向时要把前向再算一遍,实际 FLOPs 约是 8ND;这部分属于显存与算力的交换,C9 讲。