混合精度训练
Mixed-Precision Training进阶大部分计算用 16 位浮点数、关键部分保留 32 位,省显存又提速的训练方式。
深度学习默认用 32 位浮点数(FP32)存参数、做计算。混合精度训练把矩阵乘、卷积这类运算换成 16 位格式(FP16 或 BF16),而归约、归一化等对数值范围敏感的运算以及参数主副本仍保留 FP32。2017 年 NVIDIA 与百度的研究者系统提出这套做法,并用「损失缩放」防止 FP16 下很小的梯度下溢成零,显存占用接近减半;GPU 的张量核心对 16 位运算吞吐更高,训练也更快。BF16 的数值范围与 FP32 相同,通常不需要损失缩放,如今训练大模型和 VLA 多用 BF16。PyTorch 的 autocast 能自动完成大部分精度切换。
例子openpi 用 JAX 训练 π0 系列模型时默认采用混合精度:权重和梯度保存为 FP32,大部分激活和计算用 BF16;需要全 FP32 训练时把配置里的 dtype 改成 float32 即可。
- 也叫
- bf16 训练、半精度训练、自动混合精度(AMP)
- 相关
- 数值精度格式(FP32 / FP16 / BF16 / FP8 / INT8 / INT4)、GPU 显存、分布式训练(数据并行 / 模型并行)、梯度检查点(激活重计算)、量化感知训练、openpi
- 来源
- Micikevicius et al. 2017: Mixed Precision Training
NVIDIA Docs: Train With Mixed Precision
GitHub: Physical-Intelligence/openpi (Precision Settings)