#!/bin/bash echo "==============================================================================================================" echo "Please run the script as: " echo "bash run_distributed_ascend.sh RANK_TABLE_FILE RANK_SIZE RANK_START DEVICE_START" echo "For example: bash run_distributed_ascend.sh /path/rank_table.json 8 0 0" echo "It is better to use the absolute path." echo "==============================================================================================================" execute_path=$(pwd) echo "${execute_path}" export RANK_TABLE_FILE=$1 export RANK_SIZE=$2 RANK_START=$3 DEVICE_START=$4 for((i=0;i<RANK_SIZE;i++)); do export RANK_ID=$((i+RANK_START)) export DEVICE_ID=$((i+DEVICE_START)) rm -rf "${execute_path}"/device_$RANK_ID mkdir "${execute_path}"/device_$RANK_ID cd "${execute_path}"/device_$RANK_ID || exit "please input your shell script here" > train$RANK_ID.log 2>&1 & done
该脚本会在工程路径下创建device_{RANK_ID}目录,在该目录内去执行网络脚本,所以替换训练Python脚本执行命令时要注意训练Python脚本相对路径的变化。
bash run_distributed_ascend.sh RANK_TABLE_FILE RANK_SIZE RANK_START DEVICE_START
具体MindSpore分布式训练(Ascend)请参见分布式并行训练 (Ascend)。
在GPU硬件平台上,MindSpore采用OpenMPI的mpirun进行分布式训练,可通过以下命令运行多卡脚本。
mpirun -n {多卡脚本运行的GPU卡数量} {模型原来的训练shell脚本执行命令}
具体MindSpore分布式训练(GPU)请参见分布式并行训练 (GPU)。
在ModelArts执行训练任务前,需要修改Output Path输出目录下的路径映射配置文件x2ms_adapter/modelarts/path_mapping_config.py:
PATH_MAPPING_CONFIG = { 'input': { # Add path mapping here for downloading data before training # format: <local path>: <obs/s3 path> # For example: '/data/dataset/imagenet': 'obs://dataset/imagenet', }, 'output': { # Add path mapping here for uploading output after training # format: <local path>: <obs/s3 path> # For example: './checkpoints': 'obs://outputs/', } }
'input'中对应训练前需要下载的数据,映射格式为:本地运行时的数据路径:对应云端对象存储的路径。
'output'中对应训练完成后需要上传的数据,映射格式为:训练生成的数据文件路径:生成文件在对象存储上的对应路径。
for inputs, target in enumerate(train_loader): output = model(inputs) loss = loss_func(output, target) loss.backward()
修改如下加粗字体信息:
for inputs, target in DETECTOR.start(enumerate(train_loader)): output = DETECTOR.hook_func(model, 'model', 0, inputs) loss = DETECTOR.hook_func(loss_func, 'loss_func', 0, inputs, target) DETECTOR.hook_func(loss.backward, 'loss.backward', 0)
修改后在GPU上运行分析后的训练脚本,将在分析结果件所在的根目录下生成保存动态shape的分析报告,分析报告包括函数名称、调用栈、输入输出的shape范围等内容,命名为x2ms_dynamic_shape_analysis_report.csv。