
# 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错误日志信息   
   ![](https://support.huaweicloud.com/trouble-modelarts/figure/zh-cn_image_0000001399215474.png "点击放大") 
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开发环境调试训练代码，避免代码迁移过程中的错误。
- 直接使用线上notebook环境调试请参考[使用JupyterLab开发模型](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0012.html)。
- 配置本地IDE（Pycharm或者VSCode）连接云上环境调试请参考[使用本地IDE开发模型](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0019.html)。
 
