多卡训练分为单机多卡训练与多机多卡训练,二者均需要将单机训练脚本修改为多机训练脚本,配置流程如下。
本节以适配样例(DDP场景(one NPU per process))章节的代码为样例,为用户介绍将单卡训练脚本修改为多卡训练脚本的核心步骤。
local_rank = int(os.environ["LOCAL_RANK"])
device = torch.device('npu', local_rank)
torch.distributed.init_process_group(backend="hccl",rank=local_rank)
train_sampler = torch.utils.data.distributed.DistributedSampler(train_data)
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank], output_device=local_rank)
train_dataloader = DataLoader(dataset = train_data, batch_size=batch_size, sampler = train_sampler)
多卡分布式训练场景分为单机多卡训练和多机多卡训练。如果用户准备进行单机多卡训练,请跳过本章节。如果用户要进行多机多卡训练,则需要进行以下准备操作。以下操作除模型修改外,只需配置执行一次。
sysctl -w net.ipv4.ip_local_reserved_ports=60000-60015
vim /etc/sysctl.conf
sysctl -p
通过交换机或光口直连的方式完成计算设备组网搭建。
hccn_tool -i 0 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 1 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 2 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 3 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 4 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 5 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 6 -ip -s address 192.***.***.001 netmask 255.255.255.0 hccn_tool -i 7 -ip -s address 192.***.***.001 netmask 255.255.255.0
hccn_tool -i 0 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 1 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 2 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 3 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 4 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 5 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 6 -ip -s address 192.***.***.002 netmask 255.255.255.0 hccn_tool -i 7 -ip -s address 192.***.***.002 netmask 255.255.255.0
配置device IP需遵守以下规则:
hccn_tool -i 0 -netdetect -s address xx.xx.xx.xx hccn_tool -i 0 -net_health -g #-s address:xx.xx.xx.xx是另外一台机器的device i的IP #-i:device序号
hccn_tool -i 0 -ip -g
ipaddr:192.***.***.001 netmask:255.255.255.0
如果返回success则表示已经连通。
ufw disable
systemctl stop firewalld
执行以下命令,返回值不为空则正常。
for i in {0..7}; do hccn_tool -i $i -lldp -g; done
所有host日志统一保存在~/ascend/log路径下,用户可以在该路径下查看每个host的device日志。
大规模集群组网场景下,建议用户根据集群数量适当调整“somaxconn”与“tcp_max_syn_backlog”参数的值,例如:
sysctl -w net.core.somaxconn=65535 sysctl -w net.ipv4.tcp_max_syn_backlog=65535
如果用户在物理机场景训练,则需要在物理机上配置以上命令;若是在容器场景训练,则需要在容器中配置以上命令。
在单机和多机场景下,有5种方式可拉起分布式训练:
附录拉起多卡训练脚本示例中,以一个简单模型脚本为样例,展示了每种拉起方式脚本代码的修改方法以及各种拉起方式的适配方法,用户可以参考学习。