多机 NCCL 通信性能测试 (2×8 RTX PRO 5000 + ConnectX-7 HDR IB)
| 节点 | GPU | IB | 互联 |
|---|---|---|---|
| server1 (10.10.3.25) | 8× RTX PRO 5000 Blackwell (48GB, CC 12.0) | 2× ConnectX-7 HDR 200G | 直连 server2 |
| server2 (10.10.3.26) | 8× RTX PRO 5000 Blackwell (48GB, CC 12.0) | 2× ConnectX-7 HDR 200G | 直连 server1 |
- 无 NVLink: 全 PCIe P2P (PIX/PXB)
- 软件: CUDA 13.0, NCCL 2.28.9, MLNX OFED 24.10, OpenMPI 4.1.7, 驱动 580.105.08
详细拓扑见 docs/topology.md
| 配置 | IB 端口 | busbw (8G峰值) | Avg busbw | #wrong | GDR |
|---|---|---|---|---|---|
| 单口 mlx5_0 | 1× HDR 200G | 30.60 GB/s | 26.78 GB/s | 0 | GDR 1 [RO] |
| 单口 mlx5_1 | 1× HDR 200G | 30.35 GB/s | 26.72 GB/s | 0 | GDR 1 [RO] |
| 双口 | 2× HDR 200G | 21.04 GB/s | 20.40 GB/s | 0 | GDR 1 [RO] |
| 配置 | IB 端口 | busbw (8G峰值) | Avg busbw | #wrong |
|---|---|---|---|---|
| 单口 mlx5_0 | 1× HDR 200G | 20.46 GB/s | 19.94 GB/s | 0 |
| 单口 mlx5_1 | 1× HDR 200G | 20.56 GB/s | 19.99 GB/s | 0 |
| 双口 | 2× HDR 200G | 20.88 GB/s | 20.14 GB/s | 0 |
| 配置 | IB 端口 | busbw (8G峰值) | Avg busbw | #wrong |
|---|---|---|---|---|
| 单口 mlx5_0 | 1× HDR 200G | 4.89 GB/s | 4.87 GB/s | 0 |
| 单口 mlx5_1 | 1× HDR 200G | 4.97 GB/s | 4.92 GB/s | 0 |
| 双口 | 2× HDR 200G | 4.69 GB/s | 4.67 GB/s | 0 |
| 配置 | 固件 | busbw (8G峰值) | Avg busbw | 说明 |
|---|---|---|---|---|
| mlx5_0 400G (升级前 28.43.3608) | 28.43.3608 | ~20.4 GB/s | ~20.2 | 比 mlx5_2 200G 慢 |
| mlx5_0 400G (升级后 28.49.1014) | 28.49.1014 | 待测 | 待测 | 升级后需重测 |
⚠️ 400G 口实测反而比 200G 口慢 (20 vs 30 GB/s), 原因:
- 400G 口 (PCI 16:00.0, board 838) 和 200G 口 (PCI 37:00.x, board 834) 虽然到 GPU 都是 NODE
- 但 board 838 是不同型号 (MCX75310AAS-NEA, OSFP), 可能 PCIe 适配/GPUDirect 路径不同
- 固件升级后需重测验证是否改善
每台 4 张 IB 卡:
- mlx5_0: ConnectX-7 (MCX75310AAS-NEA), 400G NDR, IB 模式, 接线 ✅
- mlx5_1: ConnectX-7 (MCX755106AS-HEA), 200G, IB 模式, 未接线 ❌
- mlx5_2: ConnectX-7 (MCX755106AS-HEA), 200G HDR, IB 模式, 接线 ✅
- mlx5_3: ConnectX-6 (MCX653105A-HDA), 200G HDR, IB 模式, 接线 ✅ (NUMA=1, 到GPU是SYS)
ConnectX-7 固件全部统一: 28.49.1014 (2026-06 GA)
all_reduce: 单口最优 (30.6 GB/s), 双口降速 30% all_gather: 三种配置接近 (~20.5 GB/s), 双口略优但不显著 alltoall: 单口最优 (~4.9 GB/s), 双口降速 5%; alltoall 带宽远低于其他操作 (多对多通信开销大)
关键发现:
- 两个单口性能一致 (mlx5_0 ≈ mlx5_1), 接近单口 HDR 200G 理论极限
- 双口对 all_reduce/alltoall 反而更慢: 两张 ConnectX-7 共享同一 PCIe root (0000:36), 双口同时传输时 PCIe 带宽争用 + NCCL 调度开销增加
- all_gather 三种配置差异最小 (20-21 GB/s), 因其通信模式更适合双口负载均衡
- 建议: 生产环境用单口 mlx5_0 即可, 双口无收益反而降速
- GDR 状态: [RO] (Read Only) — RTX PRO 5000 非数据中心卡, PCIe GDR 只支持 read
- libgdrapi + nvidia-peermem + gdrdrv 均正常加载
nccl-multi-node/
├── README.md # 本文件
├── docs/
│ ├── topology.md # 完整硬件拓扑 (GPU/IB/PCIe/NUMA)
│ └── setup-guide.md # 环境配置记录 (IB/GDRCopy/opensm/SSH免密)
├── scripts/
│ ├── run_all_reduce_port1.sh # 单口 mlx5_0 测试
│ ├── run_all_reduce_port2.sh # 单口 mlx5_1 测试
│ └── run_all_reduce_dual.sh # 双口测试
└── results/
├── single_port1/ # mlx5_0 结果
├── single_port2/ # mlx5_1 结果
└── dual_port/ # 双口结果
# 在 server1 (10.10.3.25) 上执行
bash scripts/run_all_reduce_port1.sh # 单口1
bash scripts/run_all_reduce_port2.sh # 单口2
bash scripts/run_all_reduce_dual.sh # 双口- NCCL_IB_HCA: 指定使用的 IB 端口 (mlx5_0:1 / mlx5_1:1)
- NCCL_SOCKET_IFNAME=ibs19f0: NCCL bootstrap 走第一个 IPoIB 接口
- NCCL_P2P_LEVEL=SYS: 跨 NUMA P2P 走系统内存中转
- NCCL_MIN_NCHANNELS=64: 强制最少 64 channel
- NCCL_GDRCOPY_ENABLE=1: 启用 GDRCopy (GPU↔IB 直通)
详细配置过程见 docs/setup-guide.md