02 / Modern Pretraining进阶

算力预算:从 scaling 曲线到有效 GPU 小时

参数、token、数据复用与推理成本的联合决策

推导预算近似的适用边界,学习用实测吞吐、数据预算和恢复开销做训练决策。

READ WITH A QUESTION

读完这一章,你应该能够

  • 区分 compute-optimal 与 deployment-optimal
  • 计算 token 与容量约束
  • 设计可比较的 scaling pilot
前置理解 能阅读 Python/PyTorch · 理解交叉熵;梯度直觉可先补充
本章目录 · 0 个小节

最优模型取决于你优化什么

同样一笔 GPU 预算,可以训练更大的模型读更少 token,也可以训练较小模型读更多 token。若模型之后服务数十亿次或成为 RL rollout 的 policy,较小模型的长期推理节省也进入目标函数。课程分析:只最小化训练成本,与最小化训练加终身服务成本,是不同的问题。

Chinchilla 给出的价值是用实验拟合参数与 token 的损失关系,并在固定训练算力上比较配置,而不是要求所有模型遵守一个常数比值。论文实验 数据质量、模型架构、训练长度和硬件边界变化时,要重新验证拟合的外推能力。

公开成本数字需要边界

DeepSeek-V3 报告把正式训练费用与此前研究、数据/架构消融分开,明确其给出的训练成本不包含那些前期工作。报告的成本口径 因而不能把一个发布模型的“最终训练费用”直接当作复制整个研发项目的预算。读任何头部模型报告,先寻找类似的范围说明。

两个公式,四个不能省略的假设

一个常见简化写法是 L(N,T)=L∞+aN−α+bT−β,C≈6NT.L(N,T)=L_\infty+aN^{-\alpha}+bT^{-\beta},\quad C\approx 6NT. 在这个模型里用固定 CC 消去 TT,可以搜索参数规模 NN。但你实际上假设了:loss 可平滑拟合;数据分布近似不变;token 继续增加仍有足够新信息;参数计算主导开销。长上下文、重复数据、MoE 和高度通信受限配置都可能违反这些条件。

墙钟估算应该再用实测吞吐校正: twall≈Teffectiveqeffective+tcheckpoint+teval+trecovery.t_{\mathrm{wall}}\approx \frac{T_{\mathrm{effective}}}{q_{\mathrm{effective}}}+t_{\mathrm{checkpoint}}+t_{\mathrm{eval}}+t_{\mathrm{recovery}}. qq 是整个集群的有效训练 token/s,剔除 padding 和纯等待。若分母来自短稳态 profiler,而训练中会频繁编译、做重型评测或从对象存储阻塞读取,这个预算仍然乐观。

一张透明的预算样表

下面数字是课程假设,不是任何模型的公开训练配置:目标 10B 有效 token,实测集群 100,000 有效 token/s,纯训练约 27.8 小时。如果 checkpoint、评测、冷启动和故障余量合计占纯训练的 20%,预算约 33.3 小时。再乘 GPU 数和每 GPU 小时价格,才得到这次实验的直接费用。

预算栏单位需要的证据
unique data去重后 token冻结 manifest 与 tokenizer
training exposure实际读取 token数据加载器统计,不只是文件大小
useful loss tokens有效标签 tokenmask 与 loss 分母
training computeFLOPs / GPU 小时架构估算 + profiler
rollout computegenerated token / 环境时间解码长度、并发与环境延迟
reliability reserve小时checkpoint 开销与恢复实测

同样“10B token”可能指 unique、exposure 或 useful tokens;跨报告比较前先消除这个口径差异。

数据预算可以先于算力耗尽

假设某高质量池只有 100M 独有 token,你想让它占 10B 训练 token 的 30%,意味着平均约 30 次暴露。增大训练时长后,重复可能成为主要变量。OLMo-core 将 target_ratio 与 max_repetition_ratio 分开建模,说明不能从目标配比直接推断唯一内容覆盖。源码观察

课程建议:每个 pilot 保存实际池占比、重复次数分布和域级验证 loss。不要只报告模型参数量与训练 token。质量评分更高的池不一定值得无限重复,极端重复也可能让小规模 pilot 看上去比扩展后更有利。

MFU 能回答什么,不能回答什么

MFU 的一种常见口径是模型理论 FLOPs 除以 elapsed time,再除以硬件名义峰值。必须注明理论计算是否包含重计算、使用何种精度峰值、MoE 是否只计激活参数、GPU 数是否含 idle 或 rollout 节点。不同口径的 50% 不必可比较。

更高 MFU 可能来自更长序列或更大 batch,却不一定缩短达到目标能力的时间。你还需要 time-to-quality:从启动到达到固定评测标准花了多久;以及 cost-to-quality:为了获得这个结果用了多少计算和人工数据预算。数据质量改进可在 MFU 不变时显著改善后两项。

如何读官方预算而不误读配置

OLMo 3 7B 预训练第二段脚本 同时含 max_duration、hard_stop、恢复 checkpoint 和学习率计划。它们一起决定可运行行为。单看 max_duration=7T 无法说明这一次调用又额外训练了 7T,因为 trainer state 中已有累计进度。阶段切换时不加载 trainer state,则时间坐标又不同。预算推导必须沿恢复语义阅读。

最小实验与提交要求

CODE / 可复制
python3 -m labs.run --experiment mixture --seed 7
python3 -m labs.run --experiment moe --seed 7

第一个实验把 token 分配抽象成领域更新预算,第二个展示相同 token 数如何因为不均衡路由浪费容量。它们不测 GPU MFU,不应把 CPU 运行时间用于估算大模型吞吐。

工程练习:用三个小模型规模、三个 token 预算做 pilot 设计,不要求立刻训练九个大模型。先写出要固定的 tokenizer、mixture、评测格式、有效 batch 和总曝光次数;给每条拟合曲线保留验证点;再加入一个部署请求量情境,说明你会怎样改变模型规模选择。若外推跨越两个数量级,主动列出最可能失效的假设和需要补跑的中间点。把这份预算设计带入 现代预训练 的阶段评测决策。

MAKE IT RUN

把这一章放进实验里

调整变量,观察机制,再运行本地 Python 实验验证。

进入实验

本章证据与源码

引用代表相应来源支持的结论,不意味着公开了完整训练配方。

论文实验Training Compute-Optimal Large Language ModelsHoffmann et al. / DeepMind · arXiv:2203.1源码观察OLMo 3 7B:官方预训练第二阶段配置allenai · 0589a034f721源码观察OLMo-core:数据源比例与重复上限allenai · 0589a034f721论文实验DeepSeek-V3 Technical ReportDeepSeek-AI · arXiv:2412.1

留下你的工程判断

记录一个还没有解释清楚的现象,或下一次实验要控制的变量。笔记仅保存在当前浏览器。

自动保存在本机 · 可在“我的学习笔记”导出
理解机制,比记住结论更重要。