更新时间:2024-08-21 GMT+08:00
OOM导致训练作业失败
问题现象
因为OOM导致的训练作业失败,会有如下几种现象。
- 错误码返回137,如下图所示。
Modelarts Service Log Trainina end with return code: 137 Modelarts Service Log]handle outputs of training job
- 日志中有报错,含有“killed”相关字段,例如:
RuntimeError: DataLoader worker (pid 38077) is killed by signal: Killed.
- 日志中有报错“RuntimeError: CUDA out of memory. ”,如下图所示:
图1 错误日志信息
- Tensorflow引擎日志中出现“Dst tensor is not initialized”。
原因分析
按照之前支撑的经验,出现该问题的可能原因如下:
- 绝大部分都是确实是显存不够用。
- 还有较少数原因是节点故障,跑到特定节点必现OOM,其他节点正常。
处理方法
- 如果是正常的OOM,就需要修改一些超参,释放一些不需要的tensor。
- 修改网络参数,比如batch_size、hide_layer、cell_nums等。
- 释放一些不需要的tensor,使用过的,如下:
del tmp_tensor torch.cuda.empty_cache()
- 必现的问题,使用本地Pycharm远程连接Notebook调试超参。
- 如果还存在问题,可能需要提工单进行定位,甚至需要隔离节点修复。
建议与总结
在创建训练作业前,推荐您先使用ModelArts开发环境调试训练代码,避免代码迁移过程中的错误。
- 直接使用线上notebook环境调试请参考使用JupyterLab开发模型。
- 配置本地IDE(Pycharm或者VSCode)联接云上环境调试请参考使用本地IDE开发模型。
父主题: 硬盘限制故障