更新时间:2024-10-30 GMT+08:00

OOM导致训练作业失败

问题现象

因为OOM导致的训练作业失败,会有如下几种现象。
  1. 错误码返回137,如下图所示。
    Modelarts Service Log Trainina end with return code: 137
    Modelarts Service Log]handle outputs of training job
  2. 日志中有报错,含有“killed”相关字段,例如:
    RuntimeError: DataLoader worker (pid 38077) is killed by signal: Killed.
  3. 日志中有报错“RuntimeError: CUDA out of memory. ”,如下图所示:
    图1 错误日志信息
  4. Tensorflow引擎日志中出现“Dst tensor is not initialized”。

原因分析

按照之前支撑的经验,出现该问题的可能原因如下:

  • 绝大部分都是确实是显存不够用。
  • 还有较少数原因是节点故障,跑到特定节点必现OOM,其他节点正常。

处理方法

  1. 如果是正常的OOM,就需要修改一些超参,释放一些不需要的tensor。
    1. 修改网络参数,比如batch_size、hide_layer、cell_nums等。
    2. 释放一些不需要的tensor,使用过的,如下:
      del tmp_tensor 
      torch.cuda.empty_cache()
  2. 必现的问题,使用本地Pycharm远程连接Notebook调试超参。
  3. 如果还存在问题,可能需要提工单进行定位,甚至需要隔离节点修复。

建议与总结

在创建训练作业前,推荐您先使用ModelArts开发环境调试训练代码,避免代码迁移过程中的错误。