1、NCCL变量设置
export CUDA_DEVICE_MAX_CONNECTIONS=1
export NCCL_SOCKET_IFNAME=eno2
export NCCL_IB_DISABLE=0
#export NCCL_NET=IB
export NCCL_IB_HCA=mlx5_0,mlx5_1
export NCCL_IB_GID_INDEX=3
export NCCL_DEBUG=INFO
GPUS_PER_NODE=4
MASTER_ADDR=192.168.1.2
MASTER_PORT=6000
NNODES=2
NODE_RANK=0
WORLD_SIZE=$(($GPUS_PER_NODE*$NNODES))
2、路由设置
ps:通过nvlink或者pcie通信不需要
如果两个RDMA网卡不在同一网段,需要互相配置路由:
sudo ip route add 192.168.1.2/32 via 192.168.1.1 dev ens21np0
sudo ip route add 192.168.2.2/32 via 192.168.2.1 dev ens16np0
其中192.168.1.1和192.168.2.1是交换机的地址。
ens21np0的地址是192.168.2.1,ens16np0的地址是192.168.1.2
说明
RDMA网卡并不会存路由和MAC,(根据源码)MAC和出接口都是驱动下发的,
驱动在查找内核路由时,会根据源地址查找出接口,得到该网卡的接口索引
后面查找路由时(nl_socket_modify_cb和其回调get_route_cb)会先设置过滤条件,条件包含了出接口和目的地址(源码见下图)
可以用ip route get 192.168.2.2 oif ens16np0来模拟查看,可以看到是可以查到路由的:
192.168.2.2 dev ens16np0 src 192.168.1.2 uid 0
cache
但是如果根据这个路由信息,arp无法发送,非直连必须有gw才行,配置gw后查询:
192.168.2.2 via 192.168.1.1 dev ens16np0 src 192.168.1.2 uid 0
cache
ping -I ens16np0 192.168.2.2, ip neigh show确认下