MindX DL场景下任务被重调度后Pod状态不一致

问题描述

多节点集群环境,下发分布式训练任务,若此时资源刚好满足,并且开启任务重调度且重调度参数“fault-scheduling”设置为“grace”。此时,如果出现故障,触发重调度,则任务重调度后概率性出现一个Pod状态为Running和一个Pod状态为Pending的情况,即使后续故障恢复,状态为Pending的Pod依然Pending。

原因

  1. 该问题是开源代码中对任务数量的判断存在问题。

    Pod被终止时,若容器中的脚本没有返回非0的值时(即返回0值时),则Pod的状态会显示为Success(K8s机制)。此时该Pod正在释放资源,Volcano调度器则会将该Pod(未重启)算作是已经重启且状态为Success。这种情况下,刚好满足Volcano的gang调度插件的机制,先重启的Pod会进入创建阶段。后面,当正在终止的Pod结束并重新拉起时,则会由于资源不足进入Pending状态。

  2. 未使用断点续训的脚本。
  3. 集群资源不够。

解决方法