弹性训练
当出现硬件故障,且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”章节。
支持的产品型号和AI框架
|
产品类型 |
硬件形态 |
训练框架 |
|---|---|---|
|
Atlas A2 训练系列产品 |
Atlas 800T A2 训练服务器 |
PyTorch |
|
Atlas A3 训练系列产品 |
Atlas 900 A3 SuperPoD 超节点 |
PyTorch |
弹性训练原理
图1 原理图
以上示意图仅以缩容1个DP域为例,实际弹性训练过程中可能会一次缩容多个DP域。图中每个方格代表一个rank。
- 按照TP(Tensor Parallelism,张量并行)、PP(Pipeline Parallelism,流水线并行)、DP(Data Parallelism,数据并行)正常进行分布式训练。
- 训练到某一时刻,若某张卡发生故障,且集群中无更多空闲资源可被调度进行断点续训,则按照DP域缩容,即缩容1个DP域对应的Pod(可能包含多个Pod)后继续训练。
- 缩容训练到某一时刻,集群中有空闲资源时,缩容的Pod会被重新调度,扩容恢复到原有规模继续训练。
图2 流程图
在以上流程图中,各个步骤的说明如下。
- 设备出现硬件故障后,MindCluster在服务器上的检测组件上报故障信息到ClusterD中,软件故障由容器内MindIO Controller感知并上报到ClusterD。
- ClusterD将故障服务器上的任务容器销毁。
- 若没有备份节点调度新容器,ClusterD通知Master节点上的MindIO Controller进行缩容训练。
- MindIO Controller通知每个训练进程中的MindIO Processor,MindIO Processor调用PTA停止训练进程,清理正常节点的资源。
- MindIO Controller通知正常的训练进程中的MindIO Processor执行通信组重建等缩容流程,进行缩容训练。
- 检测到缩容时删除的Pod重调度成功。
- ClusterD通过TaskD Manager通知MindIO Controller执行扩容。
- MindIO Controller通知每个训练进程中的MindIO Processor,MindIO Processor调用PTA停止训练进程,清理正常节点的资源。
- 各个进程进行集合通信建链。
- 正常服务器上的NPU通过参数面将CKPT传递到备用服务器上,完成参数状态恢复后继续训练。
父主题: 故障处理