预训练 LLM:数据、算力、Scaling Laws 与成本
在一块笔记本 GPU 上训练 20 个模型,测量 scaling law,并用真实 FLOP 计数器校验 6ND compute 估算。
本页内容
第 9 章以一个可以训练的 transformer block 结束。把几个这样的 block 叠起来,将第 8 章的 next-token loss 指向输出,就没有什么需要再发明的了。剩下的一切都是采购。
这个转变比听起来更大。到目前为止,每一章问的都是它能学会吗?——这是一个笔记本电脑十分钟就能回答的是非题。本章问的是一个带着金钱的问题:**给定固定数量的算术运算,我能买到的最佳模型是什么?**答案是一个公式,而在 2018 年,这对任何人来说都并不显然。
下面是在一块笔记本 GPU 上通过测量回答这个问题。20 个模型,从 98,624 到 1,500 万参数不等,在 1.74 亿个 Wikipedia token 上从零开始训练——一个 2,048-token 的 BPE 词表,按第 7 章的方式训练,使用第 9 章的 transformer。每次运行都恰好获得三个 compute budget 之一,多一次操作也没有,因此更大的模型必然读到更少的文本。每个预算下达到的最佳 held-out loss 如下:
budget C (FLOPs) best loss reached by a model of
1.00e13 5.3531 98,624 params
3.16e13 4.8638 98,624 params
1.00e14 4.3383 295,808 params
fitted: L = (Cc / C)^0.0913 over one decade of compute十倍算术运算让 loss 降低 19%,而三个点在 log-log 图上落在一条直线上。**前九章中没有任何内容能预测这一点。**它背后没有定理——这是一个经验规律,在从这台笔记本到数据中心之间横跨十个数量级的范围内,以不同的指数成立;也正是这个单一观察,说服了一个行业把一个小国 GDP 级别的钱花在 GPU 上。
什么是 pretraining,以及它的新意在哪里
链接到此部分:什么是 pretraining,以及它的新意在哪里目标函数没有任何变化。模型仍然预测下一个 token,loss 仍然是第 4 章的 cross-entropy,应用在第 8 章的分解上;优化器仍然是第 6 章的 AdamW。Pretraining 不是一种新算法;它是同一个算法在大到必须做预算的语料库上运行。有两件事让这成为可能:标签是免费的,因为位置 的目标就是 处的 token,而它已经在文本里;以及第 6 章最后一节消除了反对意见,因为一个参数远多于经典规则允许范围的模型不会崩坏,反而会改进。得到的是一个基础模型——它会续写文本,而不是回答问题。
在花钱之前计算 compute:6ND
链接到此部分:在花钱之前计算 compute:6ND在给这一切做预算之前,必须先把它数清楚,而这个领域用一个公式来数:
其中 是参数数量, 是训练 token 数, 是总浮点运算次数。Kaplan 等人分两步推导它。1 Forward:每个参数每个 token 2 FLOPs,因为矩阵乘法中的每个参数对每个 token 使用一次,包含一次乘法和一次加法。Backward:forward 的两倍,因为第 5 章的 backward pass 在每一层计算两个 gradient——相对于该层输入的 gradient,让信号继续传播;以及相对于其权重的 gradient——每个都是与 forward 同尺寸的矩阵乘法,因此 。
这就是完整推导,而它值得被验证,而不是被相信。PyTorch 自带一个真实 FLOP 计数器 torch.utils.flop_counter.FlopCounterMode,它会拦截模型调度的每一次操作,并合计实际工作量。跨四个数量级运行它,最大的配置放在 meta 设备上,后者只分配 shape 而不分配内存:
from torch.utils.flop_counter import FlopCounterMode
counter = FlopCounterMode(display=False)
with counter:
loss = model(x, targets)[1]
loss.backward()
measured = counter.get_total_flops()
print(measured / (6 * n_params * n_tokens))| 配置 | 不含 embeddings 的 | 总 | 测得值,fwd+bwd | ÷ (总 ) | ÷ (无 emb.) | fwd+bwd ÷ fwd |
|---|---|---|---|---|---|---|
| 128,4 层, 256 | 788,736 | 7,254,400 | 4.60e10 | 1.031 | 9.485 | 3.000 |
| 512,8 层, 256 | 25,183,232 | 51,045,888 | 3.26e11 | 1.038 | 2.104 | 3.000 |
| 768,12 层, 1024 | 84,973,056 | 124,356,864 | 1.75e12 | 1.145 | 1.676 | 3.000 |
| 1600,48 层, 1024 | 1,474,870,400 | 1,556,920,000 | 2.10e13 | 1.100 | 1.161 | 3.000 |
| 4096,32 层, 2048 | 6,442,983,424 | 6,582,444,032 | 8.74e13 | 1.080 | 1.104 | 3.000 |
| 8192,80 层, 8192 | 64,427,147,264 | 65,544,929,280 | 3.75e15 | 1.163 | 1.183 | 3.000 |
Forward+backward 相对于 forward 的比值是 3.000,在每个规模上都完全一样:这不是一个碰巧很好的近似,而是上面的算术恒等式,由一个完全不知道推导过程的计数器以整数形式返回。
随后,测得的总量位于 之上 3% 到 17% 之间,前提是 计入 embedding 矩阵——而这个从句很重要,因为两篇奠基论文对 的计数方式不同。Kaplan 排除了“所有 vocabulary 和 positional embeddings”,因为这样“会产生显著更干净的 scaling laws”(§1.3);Chinchilla 的附录 F 则说“我们也将 embeddings 矩阵计入总参数量”。2 对于宽词表和窄 hidden dimension,两者相差九倍,第一行就展示了这一点。
剩余差距是 有意省略的部分:attention scores。Kaplan 的 Eq. (2.2) 将 forward 成本写作 ,并丢掉第二项,因为 ——这在 2020 年是安全的,如今就没那么安全了,也正是随着 增大比值上漂的原因——这也是为什么这里有两行共享 为 1,024,而当 从 768 增至 1,600 时,比值反而从 1.145 下降到 1.100。它就是第 9 章引入、并在第 16 章变成价格的 成本。
内存:实际必须装下什么
链接到此部分:内存:实际必须装下什么Compute 决定一次运行要多久;内存决定它能不能开始。用普通 fp32 AdamW 训练时,每个参数携带四个数字:权重、它的 gradient,以及 Adam 的运行均值 和方差 ——也就是第 6 章手工构造的两个平均值。四个数字,每个四字节,就是每个参数 16 字节,这还不包括任何 activation。在一块 8 GB 笔记本 GPU 上测量,在 step 中没有 graph 存活的时刻取 resident allocation:
| 模型 | vocabulary | batch | 预测值 | resident 实测值 | step 内峰值 | 差值 | |
|---|---|---|---|---|---|---|---|
| 512,8 层 | 50,257 | 8 | 51,045,888 | 779 MB | 801 MB | 2,500 MB | 1,699 MB |
| 512,8 层 | 4,096 | 8 | 27,411,456 | 418 MB | 426 MB | 1,043 MB | 617 MB |
| 256,6 层 | 4,096 | 8 | 5,839,360 | 89 MB | 89 MB | 382 MB | 293 MB |
| 256,6 层 | 4,096 | 32 | 5,839,360 | 89 MB | 89 MB | 1,259 MB | 1,170 MB |
| 256,6 层 | 4,096 | 128 | 5,839,360 | 89 MB | 89 MB | 4,771 MB | 4,681 MB |
预测与测量在 3% 以内吻合。令人意外的是最后一列:**activations 远大于模型本身。**同一个 580 万参数模型,持久状态只需要 89 MB;batch 为 128 时却需要 4,681 MB 的 activations——是模型的 52 倍——而其中很大一部分根本不是 transformer。它是 logits:每个 token 一个 vocabulary 大小的向量,每项四字节。最后一行是 512 MB,第一行是 393 MB。Vocabulary size 是第 7 章选择的,而它仍在决定显卡上能放下什么。
哪一项占主导取决于运行形状,这就是为什么 Micikevicius 等人说内存“由 activations 主导”3,而 ZeRO 说一个 15 亿参数模型仅模型状态就需要“至少 24 GB”。4 ZeRO 通过另一条路径得到同样的 16 字节——fp16 权重的 、fp16 gradients 的 、fp32 master weights 与 Adam 两个 moments 各自的 ——对于 700 亿参数来说就是 1.12 TB,相当于十四块 80 GB GPU,还没算任何 activation。
Parallelism,用一段话和一次委托讲完
链接到此部分:Parallelism,用一段话和一次委托讲完在前沿规模上,这些都无法装进一台设备,所以运行会同时按四种方式拆分。Data parallelism 在每块 GPU 上放一份模型副本并平均 gradients——这是默认方式,也是 ZeRO 通过拒绝保留优化器状态冗余副本来改进的方式。Tensor parallelism 将单个矩阵拆到多台设备上。Pipeline parallelism 给每台设备一组连续的层。Context parallelism 拆分序列本身,只有当 足够长、attention 项占主导时才必要。Llama 3 的表 4 同时列出了四者:tensor 8、context 最高 16、pipeline 16、data 最高 128,横跨 16,384 块 H100 GPU。5 本课程关于它就说到这里;分布式训练工程本身就是一个学期,而 Stanford 的 CS336 就是那个学期,讲座 5 到 8,还带代码。6 委托之后留下的是一个数字:model FLOPs utilisation——真实运行达成 GPU 峰值算术能力的比例——它把整洁的 转换成 wall-clock time,进而转换成钱。
Kaplan,以及这个行业下注的东西
链接到此部分:Kaplan,以及这个行业下注的东西2020 年 1 月,Kaplan 等人训练了一组 transformer 网格,发现 test loss 在三个资源维度上都遵循 power law,跨度超过六个数量级。1 他们的 §1.2 给出三条拟合定律:
并配有数据的 和最优分配 compute 的 。常数并不通用,论文也这么说:“、 和 的精确数值取决于 vocabulary size 和 tokenization,因此没有根本意义。”
指数很小:参数增加十倍,会让剩余 loss 乘上 。这听起来什么都不是,而这正是这里最重要的事实——**回报很糟糕,而且永不停下。**一个小指数的 power law 承诺,下一个数量级会有帮助,尽管帮助不如上一个大,而且会永远如此。购买 compute 不再是赌博,而成了有公开汇率的采购;这正是解锁资本的论证。
然后是处方,而这正是那篇论文以一种让行业花了大量钱的方式犯错的地方。Kaplan 的表 6 给出 和 :compute 增加十倍,意味着模型变大 5.4 倍,却只喂入 1.9 倍的文本。摘要说得很明确——“最优 compute-efficient 训练涉及在相对适度的数据量上训练非常大的模型,并在显著早于收敛时停止。”这个领域确实照做了:GPT-3 是 1,750 亿参数、3,000 亿 token,7 Gopher 是 2,800 亿参数、3,000 亿 token,Megatron-Turing NLG 是 5,300 亿参数、2,700 亿 token。2 全部都在每个参数半个 token 到两个 token 之间。
Chinchilla,以及上面的 sweep 实际测量了什么
链接到此部分:Chinchilla,以及上面的 sweep 实际测量了什么2022 年 3 月,Hoffmann 等人训练了 400 多个模型,规模从 7,000 万到 160 亿参数不等,并通过三条独立路径得出相反结论。2 他们的表 2 报告 中指数 为 0.50、0.49 和 0.46,而 Kaplan 是 0.73。直白地说:模型大小和训练数据应该等比例增长。
他们的第二种方法,就是本章开头那个 sweep 在百万分之一规模上的复现:固定预算,在恰好相同的预算下训练许多尺寸,然后将最终 loss 对模型大小作图。
| 参数 | |||
|---|---|---|---|
| 98,624 | 5.3531 (171) | 4.8638 (542) | — |
| 150,320 | 5.4636 (74) | — | — |
| 194,208 | 5.5041 (44) | 4.8730 (140) | 4.4040 (442) |
| 295,808 | 5.5550 (19) | 4.9029 (60) | 4.3383 (190) |
| 665,280 | 5.7849 (3.8) | 5.1254 (12) | 4.4192 (38) |
| 1,280,768 | 5.8174 (1.0) | 5.1751 (3.2) | 4.5003 (10) |
| 3,101,568 | — | 5.4686 (0.5) | 4.7768 (1.7) |
| 5,315,072 | — | 5.5894 (0.2) | 4.8514 (0.6) |
| 15,053,568 | — | — | 5.3534 (0.1) |
Held-out loss,单位为每 token 的 nats;括号中为每参数 token 数;每个预算下最佳模型加粗;破折号表示该点未运行,因为预算要求的文本超过语料库容量,或尺寸落在该处 sweep 范围之外。
沿一列往下读:loss 下降、触底,然后再次上升。一个模型对它的预算来说太大,和太小一样容易发生——在 处,选择 665,280 参数而不是 295,808 参数的惩罚是 0.08 nats;按上面拟合出的包络线,这相当于一个尺寸正确的模型用少 18% 的 compute 达到的 loss。选错形状会浪费五分之一预算。这就是 Chinchilla 的 Figure 3,只不过是在一块 GPU 上用一个下午完成,而不是用四百个模型。
现在横向读。在 处,最佳模型是 sweep 中最小的一个;在 处,它是 295,808 参数,两侧都有点夹住。最优点随着预算增长向右移动,这就是修正的全部内容。拟合论文的第三种方法——在每次运行上拟合曲面 ——并在 约束下最小化:
L(N, D) = 24.7 / N^0.195 + 46.8 / D^0.169 (E fits to ~0; see below)
implied N_opt ∝ C^0.464
compare Chinchilla 0.46-0.50 · Besiroglu 0.513 · Kaplan 0.730.46,来自一台笔记本,对照 Kaplan 的 0.73。三预算拟合能到三位一致是运气;能到第一位一致则不是。指数会迁移——常数不会,因为这些最优点的 token-to-parameter ratio 是 170 到 540,而不是 20。原因有三点,都很有启发。 被拟合到零,因为 loss 高于 4 nats 时,运行远未接近主导 Chinchilla 拟合的 entropy floor。Batch size 和 learning rate 是固定的,而不是按点调优,这会惩罚 step 最少的那些运行——也就是大模型:在 FLOPs 下,一个 128 万参数模型总共只有 159 个优化器 step,远低于 Kaplan 的 项所说任何模型都需要的几千步。Scaling law 是在某个 regime 内拟合出来的,而这里这个 regime 比 Chinchilla 低六个数量级。
因此论文摘要说:“当前的大语言模型显著 undertrained”。Chinchilla 就是证明——700 亿参数、1.4 万亿 token,和 Gopher 的 2,800 亿参数、3,000 亿 token 使用相同总 compute,却在 57 个 MMLU 任务中的 51 个上胜出,67.5% 对 60%。2 小四倍,文本多四倍半,同样的钱,更好的模型。
关于那个著名比例,有两个 caveat。“每个参数 20 个 token”并不是论文中的一句话,论文只说“模型大小每翻倍一次,训练 token 数也应翻倍一次”;20 是从表 3 和 Chinchilla 自身的 70 B 参数、1.4 T token 推断出来的。而它的精度比发表出来的更差:Besiroglu 等人从 Figure 4 的数字化结果重新拟合,发现原参数“对重建数据拟合很差”,区间“考虑到数据点数量显得不可信地窄”,并将诚实范围定为每参数“4 到 40”个 token。8
Chinchilla 方法中的一个细节兑现了第 1 章关于 learning-rate schedules 的承诺。**Cosine schedule 必须匹配 token budget。**一个将看到 1,000 万 token 的模型,必须在 1,000 万 token 时把 learning rate 衰减到零;如果给它一个为 1 亿 token 设计的 schedule,然后提前停止,你读到的是下降中途、rate 过高时的 loss。Chinchilla 为每个模型按四种 cycle length 训练,正是为了控制这一点;上面的 sweep 出于同样原因,从预算设置 schedule。
Scaling laws 没有承诺什么
链接到此部分:Scaling laws 没有承诺什么它们是这个领域最有用的经验结果,也经常被过度兜售。四个限制。
**它们预测 loss,不预测能力。**左侧是 held-out text 上的 cross-entropy。这些论文中没有任何内容授权你声称模型是否会写正确的 SQL、拒绝有害请求,或使用工具。这又是第 5 章的教训:对 loss 的预测不是对你付钱购买的行为的预测。
**它们是拟合出来的,不是推导出来的。**没有理论产生 。常数会随着 tokenizer 改变——这就是为什么跨两个 tokenizer 比较 perplexity 没有意义,正如第 8 章解释的那样——也会随着数据混合、架构和优化器改变。每条发表的 law 都是产生它的设置之 law,这也是为什么 Meta 在 Llama 3 之前重新拟合了自己的 law。5
它们假设每一步都有一个新 token,这悄悄假设了无限语料库。Muennighoff 等人测量了语料库用完时会发生什么:重复数据最多四个 epoch 几乎没有代价——一个 87 亿参数模型在 440 亿 unique token 上看四遍,最终 validation loss 只比同一模型在 1,780 亿 unique token 上“高 0.5%”——而超过大约十六个 epoch 后,额外 compute 就买不到东西了。9
**而且现在没人再按 compute-optimal 训练了。**Chinchilla 最小化的是训练成本;一个部署后的模型随后对每个生成 token 大约要支付 FLOPs,直到永远。LLaMA 1 说得很直白:“给定目标性能水平,首选模型不是训练最快的,而是 inference 最快的”。10 Sardana 等人通过改为最小化 将它形式化,并发现任何预期有十亿请求的人都应该训练“比 Chinchilla-optimal 更小、更久”的模型。11 Llama 3 的 §9.1 也同意:它的小模型训练“远超 compute optimal training 的点,实际上是在用训练 compute 换取 inference efficiency”。5 这个比例并没有过时;它回答的是一个如今不再被提问的问题。
Emergent abilities,以及它们是否真实的争论
链接到此部分:Emergent abilities,以及它们是否真实的争论Loss 平滑下降。Benchmark 分数有时不这样。Wei 等人收集了一些案例:某个任务在训练 compute 跨多个数量级时一直接近随机,然后突然跃升——三位数算术大约在 FLOPs 时出现在 GPT-3 中,MMLU 在 和 之间升至高于猜测——并给这个模式命名:“如果一种能力不存在于较小模型中,但存在于较大模型中,那么它就是 emergent”。12 如果这是真实属性,那么从廉价实验外推就是不安全的,因为你要购买的能力可能在任何你负担得起测试的规模上都不存在。
Schaeffer、Miranda 和 Koyejo 认为其中大部分是测量伪影,而机制是算术。13 Per-token loss 平滑下降,因此一个 token 正确的概率 会逐步改善。用 exact string match 对一个 -token 答案评分,你就是把这个概率提升到 次方——一个平滑曲线被提升到很高次方后,看起来就像悬崖。对同一批输出,换成计算 token 而不是要求全部正确的指标,“该模型家族的表现会随着规模增大而平滑、连续、可预测地改善”。
他们的审计数字值得记住——“BIG-Bench 的 39 个 preferred metrics 中,至多 5 个表现出 emergence”,且两个不连续指标解释了超过 92% 的声称案例——他们的谨慎也同样值得记住:“本文中的任何内容都不应被解读为声称大语言模型不可能展现 emergent abilities”。图表中的跳变首先是关于指标的证据,除非另有证明。第 29 章中这会变成你的问题,因为选择硬 cutoff 指标是一个你会在不经意间做出的决定。
数据从哪里来
链接到此部分:数据从哪里来语料库是 pretraining 运行中没有方程附着的部分,也是大多数关键决定所在。原材料是 web crawl:Common Crawl 的 2026 年 8 月归档包含“21.4 亿个网页,或 360 TiB 未压缩内容”,一个月的数据,免费下载。14 其中几乎没有什么能原样使用。T5 论文说 crawl“主要由乱码或样板文本组成,比如菜单、错误消息或重复文本”,而它引入的 C4 pipeline 是一串粗暴的启发式规则——只保留以终止标点结尾的行,丢弃少于三句话的页面,丢弃任何包含花括号或公共脏话列表中词语的页面——把每月二十 TB 文本变成约 750 GB。15
粗暴就是关键词。Dodge 等人审计这些过滤器移除了什么,发现脏话 blocklist 会删除42% 的 African-American English 文档和 32% 的 Hispanic-aligned English 文档,而 White-aligned English 只有 6.2%,留下的语料库 97.8% 都属于最后一类。16 一条自认为对方言没有意见的规则,实际上有意见。
然后是 deduplication,这不是整理内务:Lee 等人在 C4 中发现一个 61 词句子重复了 61,036 次,并表明 deduplicating 会让模型“输出记忆文本”的比例降低十倍,从生成 token 的 1.9% 降至 0.19%。17 不过更多并不总是更好——FineWeb 团队在 96 次 crawl 上做全局 deduplication,得到 4 万亿 token,却没有可测增益;随后按每次 crawl 分别 deduplicate,得到 20 万亿 token,并追平了当时最好的现有语料库。18
然后是 contamination。Llama 3 测量并发表了自己的 contamination:AGIEval 的 98%、BIG-Bench Hard 的 95% 和 HellaSwag 的 85% 按 8-grams 与训练集重叠;对于 MMLU,重叠高到“无法获得良好的性能增益估计”。5 GPT-3 的 §4 报告了一个过滤 bug,使 benchmark 留在数据中且无法回头:“出于成本考虑,重新训练模型不可行”。7
**Provenance 是未解决的部分。**The Pile 发布了一个名为 Books3 的 100.96 GiB 组件——占语料库 12%,并且根据论文自己的同意表,是来自一个私人种子 tracker 的书籍;19 2023 年 8 月,在一次版权投诉后它被下线。截至 2026 年 9 月,法律状态仍未确定,被引用为趋势的三项美国裁决彼此并不一致。Alsup 认定在合法获取的书籍上训练“极具转化性”,同时认为用盗版副本建成的 library 并非如此;Anthropic 以 $1.5 billion 就后半部分达成和解,覆盖 482,460 部作品,约每部 $3,000,并于 2026 年 7 月 20 日获批。20 Chhabria 批准了 Meta 的 summary judgment,同时写道他的裁决“并不代表 Meta 使用受版权保护材料训练其语言模型是合法的”,只表示“这些原告提出了错误论点”。21 Bibas 在判 Ross Intelligence 败诉时指出,“今天摆在我面前的只有 non-generative AI”。22 没有美国上诉法院就这个问题作出裁决。
**人类在做 loss 做不了的部分。**TIME 在 2023 年 1 月报道,通过 Sama 为 OpenAI 标注有毒文本的工人,每小时实际到手“约 $1.32 到 $2”,阅读描述儿童性虐待、酷刑和自残的段落,而 OpenAI 为这项工作向 Sama 支付每小时 $12.50;Sama 对工资范围和配额都提出异议。23 这是围绕 pretraining 的过滤,而不是 pretraining 本身——但它出现在同一张发票上,也正是有人坐在那里的地方。
电力是真实的,也经常被误引。最谨慎的公开数字来自 BLOOM:1,082,990 GPU-hours、433 MWh,以及本次运行 24.7 吨 CO₂ 当量;若计入制造和空闲节点则为 50.5 吨;24 Patterson 等人给出 GPT-3 为 1,287 MWh 和 552 吨。25 两点注意。BLOOM 的优势来自法国核电网每 kWh 57 g CO₂,而不是效率——它消耗的能量高于 OPT-175B。而该领域最常被引用的排放数字,Strubell 等人关于 neural architecture search 的 626,155 lb,后来被证明高估了 88 倍,因为它假设 search 以完整模型尺寸运行,而实际是在 proxy 上运行。26 LBNL 的框架才是可辩护的:美国数据中心在 2024 年使用 192 TWh,占全国电力 4.7%——这是附着于一个行业的数字,而不是附着于某一次运行的数字。27
贯穿其中的线索,就是 Bender 等人命名的 documentation debt:“让自己处于这样一种境地:数据集既没有文档,又大到无法事后补文档”。28 上述每个事实之所以存在,都是因为有人去看了。对大多数人使用的模型背后的语料库来说,没有人能看。
它实际花多少钱
链接到此部分:它实际花多少钱现在来看每个人都想要的算术,来自四个引用输入;这样当它们过时时,也能清楚知道该替换哪一个。
峰值吞吐
链接到此部分:峰值吞吐NVIDIA 的 H100 页面列出 BF16 tensor-core 吞吐为 1,979 teraFLOPS,脚注写着“with sparsity”。29 没有 pretraining 运行会使用 structured sparsity,因此 dense 数字是它的一半:989.5 TFLOP/s。
Utilisation
链接到此部分:UtilisationLlama 3 的表 4 报告 BF16 model FLOPs utilisation 为 38–43%。取 40%:每块 GPU 的有效算术能力为 395.8 TFLOP/s。5
Lambda 的 8×H100 SXM 节点按需价格,访问于 2026-09-06:$3.99 每 GPU-hour,也就是节点每小时 $31.92。30
Chinchilla 的比例 给出 ,因此得到 。
| 预算 | H100-hours | FLOPs | compute-optimal 参数 | tokens | 单个 8×H100 节点耗时 | 90 天内完成所需 GPU |
|---|---|---|---|---|---|---|
| $100 | 25 | 3.6e19 | 546 M | 10.9 B | 3.1 h | 1 |
| $1,000 | 251 | 3.6e20 | 1.73 B | 34.5 B | 31.3 h | 1 |
| $10,000 | 2,506 | 3.6e21 | 5.46 B | 109 B | 13 天 | 2 |
| $100,000 | 25,063 | 3.6e22 | 17.3 B | 345 B | 131 天 | 12 |
| $1,000,000 | 250,627 | 3.6e23 | 54.6 B | 1.09 T | 4 年 | 116 |
| $10,000,000 | 2,506,266 | 3.6e24 | 173 B | 3.45 T | 36 年 | 1,160 |
| $100,000,000 | 25,062,657 | 3.6e25 | 546 B | 10.9 T | 358 年 | 11,603 |
把最后两列一起读。花 $10,000,你可以在一个租来的节点上用两周得到一个 50 亿参数模型。花 $100,000,000,算术说是 5,460 亿参数——以及需要把一万二千块 H100 连在一起跑三个月,而这不是你用信用卡就能租到的东西。超过约 $100,000 之后,binding constraint 不再是钱,而是集群。
在相信这样的表之前,拿它去对照真实成本已发表的运行——llm.c 在一个 8×A100 节点上用“约 90 分钟”、花“约 $20”复现 GPT-2 124M,并在一个 8×H100 节点上用 24 小时、花 $672 复现 GPT-2 1.6B。31
$672, against what $672 actually bought (llm.c GPT-2 1.6B, one 8xH100 node, 24 h)
this table predicts: 168 H100-hours N = 1.41 B params D = 28.3 B tokens
what was actually run: 192 H100-hours N = 1.558 B params D = 33.6 B tokens
Llama 3 405B, against Meta's own published GPU-hours
from the paper's 3.8e25 FLOPs at 40 % MFU: 26.67 M H100-hours
published in Meta's Llama 3.1 model card: 30.84 M H100-hours ratio 0.86两者都在约 15% 以内,这大致就是这类估算应有的精度,也明显好于它通常被引用时的精度。
标题级对比,把两种定义都摆在桌上
链接到此部分:标题级对比,把两种定义都摆在桌上这个主题中最常被重复的数字是:一个 2019 年成本约 $43,000 的 GPT-2-class 模型,如今可以用几十美元复现。现代这半边有充分文档;历史那半边没有。
**今天。**Karpathy 的 nanochat README:“你可以训练自己的 GPT-2 capability LLM ... 只需 $48(约 2 小时的 8XH100 GPU 节点)... 在 spot instance 上,总成本可接近 ~$15。”32 这里的“GPT-2 capability”定义精确且公开——超过 GPT-2 的 CORE 分数 0.256525——在一个截至 2026 年 3 月 14 日最佳条目为 1.65 小时的 leaderboard 上。$48 假设每 GPU-hour $3,低于 Lambda 的标价 $3.99;按标价更接近 $64。
**2019 年。**没有一手来源:OpenAI 从未发布时长或成本。链条是这样的:The Register,2019 年 2 月,报道“256 个 Google TPU3 cores”,没有价格也没有时长;然后是 Synced,2019 年 6 月,指出该硬件在 Google Cloud 上每小时 $256,并明确表示“OpenAI 没有说明训练时长”。$43,008 是每小时 $256 乘以一个无人能溯源的 168 小时假设。
所以诚实的标题应该是:**一个匹配 GPT-2 已发布 benchmark 分数的模型,如今可以在租用硬件上用远低于 $100 训练出来;而 2019 年的成本从未公布,那个著名估算建立在一个关于时长的无来源猜测之上。**成本崩塌是真实的,现代这半边任何有信用卡的人都能复现;但那个比例是在一个不存在的数字上做算术。这也是公开训练成本的普遍状态。GPT-3 论文没有任何美元金额,只有表 D.1 中的 FLOPs;7 Llama 3 论文同样没有。5 你读到过的每个训练成本,都是从 FLOP 数、硬件假设和价格假设估算出来的——永远值得问一句:谁的假设?
一个基础模型知道什么,以及它从何时起不再知道
链接到此部分:一个基础模型知道什么,以及它从何时起不再知道产出的模型见过一个在固定时刻组装出的固定语料库,两个性质随之而来。
第一个是 knowledge cutoff。收集日期之后的事情,模型一无所知——不是“不确定”,而是完全不知道——它会流畅地编造,而不是说自己不知道,因为“说自己不知道”从来不是它被训练过的行为。Llama 3.1 的 model card 给出 2023 年 12 月;33 每个模型都有一个,它是训练数据的属性,不是部署的属性。绕过它是一个 retrieval 问题,也就是第 19 章。
第二个是基础模型续写,而不是回答。给它“What is the capital of France?”,一个合理的 continuation 是另一个问题,因为在语料库里,这个字符串最常出现在练习题列表中。
接下来去哪里
链接到此部分:接下来去哪里一个文本续写器不是 assistant。它不会遵循指令,因为语料库中没有任何东西告诉它,请求应该被服从而不是被续写。它没有两方对话的概念。它会乐意产出有害 prompt 的最可能 continuation,因为“可能”是它唯一被优化过的东西。
把它变成会回答的东西,需要第二阶段;这个阶段的成本不到第一阶段的百分之一,几乎完全由两件事组成:向它展示你想要的行为示例,然后比较它自己的成对输出。Instruction following、chat templates、refusals,以及——这常让人惊讶——调用工具的能力,全部都来自这个阶段。第 11 章就是这一阶段:supervised fine-tuning、RLHF、DPO 和 GRPO,以及“aligned”是什么意思、由谁决定的问题。
Sources and method
链接到此部分:Sources and method同本章一起阅读也很值得:Karpathy 的 build-nanogpt 及其配套视频,它们以本章无法达到的节奏端到端走完一次完整 GPT-2 复现;以及 Stanford CS324,Large Language Models,其关于数据和环境影响的课程比上文更深入地讲解了本课程只处理一次并委托出去的材料。
参考资料
链接到此部分:参考资料-
Kaplan, J., McCandlish, S., Henighan, T., Brown, T. B., Chess, B., Child, R., Gray, S., Radford, A., Wu, J. and Amodei, D. Scaling Laws for Neural Language Models. arXiv:2001.08361 (2020). 三条 power laws 是 §1.2 的 Eqs. (1.1)–(1.3),完整常数在 Appendix A 的 Table 5; 推导在 §2.1;compute-allocation 指数在 Table 6。注意有两条 compute laws,固定 batch size 下的 和最优 batch size 下的 ;论文说后者“should be used to make predictions”。 ↩ ↩2
-
Hoffmann, J., Borgeaud, S., Mensch, A., Buchatskaya, E., Cai, T., Rutherford, E. et al. Training Compute-Optimal Large Language Models. arXiv:2203.15556 (2022). 指数在 Table 2,projected budgets 在 Table 3,Gopher 对比在 §4,参数计数惯例在 Appendix F。Table 3 下方正文与 Table 3 本身在 175 B 和 280 B 行上不一致;应引用表格版本。 ↩ ↩2 ↩3 ↩4
-
Micikevicius, P., Narang, S., Alben, J., Diamos, G., Elsen, E., Garcia, D. et al. Mixed Precision Training. arXiv:1710.03740 (2017), ICLR 2018. FP32 master weights 在 §3.1,loss scaling 在 §3.2。 ↩ ↩2
-
Rajbhandari, S., Rajbhandari, S., Ruwase, O. and He, Y. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models. arXiv:1910.02054 (2019), SC20. 计账在 §3.1;activation 的 residual-state 数字在 §3.2。 ↩
-
Grattafiori, A. et al. (Llama Team, AI @ Meta). The Llama 3 Herd of Models. arXiv:2407.21783 (2024). Compute budget 和 token count 在 §1,重新拟合的 scaling law 在 §3.2.1,parallelism 配置和 MFU 在 Table 4,contamination analysis 在 §5.1.4,over-training 陈述在 §9.1。论文不包含美元数字,也没有 emissions table。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Stanford CS336, Language Modeling from Scratch. Lecture 2 覆盖资源计账,lectures 5–8 覆盖 GPUs、kernels 和 parallelism,lectures 9 和 11 覆盖 scaling,lectures 13–14 覆盖数据。它就是本章将工程部分委托出去的课程,而且是公开的。 ↩
-
Brown, T. B. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). Compute 在 Appendix D 的 Table D.1——其中有一列标题字面上就是“flops per param per token”,每一行 GPT-3 的值都是 6。Contamination analysis 在 §4。 ↩ ↩2 ↩3
-
Besiroglu, T., Erdil, E., Barnett, M. and You, J. Chinchilla Scaling: A replication attempt. arXiv:2404.10102 (2024). 通过数字化 Chinchilla 的 Figure 4 重建其数据,重新拟合,并报告修正后的指数和宽得多的区间。 ↩
-
Muennighoff, N., Rush, A. M., Barak, B., Le Scao, T., Piktus, A., Tazi, N., Pyysalo, S., Wolf, T. and Raffel, C. Scaling Data-Constrained Language Models. arXiv:2305.16264 (2023), NeurIPS 2023. 四 epoch 结果在 §6;十六 epoch half-life 是拟合出的 。 ↩
-
Touvron, H., Lavril, T., Izacard, G., Martinet, X., Lachaux, M.-A., Lacroix, T. et al. LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971 (2023). §1 陈述了反对 Chinchilla-optimal 训练的 inference-cost 论证。 ↩
-
Sardana, N., Portes, J., Doubov, S. and Frankle, J. Beyond Chinchilla-Optimal: Accounting for Inference in Language Model Scaling Laws. arXiv:2401.00448 (2023), ICML 2024. 他们的 §5 还包含反向权衡:在极端 token ratio 下训练的模型仍会改进,但“more slowly than scaling laws predict”。 ↩
-
Wei, J., Tay, Y., Bommasani, R., Raffel, C., Zoph, B., Borgeaud, S. et al. Emergent Abilities of Large Language Models. arXiv:2206.07682 (2022), TMLR. 定义在 §2,示例和 compute thresholds 在 §3–4 和 Table 1。 ↩
-
Schaeffer, R., Miranda, B. and Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023), NeurIPS 2023 outstanding paper. 指标论证在 §2,BIG-Bench meta-analysis 在 §4,构造的视觉示例在 §5。 ↩
-
Common Crawl, August 2026 Crawl Archive Now Available (CC-MAIN-2026-34), 发布于 2026 年 8 月 24 日,访问于 2026-09-06。其首页自称“over 300 billion pages spanning 15 years”,“totalling more than 10 petabytes”——这是整个归档的数字,不是这里计价的月度 crawl。 ↩
-
Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., Zhou, Y., Li, W. and Liu, P. J. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. arXiv:1910.10683 (2019), JMLR 21(140). C4 过滤器在 §2.2。论文给的是字节大小,不是 token;广泛归因于它的 1,560 亿 token 数字来自下面的 Dodge 等人。 ↩
-
Dodge, J., Sap, M., Marasović, A., Agnew, W., Ilharco, G., Groeneveld, D., Mitchell, M. and Gardner, M. Documenting Large Webtext Corpora: A Case Study on the Colossal Clean Crawled Corpus. arXiv:2104.08758 (2021), EMNLP 2021. 方言移除率在 §5.3;C4 中的 benchmark contamination 在 §4.2。 ↩
-
Lee, K., Ippolito, D., Nystrom, A., Zhang, C., Eck, D., Callison-Burch, C. and Carlini, N. Deduplicating Training Data Makes Language Models Better. arXiv:2107.06499 (2021), ACL 2022. 61,036 次重复见 footnote 1;memorisation 数字在 §6.2 和 Table 4,是在 50-token exact-match criterion 下生成 tokens 的百分比。 ↩
-
Penedo, G., Kydlíček, H., Ben Allal, L., Lozhkov, A., Mitchell, M., Raffel, C., Von Werra, L. and Wolf, T. The FineWeb Datasets: Decanting the Web for the Finest Text Data at Scale. arXiv:2406.17557 (2024), NeurIPS 2024 Datasets and Benchmarks. Deduplication 结果在 §3.4。发布的数据集此后已经超过论文中的 15 万亿 token。 ↩
-
Gao, L., Biderman, S., Black, S. et al. The Pile: An 800GB Dataset of Diverse Text for Language Modeling. arXiv:2101.00027 (2020). Books3 在 §2.3 和 Table 1;同意表是 Table 5。语料库是 825.18 GiB,所以连标题都是向下取整。 ↩
-
Bartz v. Anthropic, No. 4:24-cv-05417 (N.D. Cal.). Fair-use order 23 June 2025 (Dkt. 231); class certification 17 July 2025; final approval and judgment 20 July 2026 (Dkt. 680). 和解只释放过去 inputs,不包括 outputs,也不包括未来行为。 ↩
-
Kadrey v. Meta, No. 3:23-cv-03417-VC (N.D. Cal.), summary judgment 25 June 2025 (Dkt. 598). 注意,关于 torrenting 的 distribution claim 未被裁决,仍在继续。 ↩
-
Thomson Reuters v. ROSS Intelligence, No. 1:20-cv-00613-SB (D. Del.), revised opinion 11 February 2025 (Dkt. 770), Bibas J. On interlocutory appeal to the Third Circuit (No. 25-2153), argued 11 June 2026, 写作时尚未裁决。 ↩
-
Perrigo, B. Exclusive: OpenAI Used Kenyan Workers on Less Than $2 Per Hour to Make ChatGPT Less Toxic. TIME, 18 January 2023. $2 是达到所有目标的 senior reviewers 的上限;占多数的 junior labellers 实际到手 $1.32。Sama 在同一文章中引用的反驳给出 $1.46–$3.74 以及更低配额。 ↩
-
Luccioni, A. S., Viguier, S. and Ligozat, A.-L. Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model. arXiv:2211.02001 (2022), JMLR 24(253). Tables 1 和 3。 ↩
-
Patterson, D., Gonzalez, J., Le, Q., Liang, C., Munguia, L.-M., Rothchild, D., So, D., Texier, M. and Dean, J. Carbon Emissions and Large Neural Network Training. arXiv:2104.10350 (2021). GPT-3 数字在 Table 4;NAS 估计修正在 §4.1。 ↩
-
Strubell, E., Ganesh, A. and McCallum, A. Energy and Policy Considerations for Deep Learning in NLP. arXiv:1906.02243 (2019), ACL 2019. 这篇论文值得精读,正是因为它最常被引用的数字后来发生了什么:论文很谨慎,说明了自己的外推,但在所有人重复的那一行上仍错了两个数量级。 ↩
-
Smith, S. J., Hubbard, A., Newkirk, A., Ganeshalingam, M., Holecek, B., Sartor, D., Mills, M. and Shehabi, A. United States Data Center Energy Usage Report: 2025 Update. LBNL-2001758 (18 June 2026). 这将广泛引用的 2024 报告历史序列向下修正;如果你还在引用 2023 年 176 TWh 的数字,你引用的是已被取代的版本。 ↩
-
Bender, E. M., Gebru, T., McMillan-Major, A. and Shmitchell, S. On the Dangers of Stochastic Parrots: Can Language Models Be Too Big? FAccT '21, pp. 610–623. DOI 10.1145/3442188.3445922. “Documentation debt” 在 §4.4。注意,论文自己的 carbon figures 引自 Strubell 等人,因此继承了上面的修正——这更像是对其论点的说明,而不是反驳。 ↩
-
NVIDIA. NVIDIA H100 Tensor Core GPU product page,
nvidia.com/en-us/data-center/h100/(accessed 2026-09-06). 该页上除 FP64 外的每个 tensor-core 行都带有“with sparsity”脚注;本文使用的 dense BF16 数字是公开 1,979 TFLOPS 的一半。 ↩ -
Lambda. GPU Cloud pricing,
lambda.ai/pricing(accessed 2026-09-06). 按需、每 GPU 每小时、税前。本节价格会比本课程任何其他内容都更快过时;围绕它们的算术不会。 ↩ -
Karpathy, A.
karpathy/llm.c, discussion #481, Reproducing GPT-2 (124M) in llm.c in 90 minutes for $20 (28 May 2024), and discussion #677, Let's reproduce GPT-2 (1.6B): one 8XH100 node, 24 hours, $672, in llm.c (11 July 2024). ↩ -
Karpathy, A.
karpathy/nanochat, README and “time to GPT-2” leaderboard (accessed 2026-09-06). $48 数字和“GPT-2 capability”的 CORE-score 定义都在 README 中;仓库自己的speedrun.sh说“approximately 1.5 hours”,因此应把两小时数字视为四舍五入。 ↩ -
Meta. Llama 3.1 model card,
models/llama3_1/MODEL_CARD.mdinmeta-llama/llama-models(accessed 2026-09-06). 405 B 模型的 30.84 M H100-hours、39.3 M 总量、11,390 tCO2eq location-based 数字,以及 2023 年 12 月 data cutoff 的来源。 ↩