计算方法

训练一个 transformer 大约需要每个参数、每个训练 token 6 次浮点运算:前向传播 2 次,反向传播 4 次。因此一个在 1400 亿 token 上训练的 7B 模型大约需要 6 × 7×10⁹ × 140×10⁹ ≈ 5.9×10²¹ FLOP。这个数由模型和数据决定;GPU 只决定你多快跑完它。

这里每款 GPU 的速度是其标称的稠密 BF16 张量算力乘以 MFU(模型 FLOP 利用率)— 真实训练能维持的峰值比例。调优良好的大型训练在 H100 级集群上约为 35–50%;小任务、消费级显卡和慢速网络上的多节点配置更低,通常为 20–30%。拖动 MFU 滑块,看看结果对它有多敏感 — 通常比选哪款 GPU 影响更大。

内存决定最少需要几张 GPU。使用 Adam 优化器的混合精度训练每个参数约占 16 字节(权重、梯度、FP32 主权重和两个优化器动量),另加激活值,FSDP 或 DeepSpeed ZeRO 等框架可将其分片到多张 GPU。在这个模型里,多于最少数量的 GPU 不会改变 GPU 小时数或成本 — 只缩短实际耗时 — 不过实践中每增加 GPU 扩展效率都会下降,尤其是没有 NVLink/InfiniBand 时。

每个参数 20 个 token 是 Chinchilla 的计算最优比例;许多现代小模型刻意训练得远超这个比例,因为更小、训练更久的模型推理更便宜。若是微调现有模型而不是从头训练,请使用微调成本计算器 — 便宜好几个数量级。