5.6 KiB
多机多卡 NCCL 诊断报告
- 日期:2026-05-23
- 测试入口:
nccl-gpu-1/aikubeworker0012/172.72.8.12 - 对端节点:
nccl-gpu-2/aikubeworker0016/172.72.8.16 - 诊断配置:
configs/multinode_nccl_diagnostic.yaml - 原始脚本报告:
reports_multinode_nccl_diagnostic_2x8_debug_v2.md
当前结论
这不是单纯 “IB 不通” 的问题。底层 CUDA RDMA perftest 可以跑到接近单端口 400Gb/s 的水平,但 NCCL 在实际 2 节点通信时把 GPU Direct RDMA 禁用了,导致 NCCL 带宽显著低于验收阈值。
同时,nccl-gpu-2 的 SSH 入口不稳定,会造成 mpirun 拉起远端 rank 失败。这个问题会直接影响 alltoall 等多机测试的稳定性,需要和 NCCL GDR 问题一起处理。
已完成的修正
- 修正
mpirun使用路径,避开系统/usr/bin/mpirun与 DOCA OpenMPI 动态库混用导致的崩溃。 - 补充
LD_LIBRARY_PATH,确保mpirun、CUDA、pip 安装的 NCCL 动态库可同时解析。 - 将 NCCL HCA 限定到 400Gb/s 活跃端口:
mlx5_0,mlx5_1,mlx5_6,mlx5_7。 - 在脚本中加入 multi-node NCCL 网络诊断解析,报告会展示
NCCL Network、GPU Direct RDMA、GDR Disabled HCAs。 - 增加
multinode_nccl.extra_env,可以在配置里快速试 NCCL 环境变量,不需要改代码。 - 增加诊断配置
configs/multinode_nccl_diagnostic.yaml,固定跑 2 节点 x 8 GPU、256M、NCCL_DEBUG=INFO和NCCL_DEBUG_SUBSYS=INIT,NET。
关键证据
1. CUDA RDMA perftest 通过
命令类型:
CUDA_VISIBLE_DEVICES=0 ib_write_bw -d mlx5_0 -i 1 --use_cuda=0 -s 4194304 -F --report_gbits 172.72.8.16
结果:
| 测试 | 设备 | GPU | 平均带宽 | 结论 |
|---|---|---|---|---|
ib_write_bw --use_cuda |
mlx5_0 |
GPU0 | 387.16 Gb/s |
PASS |
解释:GPU 内存参与 RDMA 写带宽测试可以接近 400Gb/s,说明 nvidia_peermem/经典 GPUDirect RDMA 路径并非完全不可用。
2. CUDA DMA-BUF 路径不可用
命令类型:
CUDA_VISIBLE_DEVICES=0 ib_write_bw -d mlx5_0 -i 1 --use_cuda=0 --use_cuda_dmabuf -s 4194304 -F --report_gbits 172.72.8.16
结果:
| 测试 | 输出 | 结论 |
|---|---|---|
ib_write_bw --use_cuda_dmabuf |
DMA-BUF is not supported on this GPU |
FAIL |
解释:当前环境不能走 CUDA DMA-BUF RDMA。后续 NCCL 应优先确认是否能稳定走经典 nvidia_peermem 路径。
3. NCCL 单卡跨节点仍禁用 GDR
已经尝试:
NCCL_NET_GDR_LEVEL=SYSNCCL_NET_GDR_LEVEL=5NCCL_NET_GDR_READ=1NCCL_DMABUF_ENABLE=0NCCL_IB_CUDA_SUPPORT=1NCCL_IB_HCA=mlx5_0
结果仍显示:
NCCL INFO Using network IB
NCCL INFO NET/IB : GPU Direct RDMA Disabled for HCA 0 'mlx5_0'
256M allreduce 约 13.4 GB/s,明显低于 400Gb/s IB 端口能力。
4. 脚本 2 节点 x 8 GPU 诊断结果
原始报告:reports_multinode_nccl_diagnostic_2x8_debug_v2.md
| Operation | Topology | Peak Bus BW | Threshold | Status | NCCL Network | GPU Direct RDMA |
|---|---|---|---|---|---|---|
| allreduce | 2 nodes x 8 GPUs | 68.69 GB/s |
>= 480 GB/s |
FAIL | IB | DISABLED |
| alltoall | 2 nodes x 8 GPUs | 0.00 GB/s |
>= 75 GB/s |
FAIL | unknown | UNKNOWN |
allreduce 失败原因是带宽不达标,且报告捕获到 GDR 被 NCCL 禁用:
| GDR Disabled HCAs |
|---|
mlx5_0, mlx5_1, mlx5_6, mlx5_7 |
alltoall 失败原因这轮不是性能本身,而是 mpirun 阶段受 SSH/网络发现影响失败,报告尾部显示:
lack of common network interfaces and/or no route found between them
当前阻塞
阻塞 1:NCCL 禁用 GPU Direct RDMA
现象:
- IB 能被 NCCL 识别:
Using network IB - 400Gb/s HCA 被 NCCL 选中:
mlx5_0, mlx5_1, mlx5_6, mlx5_7 - 但 NCCL 明确禁用 GDR:
GPU Direct RDMA Disabled - perftest 的经典 CUDA RDMA 又能跑到
387.16 Gb/s
判断:底层 RDMA 能力存在,但 NCCL 的 GDR 判定/注册路径没有打通。优先排查 NCCL 与 NVIDIA driver、OFED、nvidia_peermem、NCCL net plugin/内部 IB 后端之间的兼容性。
阻塞 2:nccl-gpu-2 SSH 不稳定
现象:
- 多次出现:
kex_exchange_identification: Connection closed by remote host - MCP 直连
nccl-gpu-2也会失败或长时间超时 mpirun依赖 SSH 拉起远端 rank,因此 SSH 抖动会让 alltoall 这类测试直接没有有效输出
判断:需要先处理 aikubeworker0016 的 SSHD/连接限制/MaxStartups/安全策略,否则多机测试无法稳定复现。
建议下一步
- 先修
nccl-gpu-2SSH 稳定性:检查sshd_config的MaxStartups、连接限制、安全审计组件,以及是否有过多半开 SSH 会话。 - 对两台机器分别确认
nvidia_peermem参数、OFED 版本、NVIDIA driver 版本一致性。 - 在两台机器上测试是否需要切换
nvidia_peermem peerdirect_support模式,并在变更前确认没有正在运行的业务任务。 - 尝试安装或启用匹配当前 OFED/driver 的 NCCL net plugin;当前日志显示
No plugin found (libnccl-net.so),NCCL 使用的是 internal network plugin。 - SSH 稳定后重跑完整多机配置:2 节点 x 8 GPU,至少覆盖
all_reduce_perf和alltoall_perf,消息大小从1K到16G。
当前可交付物
configs/multinode_nccl_diagnostic.yaml:多机多卡诊断配置reports_multinode_nccl_diagnostic_2x8_debug_v2.md:脚本生成的原始 2x8 诊断报告reports_multinode_nccl_diagnosis_20260523.md:本中文诊断总结