服务器双网卡NCCL通过交换机通信

发布于:2025-02-10 ⋅ 阅读:(55) ⋅ 点赞:(0)

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通信不需要

2.1 静态路由

如果两个RDMA网卡不在同一网段,需要互相配置路由:

sudo ip route add 192.168.1.2/32 via 192.168.2.1 dev ens21np0
sudo ip route add 192.168.2.2/32 via 192.168.1.1 dev ens16np0

其中192.168.1.1和192.168.2.1是交换机的地址。
ens21np0的地址是192.168.2.2,ens16np0的地址是192.168.1.2

2.2 策略路由

或者通过策略路由配置整个网段

sudo nano /etc/iproute2/rt_tables添加:
100 table1
200 table2

sudo ip route add 192.168.1.0/24 via 192.168.2.1 dev ens21np0 table table1
sudo ip route add 192.168.2.0/24 via 192.168.1.1 dev ens16np0 table table2
 sudo ip rule add oif ens21np0 lookup table1
 sudo ip rule add oif ens16np0 lookup table2

说明

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确认下


网站公告

今日签到

点亮在社区的每一天
去签到