准备集群环境时,集群中的各个单机需要按照环境准备部署好环境,确保单机可以正常运行。
此外还需要进行按照如下操作进行集群配置。
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 #-s address:xx.xx.xx.xx是另外一台机器的device i的IP #-i:device序号
for i in {0..7}; do hccn_tool -i $i -net_health -g; done
回显如下所示:
net health status: Success
字段 |
说明 |
---|---|
net health status |
网络健康状态。 状态信息: 0:Success;1:Socket fail;2:Receive timeout;3:Unreachable;4:Time exceeded;5:Fault;6:Init;7:Thread error;8:Detect ip set;其它:Unknown。 |
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
如果用户在物理机场景训练,则需要在物理机上配置以上命令;若是在容器场景训练,则需要在容器中配置以上命令。
本节以适配样例(DDP场景)章节的代码为样例,为用户介绍将单卡训练脚本修改为多卡训练脚本的核心步骤。
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)
有4种脚本启动方式可拉起多卡训练:
附录拉起双机16卡训练中,以一个简单模型脚本为样例,展示了每种拉起方式脚本代码的修改方法以及各种拉起方式的适配方法,用户可以参考学习。