昇腾社区首页
中文
注册
开发者
下载

训练进程报错退出,Pod状态非Error无法触发业务面重调度

问题现象描述

执行训练,训练进程报错退出后,Pod状态为Completed,非Error。

原因分析

Pod的状态由exit退出码决定。当exit退出码为0时,Pod状态为Completed;当exit退出码非0时,Pod状态为Error。训练进程通过train_start.sh脚本拉起,train_start.sh中接收Python程序返回码不正确,导致exit退出码为0,Pod状态为Completed。

当退出码非0时,才可以触发业务面重调度。

解决措施

train_start.sh脚本内容存在差异,以下仅为示例,请根据实际情况修改。

  1. 检查train_start.sh脚本,核对接收Python程序返回码处的代码。

    发现调用Python程序后面有加管道(|),执行打印和保存日志的动作,$?接收的其实是tee命令的执行结果,tee命令执行没有报错,所以$?接收到的返回码为0,进程就以0退出码退出了,导致训练进程报错退出后,Pod状态为Completed,非Error,无法触发业务面重调度。

  2. 修改接收Python程序退出码处的代码,使用PIPESTATUS[0]获取管道(|)前命令的执行结果,即Python程序本身的退出码。修改如下: