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

弹性训练

当出现硬件故障,且K8s集群中无可用备份资源时,MindCluster会先按照数据并行域缩容部分节点继续训练,当集群中有可用空闲资源时,再触发扩容恢复原有规模训练。相比于进程级别重调度,解决了集群中无可用备份资源被重调度的问题。

使用约束

  • 仅支持PyTorch配合MindSpeed-LLM 2.3.0版本使用,版本配套请参见MindSpeed-LLM
  • 仅支持acjob类型训练任务。
  • 依赖于MindIO的优化器副本,需要存在全量优化器副本,故需要安装MindIO和TaskD配合使用。
  • 不能和优雅容错功能同时开启。
  • 当训练任务的annotation中hccl/rankIndex字段为0的Pod发生故障时,不支持触发弹性训练。
  • 不支持多模态模型。
  • 不支持开启watchdog功能。
  • 由于弹性训练会额外创建新的通信组,因此可能会导致片上内存占用增加。

    增加内存大小计算公式如下:增加内存最大值(MB) = HCCL_BUFFSIZE * 2 * 9,其中,HCCL_BUFFSIZE默认为200MB,HCCL_BUFFSIZE的说明请参见《CANN 环境变量参考》中的“HCCL_BUFFSIZE”章节

更多使用约束可参考MindSpeed-LLM弹性训练功能使用约束

支持的产品型号和AI框架

表1 弹性训练支持的产品和框架

产品类型

硬件形态

训练框架

Atlas A2 训练系列产品

Atlas 800T A2 训练服务器

PyTorch

Atlas A3 训练系列产品

Atlas 900 A3 SuperPoD 超节点

PyTorch

弹性训练原理

图1 原理图

以上示意图仅以缩容1个DP域为例,实际弹性训练过程中可能会一次缩容多个DP域。图中每个方格代表一个rank。

  1. 按照TP(Tensor Parallelism,张量并行)、PP(Pipeline Parallelism,流水线并行)、DP(Data Parallelism,数据并行)正常进行分布式训练。
  2. 训练到某一时刻,若某张卡发生故障,且集群中无更多空闲资源可被调度进行断点续训,则按照DP域缩容,即缩容1个DP域对应的Pod(可能包含多个Pod)后继续训练。
  3. 缩容训练到某一时刻,集群中有空闲资源时,缩容的Pod会被重新调度,扩容恢复到原有规模继续训练。
图2 流程图

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

  1. 设备出现硬件故障后,MindCluster在服务器上的检测组件上报故障信息到ClusterD中,软件故障由容器内MindIO Controller感知并上报到ClusterD
  2. ClusterD将故障服务器上的任务容器销毁。
  3. 若没有备份节点调度新容器,ClusterD通知Master节点上的MindIO Controller进行缩容训练。
  4. MindIO Controller通知每个训练进程中的MindIO Processor,MindIO Processor调用PTA停止训练进程,清理正常节点的资源。
  5. MindIO Controller通知正常的训练进程中的MindIO Processor执行通信组重建等缩容流程,进行缩容训练。
  6. 检测到缩容时删除的Pod重调度成功。
  7. ClusterD通过TaskD Manager通知MindIO Controller执行扩容。
  8. MindIO Controller通知每个训练进程中的MindIO Processor,MindIO Processor调用PTA停止训练进程,清理正常节点的资源。
  9. 各个进程进行集合通信建链。
  10. 正常服务器上的NPU通过参数面将CKPT传递到备用服务器上,完成参数状态恢复后继续训练。