服务器双网卡NCCL通过交换机通信
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=INFOGPUS_PER_NODE=4MASTER_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来模拟查看