Ascend O2 BF16 Optimizer
背景
大模型训练过程中,显存资源紧缺是常见问题。其中优化器和梯度占据大量显存,但难以做显著的优化。
解决思路
使用半精度的优化器参数和梯度,大幅降低显存占用。
使用方法和理论收益
分别使用两个参数,即可分别使能特性。
记模型参数量为N,记开启分布式并行优化器场景下数据并行度为DP,则参数的优化效果如下表所示:
| 特性名称 | 特性参数 | 优化效果(Byte) |
|---|---|---|
| 半精度优化器 | --o2-optimizer | 4N/DP |
| 半精度梯度 | --o2-gradient | 2N |
若不开启分布式并行优化器,则DP=1。
使用场景
- 应当在相同的训练场景中,以特性对标的目的开启。相比Megatron原生混精场景,理论上O2特性是一定会影响精度的。
- 目前O2特性仅支持参数类型为BF16的训练场景。
使用说明
- 半精度优化器、半精度梯度特性之间没有依赖关系,可以分别开启或组合开启。
- 半精度梯度不能与matmul add梯度累积特性一同使用,原因是算子不支持。 即o2-gradient参数必须与no-gradient-accumulation-fusion参数一起使用。
- O2特性对性能影响:理论上不会影响,实验上根据llama2-7B 4K预训练数据,性能影响 < 1%。