通过ranktable文件配置好参与分布式训练的资源信息后,可参考本节拉起训练进程,执行训练。
多Device上执行训练时,需要依次在每个参与训练的Device上拉起训练进程。
假设只有一个AI Server节点,节点上有8个Device,开发者可以构造启动脚本循环拉起每个Device上的训练进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 请依据实际在下列场景中选择一个进行训练依赖包安装路径的环境变量设置。具体如下(以HwHiAiUser安装用户为例): # 场景一:昇腾设备安装部署开发套件包Ascend-cann-toolkit(此时开发环境可进行训练任务)。 . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh # 场景二:昇腾设备安装部署软件包Ascend-cann-nnae。 # . /home/HwHiAiUser/Ascend/nnae/set_env.sh # TF Adapter python库,其中${TFPLUGIN_INSTALL_PATH}为TF Adapter软件包安装路径。 export PYTHONPATH=${TFPLUGIN_INSTALL_PATH}:$PYTHONPATH export RANK_SIZE=8 export RANK_TABLE_FILE=/home/test/rank_table_8p.json # ranktable资源配置文件路径,请根据实际情况替换 export JOB_ID=10087 # 用户自定义,指定任务ID,可以包含大小写字母、数字、中划线或下划线 for((RANK_ID=0;RANK_ID<$((RANK_SIZE));RANK_ID++)); do export RANK_ID=$RANK_ID export ASCEND_DEVICE_ID=$RANK_ID # 执行训练脚本,训练脚本路径、名称及其他输入参数请根据实际情况替换 nohup python3 /home/test/main.py > /home/test/train_$ASCEND_DEVICE_ID.log 2>&1 & done |
1 2 | export DUMP_GE_GRAPH = 2 # 1:全量dump;2:不含有权重等数据的基本版dump;3:只显示节点关系的精简版dump export DUMP_GRAPH_PATH = /home/dumpgraph # 通过该环境变量指定dump图文件存储路径 |
训练任务启动后,会在${DUMP_GRAPH_PATH}/${pid}_${deviceid}路径下生成若干dump图文件,包括后缀为“.pbtxt”和“.txt”的dump文件。由于dump的数据文件较多且文件都较大,若非问题定位需要,可以不生成dump图。
1 2 | export ASCEND_CACHE_PATH=/repo/task001/cache export ASCEND_WORK_PATH=/repo/task001/172.16.1.12_01_03 |
关于环境变量ASCEND_CACHE_PATH与ASCEND_WORK_PATH的使用约束以及落盘文件说明,可参见《环境变量参考》中的“安装配置相关 > 落盘文件配置”章节。
1 | bash tf_start_8p.sh
|
多Device上执行训练时,需要依次在每个参与训练的Device上拉起训练进程。
假设参与分布式训练的AI Server节点数量为2,每个AI Server节点有8个Device,开发者可以参见如下步骤构造启动脚本,循环拉起每个Device上的训练进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # 请依据实际在下列场景中选择一个进行训练依赖包安装路径的环境变量设置。具体如下(以HwHiAiUser安装用户为例): # 场景一:昇腾设备安装部署开发套件包Ascend-cann-toolkit(此时开发环境可进行训练任务)。 . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh # 场景二:昇腾设备安装部署软件包Ascend-cann-nnae。 . /home/HwHiAiUser/Ascend/nnae/set_env.sh # TF Adapter python库,其中${TFPLUGIN_INSTALL_PATH}为TF Adapter软件包安装路径。 export PYTHONPATH=${TFPLUGIN_INSTALL_PATH}:$PYTHONPATH # 获取输入参数 for para in $* do if [[ $para == --server_index* ]];then server_index=`echo ${para#*=}` elif [[ $para == --devices_num* ]];then devices_num=`echo ${para#*=}` elif [[ $para == --servers_num* ]];then servers_num=`echo ${para#*=}` fi done rank_size=${devices_num} linux_num=$servers_num export RANK_SIZE=`awk 'BEGIN{printf "%.0f\n",'${devices_num}'*'${linux_num}'}'` export RANK_TABLE_FILE=/home/test/rank_table.json # ranktable资源配置文件路径,请根据实际情况替换 export JOB_ID=10087 # 用户自定义,指定任务ID,可以包含大小写字母、数字、中划线或下划线 for((RANK_ID=$((rank_size*server_index));RANK_ID<$((((server_index+1))*rank_size));RANK_ID++)); do #设置环境变量 export RANK_ID=$RANK_ID export ASCEND_DEVICE_ID=`expr ${RANK_ID} - $((rank_size*server_index))` # 执行训练脚本,训练脚本路径、名称及其他输入参数请根据实际情况替换 nohup python3 /home/test/main.py > /home/test/train_$ASCEND_DEVICE_ID.log 2>&1 & done |
1 2 | export DUMP_GE_GRAPH = 2 # 1:全量dump;2:不含有权重等数据的基本版dump;3:只显示节点关系的精简版dump export DUMP_GRAPH_PATH = /home/dumpgraph # 通过该环境变量指定dump图文件存储路径 |
训练任务启动后,会在${DUMP_GRAPH_PATH}/${pid}_${deviceid}路径下生成若干dump图文件,包括后缀为“.pbtxt”和“.txt”的dump文件。由于dump的数据文件较多且文件都较大,若非问题定位需要,可以不生成dump图。
1 2 | export ASCEND_CACHE_PATH=/repo/task001/cache export ASCEND_WORK_PATH=/repo/task001/172.16.1.12_01_03 |
关于环境变量ASCEND_CACHE_PATH与ASCEND_WORK_PATH的使用约束以及落盘文件说明,可参见《环境变量参考》中的“安装配置相关 > 落盘文件配置”章节。
1 2 3 4 | # 拉起节点0上的训练进程 bash tf_start_16p.sh --server_index=0 --devices_num=8 --servers_num=2 # 拉起节点1上的训练进程 bash tf_start_16p.sh --server_index=1 --devices_num=8 --servers_num=2 |