流程介绍

端到端流程

断点续训特性基于故障触发,触发成功后经过故障发现、故障处理和训练重启三个阶段后可恢复训练。断点续训端到端的流程如图1所示;断点续训全流程时间线请参见时间参考
图1 端到端流程
各步骤说明如下:
  1. 通过轮询的方式查询设备状态,根据Ascend Device Plugin从DCMI接口获取的NPU状态和NodeD上报的节点健康状态以及节点硬件故障信息后,ClusterD整理所有的故障信息,确定最终故障状态后,上报给Volcano
  2. 查询到节点或芯片故障后,对节点或芯片进行隔离,防止再次调度到该设备上。
  3. 停止训练进程,退出训练容器。
  4. 节点或芯片故障后,系统会将训练任务重调度到健康的设备上,重启训练容器;该训练任务被重调度选择资源时,优先选用未导致本次训练任务重调度的节点。
  5. 训练脚本重新拉起训练进程。
  6. 运维人员可以根据节点或芯片故障类型判断是否可热恢复。
  7. 可热恢复故障进行热恢复,使设备恢复健康状态。
  8. 恢复后的设备自动重新加入集群中。
  9. 不可恢复的设备通过运维监测系统上报告警。
  10. 对不可恢复的设备进行线下人工维修和换件。

业务面故障触发的断点续训功能,将只执行上述步骤3~步骤5。

性能评估

断点续训特性可以在训练故障后恢复训练,降低故障导致的训练损失,因此断点续训的核心性能评估数据信息为断点续训的故障整体恢复时间。断点续训的故障整体恢复时间可以分为训练回滚时间和训练拉起时间,如图2所示。

图2 故障恢复阶段

训练回滚时间

训练出现故障后会丢失原有的训练数据,需要从保存的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。具体的时间参考请参见时间参考

其中每部分时间与参数规模和集群规模相关,网络与存储性能也会影响总训练损失时间。

时间参考

PyTorch框架下的GPT-3模型,其在NFS存储下写入速度为2.7GB/s,读取速度为4.8GB/s的情况下,参数量大小为3B或15B的单机8卡任务为例,故障处理模式为重调度,若使用优雅容错模式,可不参考该数据信息。
  • 参数量大小为3B,如图3所示,该模型的ckpt落盘时间约为30秒,断点续训在设备发现阶段用时小于5秒,设备处理阶段用时小于30秒,训练重启阶段用时大约在70秒左右,训练重启阶段的ckpt加载功能用时约3秒。
  • 参数量大小为15B,如图4所示,该模型的ckpt落盘时间约为120秒,断点续训在设备发现阶段用时小于5秒,设备处理阶段用时小于30秒,训练重启阶段用时大约在210秒左右,训练重启阶段的ckpt加载功能用时约90秒。
图3 3B模型时间数据信息
图4 15B模型时间数据信息