昇腾社区首页
中文
注册

恢复时间优化(MindSpore)

断点续训特性在使用MindSpore框架场景时,可以使用以下功能,缩短断点续训整体恢复时间,包括故障检测时间优化重调度时间优化训练回滚及加载CheckPoint时间优化编译缓存时间优化

故障检测时间优化

由于集群中出现的参数面网络故障不一定会影响训练任务,因此集群调度组件不会强制中断任务;当参数面网络故障影响训练任务时,会触发集合通信的网络超时等待机制,在等待时间(通常默认为30分钟)后,集群调度组件才能感知到该故障,从而触发断点续训。针对该问题,MindSpore提供watchdog故障检测功能,可用于检测训练任务是否受到影响,缩短故障检测时间,该功能的详细说明请参考表1

表1 watchdog故障检测功能说明

功能名称

watchdog故障检测。

功能特点

训练启动时,同时启动一个监测线程不断获取通信异常以及task执行异常。监测到故障发生后,快速抛出异常并终止训练任务进程,触发重调度。

使用说明

仅支持MindSpore 2.4版本以上

关键操作

MindSpore默认开启watchdog故障检测,无需手动配置

...
mindspore.set_context(hccl_watchdog=False) // 如果需要关闭可设置该参数关闭

重调度时间优化

断点续训故障处理的重调度模式默认使用Job级别重调度,需要在每次故障时销毁所有Pod,重新创建和调度全部Pod。销毁、创建和调度Pod的过程将浪费大量时间。针对该问题,集群调度组件提供Pod级别重调度功能,该功能的详细说明请参考表2

表2 Pod级别重调度功能说明

功能名称

Pod级别重调度。

功能特点

每次故障只停止故障相关的Pod,重新创建并重调度故障相关的Pod后,重启训练任务。

使用说明

仅支持6.0.RC2及以上版本的集群调度组件。

关键操作

  1. 使用Dockerfile构建容器镜像,新增启动命令。
    ...
    # MindCluster无损失断点续训适配脚本
    RUN pip install $MINDX_ELASTIC_PKG
    ...
  2. 下载管理进程脚本,放置和训练启动脚本train_start.sh同一路径。
    ...
    scripts/
    └── train_start.sh
           reset_process.py
    ...
  3. 在训练启动脚本中添加以下字段,启动reset_process管理训练进程。
    ...
    python ${ROOT_PATH}/../train.py --distribute=true --device_num=${device_each_server} --data_url=${data_path} --run_type=train --param_init_type=fp16 --mode=2.6B &> log &           train_pids[$i]=$!   // 训练启动命令中获取训练进程pid
    python -u "${ROOT_PATH}"/reset_process.py -p "${train_pids[@]}" & reset_pid=$!  // 启动管理进程reset_process
    wait ${train_pids[0]}
    exit_code=$?
    if [ ${exit_code} -eq 0 ]; then  
        kill -15 ${reset_pid}  
        echo "training finished."  
        exit ${exit_code}
    ...
  4. 在任务yaml中,新增以下字段,开启Pod级别重调度。
    ...
      labels:
        ...
        pod-rescheduling: "on"
    ...

训练回滚及加载CheckPoint时间优化

  • 异步保存CheckPoint:训练任务会定期保存CheckPoint文件,用于保存参数信息,故障恢复需要从上一次保存的CheckPoint回滚恢复训练。由于每次保存CheckPoint文件均会浪费一定的训练时间,为了保证训练效率,保存CheckPoint的时间间隔通常较大,而保存间隔越大,每次故障时训练回滚浪费的时间就会越长。针对该问题,集群调度组件支持通过MindIO ACP异步保存CheckPoint,详细说明请参考表3
    表3 异步保存CheckPoint功能说明

    功能名称

    MindIO ACP异步保存CheckPoint。

    功能特点

    从NPU中获取CheckPoint后,异步写入存储中,降低每次保存CheckPoint的训练损失和保存周期,从而降低训练回滚时间。

    使用说明

    仅支持6.0.RC2及以上版本的集群调度组件和MindIO组件。

    关键操作

    安装和使用MindIO组件,请参考《MindCluster CheckPoint保存与加载优化》

  • 高效恢复CheckPoint:回滚恢复训练时,通常需要从存储中加载保存的CheckPoint,由于CheckPoint数据量较大,直接从存储读取加载CheckPoint的耗时较长。针对该问题,集群调度组件支持通过MindIO ACP进行CheckPoint高效恢复,详细说明请参考表4
    表4 CheckPoint高效恢复功能说明

    功能名称

    MindIO CheckPoint高效恢复。

    功能特点

    将最新的CheckPoint存在内存中,故障恢复时可直接从内存中读取CheckPoint,降低CheckPoint读取时间。

    使用说明

    仅支持6.0.RC2及以上版本的集群调度组件和MindIO组件。

    关键操作

    安装和使用MindIO组件,请参考《MindCluster CheckPoint保存与加载优化》

编译缓存时间优化

断点续训过程中拉起训练时需要构建计算图,在大模型场景下,构建计算图并编译需要消耗大量时间。针对该问题,MindSpore支持在首次编译时将编译缓存文件进行存储,进行故障恢复时可以直接读取存储中的图编译缓存,降低图编译时间,详细说明请参考表5

表5 图编译缓存功能说明

功能名称

图编译缓存。

功能特点

图编译时加载存储上保存的图编译缓存文件,加载后可降低图编译时间。

使用说明

仅支持MindSpore2.3.0及以上版本。

关键操作

在训练的shell启动脚本中(例如train_start.sh),添加如下环境变量。
export MS_COMPILER_CACHE_ENABLE=1
export MS_COMPILER_CACHE_PATH=export ASCEND_CACHE_PATH=xxx   # 添加共享存储路径