标签:训练工程
-
混合精度训练:fp16 的动态损失缩放原理与实现
fp16 让矩阵乘快一倍、显存省一半,但梯度在 fp16 的表示范围里根本活不下去。动态损失缩放把 loss 乘上一个大数让梯度整体抬回 fp16 的安全区,翻倍增、减半减、溢出跳步。这篇推导缩放因子的数学依据,拆解 2000 步倍增规则背后的账本,并对比 bf16 为什么可以扔掉这套机制。
-
大 batch 的学习率缩放律:linear scaling 与 sqrt scaling 各自的适用区
batch size 从 256 扩到 8192,学习率该乘几倍?linear scaling 说乘 32,sqrt scaling 说乘 5.7,答案取决于优化器噪声主导还是曲率主导。这篇从 SGD 噪声尺度的推导出发,给出两条规则的适用边界、临界 batch size 的概念,以及超过临界点后继续加卡为什么不划算。
-
梯度累积与有效 batch size:显存换批量的等价性边界
显存装不下目标 batch size 时,梯度累积把 k 个 micro-batch 的梯度加起来再走一步优化器,数学上近似等价于大 batch 训练。这篇推导这个等价的条件,拆解归一化方式、梯度裁剪、BN 统计量三个最常踩的坑,并说明它和多卡数据并行的组合关系。
-
teacher forcing 的实现细节:标签位移的正确做法与常见错误
自回归训练最基础的操作是把序列错一位当标签,但 BOS/EOS 怎么放、mask 怎么对齐、logits 怎么 gather、打包时文档边界怎么隔离,每一步都有真实的踩坑点。这篇把标签位移的正确做法和六种常见错误一次讲清。
-
梯度检查点:用 33% 的额外计算换显存平方级的节省
反向传播需要前向的所有激活,显存随层数线性增长——这是长序列训练的第一堵墙。梯度检查点只存每个分段的边界激活,反向时重算段内前向,把激活显存从 O(L) 压到 O(sqrt L),代价约 33% 的额外 FLOPs。这篇推导最优分段数的公式,讲清选择性重计算(Megatron 的做法)为什么比全量重算更划算,以及 torch.utils.checkpoint 的实现细节。
-
bf16 与 fp16 的工程取舍:动态范围与精度的交换
fp16 和 bf16 同为 16 bit,却把有限的位分配给了不同的字段:fp16 把 10 位给尾数换精度,bf16 把 8 位给指数换动态范围。这篇从位布局推两者的数值边界,讲清为什么 bf16 可以扔掉 loss scaling、为什么累加仍要回 fp32,以及硬件条件如何决定选型。
-
Muon 优化器:动量的矩阵正交化与 Newton-Schulz 迭代
Muon 把 SGD 动量正交化成半正交矩阵再更新,让隐藏层权重的每步更新条件数接近 1。这篇推导它从谱范数信赖域问题出发的更新形式,拆解 Newton-Schulz 五次迭代为什么够用,以及 RMS 缩放系数怎么对齐 Adam 的更新幅度。