故障决策说明

在故障检测完成后,针对每一种故障模式,断点续训通过故障处理或故障容错来恢复训练业务。断点续训特性根据恢复粒度由粗到细提供Job级重调度、Pod级重调度、进程级重调度、进程在线恢复多层故障处理系统。用户可根据实际情况选择使用对应的子特性。

图1 故障决策说明

上图中,容错速度代表故障发生到故障恢复的速度,成功率代表故障发生后故障完成恢复的成功率,易用性代表用户使用或集成的成本。

Job重调度、Pod重调度、进程级重调度可支持当前断点续训支持的全部故障模式,但依赖存在备份冗余计算服务器资源。如果存在不可修复的硬件故障且无备份冗余计算服务器时,可能导致恢复失败。进程级在线恢复当前仅支持NPU的片上内存出现UCE故障,其余故障模式无法使用。

断点续训多层故障处理系统不同层级根据恢复粒度由细到粗可以逐级回退,如图2所示,如果上一层恢复失败则可以回退到下一层处理方式。

图2 重调度失败说明

重调度模式

  1. 重调度模式:将任务调度到健康的芯片上,并隔离故障芯片。

    重调度模式默认为Job级别重调度,每次故障会停止所有的Pod。但在大规模任务中,停止所有Pod后再重调度的成本较高,存在故障恢复时间过长的问题。除此以外断点续训还提供Pod级别重调度功能,用户可根据任务规模配置,在故障时刻只停止故障相关的Pod后重调度少量Pod,从而达成故障的快速恢复。为了进一步缩短故障恢复时间、降低故障影响范围,断点续训还提供进程级别重调度及进程级在线恢复功能。

    表1 各种重调度级别的差异

    重调度的级别

    恢复训练耗时

    配置步骤

    说明

    Job级别重调度

    Job级重调度的恢复时间较长,随着任务规模增加恢复时间超线性劣化。

    Job级重调度操作步骤简单,使用MindCluster的用户仅打开配置开关即可使用。

    关键配置步骤请参见配置Job级别重调度

    为了进一步降低恢复中资源调度时间,用户可以选择在Job级重调度上开启Pod级重调度能力。

    Pod级别重调度

    Pod级重调度可以将资源调度时间缩短,且与任务规模无关。但是,Pod级重调度并不能优化训练初始化过程中的时间开销,整体恢复时间仍然会随着任务规模增加而超线性劣化。

    Pod级重调度用户需要额外在训练容器中集成训练进程管理能力,使用MindCluster的用户具备对应进程管理能力后即可使用。

    关键配置步骤请参见配置Pod级别重调度

    为了进一步降低训练初始化中的恢复时间,用户可以选择在Pod级重调度上开启进程级重调度能力。

    进程级别重调度(进程级恢复)

    进程级重调度可以减少训练初始化时间,将整体恢复时间缩短,且与任务规模无关或者弱相关。

    相比Pod级重调度,进程级重调度用户需要额外在训练框架中集成高可用训练能力,使用MindCluster的用户需要修改训练脚本,并开启对应配置开关后使用。

    关键配置步骤请参见配置进程级别重调度

    为了解决大规模场景下MTBF时间较短的问题,进一步降低整体恢复时间,用户可以选择在进程级重调度上开启进程级在线恢复能力。

    进程级在线恢复

    进程级在线恢复比起进程级重调度,恢复训练耗时更低。

    相比进程级重调度,进程级在线恢复用户需要配置对应的配置开关后使用。

    关键配置步骤请参见配置进程级在线恢复

    当前进程级在线恢复仅支持NPU的片上内存UCE故障模式,其余故障场景将回退其他处理方式处理。

    算子级在线恢复

    --

    关键配置步骤请参见配置算子级在线恢复

    --

  2. 重调度模式存在以下两种重调度策略。
    • 直接重调度:训练过程中发生集群调度组件可以探测到的硬件故障,系统将故障节点或芯片进行隔离,直接对任务进行重调度。
    • 无条件重试:训练过程中发生集群调度组件不能探测到的故障,导致任务容器异常退出,系统无条件对任务进行重调度。
    表2 重调度策略说明

    重调度策略

    说明

    支持的故障类型

    直接重调度

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

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

    无条件重试

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

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

    说明:

    如需使用无条件重试功能,需在YAML中配置fault-retry-times参数,详细参数说明请参见YAML参数说明

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