训练进程报错退出,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脚本内容存在差异,以下仅为示例,请根据实际情况修改。
- 检查train_start.sh脚本,核对接收Python程序返回码处的代码。

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

父主题: 使用时出现的故障