进程级别重调度
进程级别重调度即每次故障只停止故障相关节点的进程,根据配置策略判断是否退出故障节点。
- recover策略: 将故障节点的容器迁移到健康节点;
- recover-in-place策略:仅重启故障进程,不迁移故障节点的容器。此策略需要在训练启动脚本中设置环境变量ENABLE_RESTART_FAULT_PROCESS="on"。当前只支持处理以下2类故障。
- 业务进程异常故障。
- RestartRequest和RestartBusiness级别的芯片故障。
不能恢复则回退至Job级或Pod级重调度模式。相比于Pod级别重调度,本功能仅重调度故障进程,减少了大量进程间不同步的等待耗时。同时利用了新的HCCL建链方案大大降低了建链耗时,且通过NPU卡间的参数面高速网络P2P传递CKPT信息,避免了CKPT保存和加载的耗时。
了解进程级别重调度的关键配置步骤,请参见配置进程级别重调度。

- 参数面传递CKPT信息依赖故障卡中的全量优化器副本,如果不存在全量优化器副本则回退为加载存储上的CKPT文件恢复参数。
- 优化器副本依赖额外的显存占用,如果用户的显存较为紧张,可选择本地加载模式,无论是否存在优化器副本都直接加载存储上的CKPT文件恢复参数。
使用约束
- 进程级重调度支持的版本配套关系如下。
- MindCluster 7.1.RC1版本及配套的解决方案版本。
- PyTorch版本为2.1.0。
- MindSpeed-LLM为1.0.0及以上版本。
- 当训练任务的annotation中hccl/rankIndex字段为0的Pod发生故障时,不触发Pod级别重调度和进程级别重调度,直接触发Job级别重调度。
- 不能和优雅容错功能同时开启。若同时开启,断点续训将通过Job级别重调度恢复训练。
- MindSpore场景下,为保证本功能的正常使用,请将MindSpore和MindIO安装在同一路径下。
- 进程级别重调度需在MindIO和ClusterD侧同时打开或关闭,不支持开启一侧开关的同时关闭另一侧开关。若用户配置错误,断点续训将通过Job级别重调度或Pod级别重调度恢复训练。
- 请勿使用ConfigMap挂载RankTable文件,否则可能会导致任务重调度失败。
- 只支持单容器迁移,不支持按照亲和性迁移。
- 不支持MC2开启场景。
- 不支持多模态模型。
- 不支持开启watchdog功能。
- Atlas A3 训练系列产品场景下,若发生NPU掉卡类、OS断连类的故障,可导致进程级别重调度失败。
- 当故障发生在HCCL建链阶段时,会导致进程级别重调度失败。如果除训练初始化的HCCL建链外,还存在其他训练阶段存在HCCL建链,可参考配置HCCL主动触发建链章节进行提前建链,防止故障出现在HCCL建链阶段。
支持的产品型号和AI框架
重调度原理
训练过程中如果出现了软硬件故障,将导致训练状态异常。进程级重调度首先销毁故障的训练容器,并通知其他训练容器中的训练进程暂停当前训练任务,然后隔离故障设备,再重新将训练容器调度启动。故障训练容器重新启动后,通知所有容器中的训练进程进行集合通信重建链。建链完成后,将CKPT通过参数面发送给新拉起的训练进程恢复参数,恢复后所有进程重新执行当前step恢复训练。
图1 进程级别重调度原理示意图


在以上原理图中,各个步骤的说明如下。
- 设备出现硬件故障后,MindCluster在服务器上的检测组件上报故障信息到集群大脑中。
- ClusterD将故障服务器上的任务容器销毁,重新调度到备用的服务器上。(如果配置的策略为进程级原地恢复,则跳过此步骤)
- ClusterD通知Master节点上的MindIO Controller进行容错。
- MindIO Controller通知每个训练进程中的MindIO Processor,MindIO Processor调用PTA完成计算,通信停止。MindIO Processor清理正常节点的资源,销毁通信域,清理后等待新进程加入。
- 备用服务器上的管理进程拉起训练进程后,创建新的MindIO Processor,MindIO Controller通知每个训练进程中的MindIO Processor恢复训练。
- 各个进程进行集合通信建链。
- 正常服务器上的NPU通过参数面将CKPT传递到备用服务器上,完成参数状态恢复后继续训练。
父主题: 故障处理