进程级别重调度

进程级别重调度即每次故障只停止故障相关节点的进程,然后将故障节点的容器迁移到健康节点,恢复训练任务。不能恢复则回退至Job级或Pod级重调度模式。

相比于进程级快速恢复,本功能仅重调度故障进程,减少了大量进程间不同步的等待耗时。同时利用了新的HCCL建链方案大大降低了建链耗时,且通过NPU卡间的参数面高速网络P2P传递CKPT信息,避免了CKPT保存和加载的耗时。

了解进程级别重调度的关键配置步骤,请参见配置进程级别重调度

  • 参数面传递CKPT信息依赖故障卡中的全量优化器副本,如果不存在全量优化器副本则回退为加载存储上的CKPT文件恢复参数。
  • 优化器副本依赖额外的显存占用,如果用户的显存较为紧张,可选择本地加载模式,无论是否存在优化器副本都直接加载存储上的CKPT文件恢复参数。

使用约束

支持的产品型号和AI框架

表1 重调度支持的产品和框架

产品类型

硬件形态

训练框架

Atlas 训练系列产品

  • Atlas 800 训练服务器(型号 9000)
  • Atlas 800 训练服务器(型号 9010)
    说明:

    Atlas 800 训练服务器的芯片工作模式为SMP模式,且每个Pod申请的NPU数量为1、2时,不支持使用重调度模式。查询和设置NPU芯片工作模式的详细介绍请参见《Atlas 800 训练服务器 iBMC用户指南(型号 9000)》中的“查询和设置NPU芯片工作模式(npuworkmode)章节。

  • MindSpore
  • TensorFlow
  • PyTorch

Atlas A2 训练系列产品

  • Atlas 800T A2 训练服务器
  • Atlas 200T A2 Box16 异构子框
  • Atlas 900 A2 PoD 集群基础单元
  • MindSpore
  • TensorFlow
  • PyTorch

Atlas A3 训练系列产品

  • Atlas 900 A3 SuperPoD 超节点
  • Atlas 800T A3 超节点服务器
  • MindSpore
  • TensorFlow
  • PyTorch

进程级别重调度原理

训练过程中如果出现了软硬件故障,将导致训练状态异常。进程级重调度首先销毁故障的训练容器,并通知其他训练容器中的训练进程暂停当前训练任务,然后隔离故障设备,再重新将训练容器调度启动。故障训练容器重新启动后,通知所有容器中的训练进程进行集合通信重建链。建链完成后,将CKPT通过参数面发送给新拉起的训练进程恢复参数,恢复后所有进程重新执行当前step恢复训练。

图1 进程级别重调度原理示意图

在以上原理图中,各个步骤的说明如下。

1. 设备出现硬件故障后,MindCluster在服务器上的检测组件上报故障信息到集群大脑中。

2. ClusterD将故障服务器上的任务容器销毁,重新调度到备用的服务器上。

3. ClusterD通知Master节点上的MindIO Controller进行容错。

4. MindIO Controller通知每个训练进程中的MindIO Processor,MindIO Processor调用PTA完成计算,通信停止。MindIO Processor清理正常节点的资源,销毁通信域,清理后等待新进程加入。

5. 备用服务器上的管理进程拉起训练进程后,创建新的MindIO Processor,MindIO Controller通知每个训练进程中的MindIO Processor恢复训练。

6. 各个进程进行集合通信建链。

7. 正常服务器上的NPU通过参数面将CKPT传递到备用服务器上,完成参数状态恢复后继续训练。