华为云AI开发平台ModelArts故障临终遗言_云淘科技
使用场景
随着模型规模和数据集的急剧增长,需要利用大规模的训练集训练大规模的神经网络。在大规模集群分布式训练时,会遇到集群中某个芯片、某台服务器故障,导致分布式训练任务失败。临终遗言是指中断的训练任务支持自动恢复,并可以在上一次训练中断的基础上继续训练,而不用从头开始。
约束限制
资源规格 |
Ascend |
训练框架 |
MindSpore |
特性原理
临终遗言处理流程如下:
用户在ModelArts控制台创建训练任务。
训练引擎创建训练容器,启动训练脚本。
训练脚本启动后,调用MindSpore框架,生成混合并行策略文件strategy.proto,该文件记录了混合并行场景下,算子在NPU卡上的分布情况。
训练出现故障后,ModelArts训练组件对当前业务进程发送SIGTERM信号。
训练脚本捕获到SIGTERM信号,调用elastic-agent模块,该模块会调用mindspore框架,生成临终ckpt。
ModelArts训练组件重新拉起训练容器,启动训练脚本。
训练脚本调用elastic-agent模块,该模块根据configmap中故障NPU信息和strategy.proto文件生成策略恢复文件。
训练脚本根据策略恢复文件,加载临终ckpt进行续训练。
在数据并行场景下,也是类似的流程,只是更为简单,无需生成并行策略文件和策略恢复文件,只要保存和加载临终ckpt文件即可。
特性使用操作
安装临终遗言二进制包
通过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:$PATHpip 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=2 # 当前使用诊断模式需要用户手动设置成INFO日志级别 echo "[ma-pre-start] End"
创建训练任务
约束: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]
父主题: 训练故障自动恢复
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家