场景描述#
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
|

问题解决#
从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
|

通过编译和加载nvidia-peermem模块,成功启用了GDR功能,大幅提升了跨节点通信带宽性能。主要步骤包括:
- 从GitHub获取nvidia-peermem源码
- 编译并安装内核模块
- 加载模块并验证功能
- 重新运行性能测试验证改进效果
这个解决方案适用于openEuler 22.03 SP3系统环境下的NVIDIA GPU集群配置。