华为云AI开发平台ModelArts基于训练作业启动PyTorch DDP on Ascend加速卡训练示例_云淘科技
本文介绍了使用训练作业的自定义镜像+自定义启动命令来启动PyTorch DDP on Ascend加速卡训练。
前提条件
需要有Ascend加速卡资源池。
创建训练作业
本案例创建训练作业时,需要配置如下参数。
参数名称 |
说明 |
---|---|
“创建方式” |
选择“自定义算法”。 |
“启动方式” |
选择“自定义”。 |
“镜像” |
选择用于训练的自定义镜像。 |
“代码目录” |
执行本次训练作业所需的代码目录。本文示例的代码目录为“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 $addr \ --master_port=$MASTER_PORT \ --use_env=True \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD
父主题: 分布式训练
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家