特性说明
应用场景
随着神经网络和数据集的规模越来越大,单台服务器已经难以完成大规模的训练任务。为了应对这一挑战,通常需要使用多台服务器(配备更多的AI芯片)组成高密度训练集群,进行长时间的分布式训练。但随着硬件数量的增加,设备出现故障的概率也会上升,训练中断也更加频繁。因此,如何提升集群的可用性,成为当前亟需解决的重要问题。
提升集群可用性需要降低每次训练后的故障恢复成本。当前故障恢复通常需要人工排查硬件故障或者软件异常,需要大量人工成本;并且隔离故障设备后再重新拉起训练任务,需要耗费较长时间,影响整体效率。
为了解决这些问题,断点续训提供以下关键功能,能够在训练过程中有效应对故障,减少恢复时间,从而显著提升集群的可用性和稳定性。
| 功能名称 | 说明 | 配置步骤 |
|---|---|---|
| 故障检测 | 断点续训具有故障检测功能,支持实时监测训练场景下的20+软件类故障及90+硬件类故障的故障检测。 详细功能及原理介绍请参见故障检测。 |
(可选)配置故障检测级别 |
| 故障处理 | 断点续训具有故障处理功能,出现故障后不需要人工介入就可自动隔离故障设备。 详细功能及原理介绍请参见故障处理。 |
配置故障处理 |
| 训练恢复 | 断点续训具有训练恢复功能,用户可自定义训练恢复的策略,以不同粒度恢复训练状态,降低训练拉起时间。 详细功能及原理介绍请参见训练恢复。 |
配置训练恢复 |
| 场景分类 | 主要业务 | 业务价值 |
|---|---|---|
| AI训练场景 | 支持对计算、网络和存储设备资源的监测,AI环境的健康检查和AI作业故障诊断。 |
|
Note
- 较小规模的模型任务训练用时较短(时长 < 1h),硬件出现故障的频率较低,不推荐用户使用断点续训特性。
- 本特性不适用于算力虚拟化场景。
整体架构
在K8s(Kubernetes)集群中训练任务出现故障时,断点续训特性使系统能够感知故障,将故障资源进行处理或隔离,并根据训练任务需要重新分配资源,通过周期性保存或临终保存的CKPT(Checkpoint)重新拉起训练任务,缩短损失时间。
断点续训架构原理如图1所示。
其中各个部分的能力如下:
- Ascend Device Plugin:故障发现组件,提供NPU资源管理、NPU芯片故障和NPU网络故障上报、执行芯片热复位等能力。
- NodeD:故障发现组件,提供节点健康状态、节点硬件(包括CPU、内存、芯片等部件)故障、灵衢网络故障和DPC共享存储故障上报能力。
- Volcano:故障处理组件,提供故障任务重调度的能力。
- Ascend Operator:为不同AI框架的分布式训练任务生成相应的环境变量;提供静态组网集合通信所需的RankTable信息。
- ClusterD:获取集群中所有Ascend Device Plugin和NodeD上报的数据,整理后发送给Volcano。
- TaskD:提供与ClusterD的通信功能,完成恢复训练;提供昇腾设备上训练及推理任务的训练状态监测和训练状态控制能力。
- MindIO TTP:在大模型训练过程中发生故障后,校验中间状态数据的完整性和一致性,生成一次临终CKPT数据,恢复训练时能够通过该CKPT数据恢复,减少故障造成的训练迭代损失。
- 训练模型代码:需要进行断点续训相关能力的适配操作。
断点续训特性基于故障触发,触发成功后经过故障检测、故障处理和训练恢复三个阶段后可恢复训练。
各步骤说明如下:
- 通过轮询的方式查询设备状态,Ascend Device Plugin从DCMI接口获取NPU状态以及NodeD上报的节点健康状态、节点硬件故障信息和灵衢网络故障信息,ClusterD整理所有的故障信息,确定最终故障状态后,上报给Volcano。
- 查询到节点或芯片故障后,对故障节点或芯片进行隔离,防止再次调度到该设备上。
- 停止训练进程,退出训练容器。
- 节点或芯片故障后,系统会将训练任务重调度到健康的设备上,重启训练容器;该训练任务被重调度选择资源时,优先选用未导致本次训练任务重调度的节点。
- 训练脚本重新拉起训练进程。
- 运维人员可以根据节点或芯片的故障类型判断是否可进行热复位。
- 进行故障热复位,使设备恢复健康状态。
- 恢复后的设备自动重新加入集群中。
- 不可恢复的设备通过运维监测系统上报告警。
- 对不可恢复的设备进行线下人工维修和换件。
Note
业务面故障触发的断点续训功能,将只执行上述步骤3~步骤5。
断点续训组件调用流程如图3所示。
各步骤说明如下:
- Ascend Device Plugin发现和上报故障及健康状态。
- NodeD更新节点硬件故障信息,以便Volcano可以准确判断节点故障类型。
- ClusterD根据Ascend Device Plugin提供的芯片信息,判断芯片是否健康。
- ClusterD获取NodeD上报的故障信息。
- ClusterD将收集来的芯片及节点信息汇总后,放入ConfigMap。
- Volcano获取整个集群的设备信息,若任务使用的设备上存在故障信息,Volcano会将任务调度到其他健康设备上。
- Volcano按照亲和性规则选择节点和芯片,并由Ascend Operator创建新的Pod后,再调度训练任务到符合要求的节点上。
- Ascend Device Plugin根据Pod上Volcano指定的芯片ID来分配芯片,并将芯片IP信息写入容器。
- 容器启动之前,Ascend Docker Runtime为训练容器自动挂载NPU相关设备,驱动so等文件和目录。
- Ascend Operator将训练任务需要的相关环境变量(如集合通信信息和训练配置信息等)写入容器中。并且获取训练任务容器上的芯片信息,自动生成分布式训练任务需要的集合通信信息。
- 使用断点续训功能需要安装的组件详见所需组件章节。
- 断点续训特性是基于MindCluster集群调度组件的高阶特性,使用断点续训特性前需要完成的准备工作详见准备K8s和共享存储章节。
性能说明
断点续训特性可以在训练发生故障后恢复训练,降低故障导致的训练损失。断点续训的故障整体恢复时间可以分为训练回滚时间和训练拉起时间,如图1所示。
训练回滚时间
训练出现故障后会丢失原有的训练数据,需要从保存的CKPT文件中恢复训练。在大模型训练中,由于每次保存CKPT会降低训练效率,因此通常1小时以上才会保存一次CKPT文件,每次故障后将会丢失上次保存CKPT时间点到当前故障时间点的训练数据。训练回滚时间即使用上次保存的CKPT文件训练到出现故障点的时间。设平均训练回滚时间为T0,CKPT保存周期为Gf,则故障平均训练回滚时间T0=Gf/2。
训练拉起时间
训练出现故障后,需要重新拉起训练任务,恢复训练容器及训练进程,完成资源重调度、集合通信初始化、CKPT加载和编译等流程后继续往后训练。训练故障后需要完整走完一段训练拉起时间后才能继续训练,训练拉起时间过长会导致资源浪费。设资源重调度时间为T1,集合通信时间为T2,CKPT加载时间为T3,编译时间为T4,因此训练拉起时间为T1+T2+T3+T4。
单次故障总训练损失时间T=T0+T1+T2+T3+T4。具体的时间参考请参见训练恢复耗时参考。
Note
其中每部分时间与参数规模和集群规模相关,网络与存储性能也会影响总训练损失时间。
以 PyTorch 框架下的 GPT-3 模型为例,该模型在 NFS 存储读写速度分别为写入 2.7GB/s、读取 4.8GB/s 的条件下,运行参数量为 3B 或 15B 的单机 8 卡任务。(故障处理模式为重调度,若使用优雅容错模式,可不参考该指标。)





