文章目录[隐藏]
好的,遵照您的要求,我将我们整个史诗级排查过程的所有关键操作细节,提炼并总结成一份结构清晰、可直接作为技术文档使用的操作手册。
双机双GPU高速互联(GPUDirect RDMA over InfiniBand)配置部署手册
版本: 1.0
日期: 2025-07-13
作者: [您的名字]
目标: 在两台配备NVIDIA GPU和InfiniBand高速网卡的Ubuntu服务器之间,启用并验证GPUDirect RDMA功能,实现低延迟、高带宽的GPU到GPU直接通信。
第零章:前置条件
硬件:
两台服务器,每台配备至少一块NVIDIA GPU。
每台服务器安装一块InfiniBand网卡,并通过IB线缆直连或通过IB交换机连接。
软件:
操作系统:Ubuntu Server (本手册基于24.04 LTS)。
已正确安装与GPU型号匹配的NVIDIA驱动和CUDA Toolkit。
已安装Mellanox OFED驱动栈(通常通过apt或NVIDIA DOCA SDK安装)。
第一章:基础环境验证
此章节用于确认系统底层是否已正确识别硬件。
验证GPU状态:
Generated bash
nvidia-smi
检查点: 确保所有GPU都已列出,并显示正确的驱动/CUDA版本。
验证IB网卡识别:
Generated bash
ibv_devices
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
检查点: 确保两台服务器都能列出IB设备(如mlx5_0)。
验证GPUDirect RDMA硬件通路:
Generated bash
nvidia-smi topo -m
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
检查点: 寻找GPU与IB网卡(如mlx5_0)交叉点的连接值。理想值为PIX或PXB,表示存在高效的PCIe直接通路。若为SYS,则需排查BIOS中的Above 4G Decoding和Re-Size BAR Support设置,以及nvidia_peermem内核模块加载情况。
第二章:InfiniBand网络核心服务配置
此章节是整个配置的核心,旨在激活并管理IB网络。所有操作在一台指定的管理节点(本文档以服务器A为例)上执行。
安装核心组件:
Generated bash
在两台服务器上都执行
sudo apt update
sudo apt install -y opensm infiniband-diags
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
配置子网管理器 (OpenSM):
2.1 创建主配置文件:
Generated bash
--- 仅在服务器A上执行 ---
echo "partition_config_file /etc/opensm/partitions.conf" | sudo tee /etc/opensm/opensm.conf
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
2.2 创建分区配置文件:
Generated bash
--- 仅在服务器A上执行 ---
echo "Default=0x7fff, ipoib, full: ALL;" | sudo tee /etc/opensm/partitions.conf
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
2.3 创建systemd服务文件:
Generated bash
--- 仅在服务器A上执行 ---
sudo nano /etc/systemd/system/opensm.service
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
将以下内容完整粘贴并保存:
Generated ini
[Unit]
Description=OpenSM InfiniBand Subnet Manager
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/opensm --config /etc/opensm/opensm.conf
[Install]
WantedBy=multi-user.target
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Ini
IGNORE_WHEN_COPYING_END
2.4 加载并启动服务:
Generated bash
--- 仅在服务器A上执行 ---
sudo systemctl daemon-reload
sudo systemctl enable opensm
sudo systemctl start opensm
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
2.5 验证服务状态:
Generated bash
--- 仅在服务器A上执行 ---
sudo systemctl status opensm
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
检查点: 状态应为绿色的active (running),且日志中无错误。
验证IB网络激活状态:
操作: 在两台服务器上都执行。
命令: ibstat mlx5_0
检查点:
State 必须为 Active。
Physical state 必须为 LinkUp。
必须出现PKey表,并显示 PKey: 0x7fff。
配置IP over InfiniBand (IPoIB):
目的: 为IB接口分配IP地址,用于MPI的初始握手和管理。
操作:
服务器A:
Generated bash
sudo ip addr add 10.0.2.2/24 dev ibp7s0
sudo ip link set dev ibp7s0 up
```bash
sudo ip addr add 10.0.2.3/24 dev ibp7s0
sudo ip link set dev ibp7s0 up
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
验证: 在服务器A上 ping 10.0.2.3,应能正常通信。
第三章:系统及应用环境准备
此章节用于优化系统环境,为高性能应用扫清障碍。
解除内存锁定限制:
操作: 在两台服务器上都执行。
1.1 检查当前限制: ulimit -l
1.2 若非unlimited,则配置: 编辑 /etc/security/limits.conf,在文件末尾添加:
Generated code
* soft memlock unlimited
* hard memlock unlimited
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
IGNORE_WHEN_COPYING_END
1.3 生效: 必须完全登出并重新SSH登录服务器。
配置双向免密SSH:
操作: 在两台服务器上都执行。
2.1 生成密钥: ssh-keygen -t rsa (全程按回车)。
2.2 分发公钥:
ssh-copy-id user@<对方IP>
ssh-copy-id user@localhost
校准主机名解析:
操作: 在两台服务器上,编辑 /etc/hosts 文件。
检查点:
确保没有 127.0.1.1 <本机主机名> 这样的行。
手动添加IB网络的IP与主机名对应关系:
Generated code
10.0.2.2 hostname-A
10.0.2.3 hostname-B
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
IGNORE_WHEN_COPYING_END
第四章:性能验证测试
此章节用于编译并运行nccl-tests,以量化验证GPUDirect RDMA的性能。
安装编译依赖:
Generated bash
# 在两台服务器上都执行
sudo apt install -y build-essential openmpi-bin libopenmpi-dev git
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
下载并编译nccl-tests:
Generated bash
# 在两台服务器上都执行
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make MPI=1 -j
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
执行最终的跨节点all_reduce测试:
操作: 从任意一台服务器发起。
命令:
Generated bash
mpirun -np 4 -H 10.0.2.2:2,10.0.2.3:2 \
--mca btl self,openib \
--mca pkey 0x7fff \
-x NCCL_DEBUG=INFO \
-x NCCL_SOCKET_IFNAME=ibp7s0 \
~/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Bash
IGNORE_WHEN_COPYING_END
结果分析:
命令应正常运行并输出大量NCCL INFO日志。
最终会打印一个性能表格。关注大消息(如1GB)时的busbw(总线带宽)列,其数值应接近IB网卡的理论带宽(如100Gbps或200Gbps)。
文档结束