文档首页> AI开发平台ModelArts> 模型训练> 分布式训练> 基于训练作业启动PyTorch DDP on Ascend加速卡训练示例
更新时间:2024-03-18 GMT+08:00
分享

基于训练作业启动PyTorch DDP on Ascend加速卡训练示例

本文介绍了使用训练作业的自定义镜像+自定义启动命令来启动PyTorch DDP on Ascend加速卡训练。

前提条件

需要有Ascend加速卡资源池。

创建训练作业

本案例创建训练作业时,需要配置如下参数。

表1 创建训练作业的配置说明

参数名称

说明

“创建方式”

选择“自定义算法”

“启动方式”

选择“自定义”

“镜像”

选择用于训练的自定义镜像。

“代码目录”

执行本次训练作业所需的代码目录。本文示例的代码目录为“obs://test-modelarts/ascend/code/”。

“启动命令”

镜像的Python启动命令。本文示例的启动命令为“bash ${MA_JOB_DIR}/code/run_torch_ddp_npu.sh”。其中,启动脚本的完整代码请参见代码示例

代码示例

训练作业的启动脚本示例如下。

启动脚本中设置plog生成后存放在“/home/ma-user/modelarts/log/modelarts-job-{id}/worker-{index}/”目录,而“/home/ma-user/modelarts/log/”目录下的“*.log”文件将会被自动上传至ModelArts训练作业的日志目录(OBS)。如果本地相应目录没有生成大小>0的日志文件,则对应的父级目录也不会上传。因此,PyTorch NPU的plog日志是按worker存储的,而不是按rank id存储的(这是区别于MindSpore的)。目前,PyTorch NPU并不依赖rank table file。

#!/bin/bash

# MA preset envs
MASTER_HOST="$VC_WORKER_HOSTS"
MASTER_ADDR="${VC_WORKER_HOSTS%%,*}"
NNODES="$MA_NUM_HOSTS"
NODE_RANK="$VC_TASK_INDEX"
# also indicates NPU per node
NGPUS_PER_NODE="$MA_NUM_GPUS"

# self-define, it can be changed to >=10000 port
MASTER_PORT="38888"

# replace ${MA_JOB_DIR}/code/torch_ddp.py to the actutal training script
PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py
PYTHON_ARGS=""

export HCCL_WHITELIST_DISABLE=1

# set npu plog env
ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'`
task_name="worker-${VC_TASK_INDEX}"
task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name}

mkdir -p ${task_plog_path}
export ASCEND_PROCESS_LOG_PATH=${task_plog_path}

echo "plog path: ${ASCEND_PROCESS_LOG_PATH}"

# set hccl timeout time in seconds
export HCCL_CONNECT_TIMEOUT=1800

# replace ${ANACONDA_DIR}/envs/${ENV_NAME}/bin/python to the actual python
CMD="${ANACONDA_DIR}/envs/${ENV_NAME}/bin/python -m torch.distributed.launch \
    --nnodes=$NNODES \
    --node_rank=$NODE_RANK \
    --nproc_per_node=$NGPUS_PER_NODE \
    --master_addr=$MASTER_ADDR \
    --master_port=$MASTER_PORT \
    --use_env \
    $PYTHON_SCRIPT \
    $PYTHON_ARGS
"
echo $CMD
$CMD
分享:

    相关文档

    相关产品