昇腾社区首页
中文
注册

原理和背景

故障发生后,根据上报的故障信息进行故障处理,分为以下两种模式。

  • 重调度模式:在该模式下存在以下两种重调度策略,如表1所示。
    • 直接重调度:训练过程中发生确定的故障,系统将故障节点或芯片进行隔离,直接对任务进行重调度。
    • 无条件重试:训练过程中发生未确定故障,导致任务容器异常退出,系统无条件对任务进行重调度。
    表1 重调度策略说明

    重调度策略

    说明

    支持的故障类型

    直接重调度

    系统将故障的节点或芯片进行隔离,然后直接对任务进行重调度。

    已知的节点故障或重调度处理级别芯片故障。

    无条件重试

    系统对配置了无条件重试次数的任务,进行指定次数内的重调度。

    成功重调度后,任务可重试次数将减1,当可重试次数为0时无法再次触发重调度。

    由于参数面网络故障或者训练相关软件故障等,导致任务异常退出,Pod的Status变为Failed状态的相关故障。

  • 优雅容错模式:当训练时芯片设备出现故障后,系统将尝试对故障芯片进行自动恢复,如果可以恢复则将任务原地拉起继续训练,不能恢复则回退至重调度模式。如果用户训练时没有备用资源或者期望设备自动恢复,推荐选择优雅容错模式

    若设备之间采用网线直连的方式进行组网,芯片故障发生后,优雅容错会重置设备导致网络故障。该故障会触发重调度模式,任务Pod将会被重调度。

重调度模式

MindCluster Volcano获取到MindCluster Ascend Device PluginMindCluster NodeD上报的故障后,判断是否需要进行重调度;若需要执行重调度,volcano-scheduler会执行删除Pod的指令,停止pod groups上所有的Pod,然后根据亲和性关系以及节点隔离信息,选择合适的节点进行调度,最后由volcano-controller或MindCluster Ascend Operator组件重新拉起pod groups上的所有Pod。

重调度模式只支持芯片故障、节点故障和业务面故障。参数面网络故障不会直接触发故障重调度,如果由参数面故障引发业务面故障,则会触发任务重调度。

但随着大模型训练的集群规模扩大,训练资源紧缺,在无空闲设备时,可能导致节点或芯片故障后,任务无法重调度并陷入Pending状态。且重调度模式在节点或芯片故障后,需要运维人员手动恢复设备,恢复不及时可能导致训练集群中出现大量散点故障,降低集群算力利用率。

因此,断点续训特性基于重调度模式增加了优雅容错模式,以优化NPU芯片的部分故障容错能力。NPU芯片故障中的部分故障可以通过退出芯片上的训练进程以及热复位芯片来恢复,优雅容错模式即针对这部分故障进行恢复处理,不需要重调度任务。

优雅容错模式

MindCluster Ascend Device Plugin负责故障的上报以及设备的恢复,管理进程根据MindCluster Ascend Device Plugin上报的信息进行训练进程的停止与重新拉起,完成故障恢复。集成优雅容错模式需要在业务容器中添加管理进程,管理进程需要具备故障感知、停止训练任务和重启训练任务等能力。

优雅容错模式只支持芯片故障。

优雅容错模式可以通过退出芯片上的训练进程以及热复位芯片,来恢复NPU芯片故障中的部分故障,不需要重调度任务。

重调度模式将故障区分为两类:无需处理要重调度。优雅容错模式将故障区分为以下四类,无需处理重新执行业务需要复位芯片需要重调度,对于每类故障的处理如图1所示。

图1 优雅容错故障处理流程

优雅容错模式直接将故障上报到业务容器内的管理进程中(通常通过挂载文件的方式),容器内的管理进程读取故障文件信息获取到故障信息,获取故障信息的流程如图2所示。

图2 获取故障信息