场景描述

OS: openEuler 22.03 SP3

项目操作系统使用openEuler 22.03 SP3,在进行跨节点 nccl-test 测试的时候发现 nvidia-peermem 无法加载使用RDMA。

注意: H200节点跨节点通信只有100+GB,因为没有开启GDR,所以默认走PCIE,链路瓶颈就在于PCIE

测试参数及带宽如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
mpirun \
--allow-run-as-root \
--prefix /usr/local/openmpi \
-H 1.1.1.1:8,1.1.1.2:8 \
-mca btl_tcp_if_exclude lo,docker0 \
-x LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/openmpi/lib/:/root/test_env/nccl/build/lib/ \
-x PATH \
-x NCCL_IB_DISABLE=0 \
-x NCCL_IB_HCA=mlx5_0,mlx5_1,mlx5_2,mlx5_3,mlx5_4,mlx5_7,mlx5_8,mlx5_9 \
-x NCCL_DEBUG=INFO \
-x NCCL_IB_QPS_PER_CONNECTION=8 \
-x NCCL_SOCKET_IFNAME=bond4.24 \
./build/all_reduce_perf -b 8M -e 8G -g 1 -f 2

测试结果截图1

问题解决

从GitHub拉取nvidia-peermem进行编译

1. 拉取nvidia-peermem源码

1
sudo git clone https://github.com/Mellanox/nv_peer_memory.git

2. 编译并安装nv_peer_mem.ko

1
2
3
4
cd nv_peer_memory && make
cp nv_peer_mem.ko /lib/modules/$(uname -r)/kernel/drivers/video
depmod -a
modprobe nv_peer_mem

3. 检查模块加载状态

1
2
# 可通过lsmod|grep nv_peer_mem检查
lsmod|grep nv_peer_mem

加载模块后的测试结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
mpirun \
--allow-run-as-root \
--prefix /usr/local/openmpi \
-H 1.1.1.1:8,1.1.1.2:8 \
-mca btl_tcp_if_exclude lo,docker0 \
-x LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/openmpi/lib/:/root/test_env/nccl/build/lib/ \
-x PATH \
-x NCCL_IB_DISABLE=0 \
-x NCCL_IB_HCA=mlx5_0,mlx5_1,mlx5_2,mlx5_3,mlx5_4,mlx5_7,mlx5_8,mlx5_9 \
-x NCCL_IB_QPS_PER_CONNECTION=8 \
-x NCCL_ALGO=Ring \
-x NCCL_DEBUG=INFO \
-x NCCL_SOCKET_IFNAME=enp25s0np0 \
-x NCCL_IB_TC=160 \
-x NCCL_NET_GDR_LEVEL=4 \
./build/all_reduce_perf -b 4G -e 32G -g 1 -n 20 -w 5

测试结果截图2

总结

通过编译和加载nvidia-peermem模块,成功启用了GDR功能,大幅提升了跨节点通信带宽性能。主要步骤包括:

  1. 从GitHub获取nvidia-peermem源码
  2. 编译并安装内核模块
  3. 加载模块并验证功能
  4. 重新运行性能测试验证改进效果

这个解决方案适用于openEuler 22.03 SP3系统环境下的NVIDIA GPU集群配置。