问题复现
在用工具进行分析定位前,需明确问题能复现,重复训练尽可能固定现象。
- 固定随机性。
- 固定随机种子。
- 数据batch加载顺序时关闭shuffle,一般可设shuffle=False。
- 关闭Dropout层
- 打开确定性计算。
1
torch.use_deterministic_algorithms(True)
- 打开确定性通信。
1
export HCCL_DETERMINISTIC=TRUE
- 若仍不能复现可使用精度采集工具采集md5数据进行排查。
前三项可统一通过seed_all工具进行自动固定(数据加载除外)。
1 2 | from msprobe.pytorch import seed_all seed_all(seed=1234, mode=True, rm_dropout=True) |
此外,对于一些特殊算子,由于硬件差异同样的随机种子在不同硬件上生成的随机数不同或可能暂不支持确定性计算,可通过先在CPU上生成后转回NPU或者小算子替换等方式进行手动补充。
对于千卡甚至万卡上出现的精度问题,我们需要将集群训练规模缩小进行复现定位。
常见的做法是保持tensor parallel,pipeline parallel等参数不变,将data parallel参数缩小或直接减少模型层数,裁剪时需伴随实验确保能复现,最终选择规模尽可能小且可复现的训练参数。
父主题: 问题定位方法