ModelArts启动分布式训练任务

举报
yangzilong 发表于 2022/02/11 14:54:43 2022/02/11
【摘要】 并行训练是一种重要的训练形式,本文介绍如何通过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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。