更新时间:2024-09-27 GMT+08:00
分享

设置训练故障优雅退出

使用场景

随着模型规模和数据集的急剧增长,需要利用大规模的训练集训练大规模的神经网络。在大规模集群分布式训练时,会遇到集群中某个芯片、某台服务器故障,导致分布式训练任务失败。优雅退出是指中断的训练任务支持自动恢复,并可以在上一次训练中断的基础上继续训练,而不用从头开始。

约束限制

表1 约束限制

资源规格

Ascend

训练框架

MindSpore

特性原理

优雅退出处理流程如下:

  1. 用户在ModelArts控制台创建训练任务。
  2. 训练引擎创建训练容器,启动训练脚本。
  3. 训练脚本启动后,调用MindSpore框架,生成混合并行策略文件strategy.proto,该文件记录了混合并行场景下,算子在NPU卡上的分布情况。
  4. 训练出现故障后,ModelArts训练组件对当前业务进程发送SIGTERM信号。
  5. 训练脚本捕获到SIGTERM信号,调用elastic-agent模块,该模块会调用mindspore框架,生成临终ckpt。
  6. ModelArts训练组件重新拉起训练容器,启动训练脚本。
  7. 训练脚本调用elastic-agent模块,该模块根据configmap中故障NPU信息和strategy.proto文件生成策略恢复文件。
  8. 训练脚本根据策略恢复文件,加载临终ckpt进行续训练。

在数据并行场景下,也是类似的流程,只是更为简单,无需生成并行策略文件和策略恢复文件,只要保存和加载临终ckpt文件即可。

特性使用操作

  1. 安装优雅退出二进制包

    通过ma_pre_start.sh安装whl包。

    echo "[ma-pre-start] Enter the input directory"
    cd/home/ma-user/modelarts/inputs/data_url_0/
    echo "[ma-pre-start] Start to install mindx-elastic 0.0.1版本"
    export PATH=/home/ma-user/anaconda/bin:$PATH
    pip install ./mindx_elastic-0.0.1-py3-none-any.whl
    echo "[ma-pre-start] Clean run package"
    sudo rm -rf ./script ./*.run ./run_package *.whl
    echo "[ma-pre-start] Set ENV"
    export GLOG_v=1    # 当前使用诊断模式需要用户手动设置成INFO日志级别
    echo "[ma-pre-start] End"
  2. 创建训练任务
    • 约束:MindSpore版本要求1.6.0及以上。
    • 修改样例代码,增加如下内容:
      # 载入依赖接口
      from mindx_elastic.terminating_message import ExceptionCheckpoint
      ...
      
      if args_opt.do_train:
      dataset = create_dataset()
      loss_cb = LossMonitor()
      cb = [loss_cb]
      if int(os.getenv('RANK_ID')) == 0:
      batch_num = dataset.get_dataset_size()
      # 开启优雅退出保存
      config_ck = CheckpointConfig(save_checkpoint_steps=batch_num,
      keep_checkpoint_max=35,
      async_save=True,
      append_info=[{"epoch_num": cur_epoch_num}],
      exception_save=True)
      
      ckpoint_cb = ModelCheckpoint(prefix="train_resnet_cifar10",
      directory=args_opt.train_url,
      config=config_ck)
      # 定义优雅退出ckpt保存callback
      ckpoint_exp = ExceptionCheckpoint(
      prefix="train_resnet_cifar10",
      directory=args_opt.train_url,
      config=config_ck)
      # 添加优雅退出ckpt保存callback
      cb += [ckpoint_cb, ckpoint_exp]

相关文档