华为云AI开发平台ModelArts故障临终遗言_云淘科技

使用场景

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

约束限制

表1 约束限制

资源规格

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)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家