ModelArts启动分布式训练任务
【摘要】 并行训练是一种重要的训练形式,本文介绍如何通过pytorch启动多节点并行训练任务。
在训练界面上,多机训练只需要增加节点个数即可。训练的启动脚本要进行简单改造,以便解析相关的env信息。
如需查看所有的环境变量信息,可以通过“env”命令来启动一个训练任务。相关环境变量会直接打印到日志页面上。
参考的shell启动脚本如下:
#!/bin/bash
if [[ $MA_NUM_HOSTS == 1 ]]; then
MASTER_ADDR=localhost
MASTER_PORT=6000
NNODES=1
NODE_RANK=0
else
MASTER_HOST="$VC_WORKER_HOSTS"
MASTER_ADDR="${VC_WORKER_HOSTS%%,*}"
MASTER_PORT="6060"
NNODES="$MA_NUM_HOSTS"
NODE_RANK="$VC_TASK_INDEX"
JOB_ID="1234"
fi
if [[ $NODE_RANK == 0 ]]; then
EXT_ARGS="--rdzv_conf=is_host=1"
else
EXT_ARGS=""
fi
CMD="python -m torch.distributed.run --start_method=spawn --nnodes=$NNODES --node_rank=$NODE_RANK $EXT_ARGS --nproc_per_node=8 --rdzv_id=$JOB_ID --rdzv_backend=c10d --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT /home/ma-user/modelarts/user-job-dir/code/test.py"
echo $CMD
$CMD
注意,python子进程一定要使用“spawn”模式,在“fork”模式下可能会遇到读数据性能问题,并最终导致训练性能低下。
若“--start_method=spawn”不能生效,需要在代码中指定启动方式:
mp.set_start_method('spawn')
另外,为了提升多机运行效率,建议利用好ModelArts提供的数据面网络通路(即,IB或者RoCE网络)。使用对应网络需要安装IB驱动,ubuntu 18.04的安装命令“apt-get install libibverbs-dev”。
详细的镜像构建流程参考教程:https://bbs.huaweicloud.com/blogs/380117
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)