test_gpu_scripts/reports_multinode_nccl_diagnosis_20260523.md

7.1 KiB
Raw Blame History

多机多卡 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_sshfix.md

当前结论

这不是单纯 “IB 不通” 的问题。底层 CUDA RDMA perftest 可以跑到接近单端口 400Gb/s 的水平,但 NCCL 在实际 2 节点通信时把 GPU Direct RDMA 禁用了,导致 NCCL 带宽显著低于验收阈值。

同时,nccl-gpu-2 的 SSH 入口曾因未认证连接过多触发 MaxStartups 随机拒绝,导致 mpirun 拉起远端 rank 失败。已经做了临时 SSHD 缓解并拿到有效的 2 节点 x 8 GPU allreduce/alltoall 报告;当前剩余核心问题是 NCCL GDR 仍被禁用。

已完成的修正

  1. 修正 mpirun 使用路径,避开系统 /usr/bin/mpirun 与 DOCA OpenMPI 动态库混用导致的崩溃。
  2. 补充 LD_LIBRARY_PATH,确保 mpirun、CUDA、pip 安装的 NCCL 动态库可同时解析。
  3. 将 NCCL HCA 限定到 400Gb/s 活跃端口:mlx5_0,mlx5_1,mlx5_6,mlx5_7
  4. 在脚本中加入 multi-node NCCL 网络诊断解析,报告会展示 NCCL NetworkGPU Direct RDMAGDR Disabled HCAs
  5. 增加 multinode_nccl.extra_env,可以在配置里快速试 NCCL 环境变量,不需要改代码。
  6. 增加诊断配置 configs/multinode_nccl_diagnostic.yaml,固定跑 2 节点 x 8 GPU、256M、NCCL_DEBUG=INFONCCL_DEBUG_SUBSYS=INIT,NET
  7. nccl-gpu-2 上临时提高 SSHD MaxStartups 并缩短 LoginGraceTime,缓解未认证连接过多导致的 SSH 随机拒绝。
  8. 将 OpenMPI OOB TCP 控制通道固定到 bond0,并加入 plm_rsh_args,减少 mpirun 远端启动受 SSH/host key/接口选择影响的概率。

关键证据

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=SYS
  • NCCL_NET_GDR_LEVEL=5
  • NCCL_NET_GDR_READ=1
  • NCCL_DMABUF_ENABLE=0
  • NCCL_IB_CUDA_SUPPORT=1
  • NCCL_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_sshfix.md

Operation Topology Peak Bus BW Threshold Status NCCL Network GPU Direct RDMA
allreduce 2 nodes x 8 GPUs 67.42 GB/s >= 480 GB/s FAIL IB DISABLED
alltoall 2 nodes x 8 GPUs 9.56 GB/s >= 75 GB/s FAIL IB DISABLED

allreduce 失败原因是带宽不达标,且报告捕获到 GDR 被 NCCL 禁用:

GDR Disabled HCAs
mlx5_0, mlx5_1, mlx5_6, mlx5_7

allreduce 和 alltoall 本轮均正常完成,returncode=0wrong=0,失败原因是带宽低于阈值,不是正确性失败。

5. SSHD MaxStartups 阻塞已临时缓解

nccl-gpu-2 曾显示:

sshd: /usr/sbin/sshd -D [listener] 52 of 10-100 startups
maxstartups 10:30:100

同时存在大量 sshd: unknown [priv] / sshd: unknown [net] 未认证连接,来源主要是 172.239.10.85。这会触发 OpenSSH MaxStartups 随机拒绝,直接表现为:

kex_exchange_identification: Connection closed by remote host

已临时改为:

MaxStartups 120:30:240
LoginGraceTime 20

改完后从 0012 连续 SSH 0016 5 次成功2 节点 mpirun hostname 成功2 节点 x 8 GPU allreduce/alltoall 也都能跑出有效结果。

6. nvidia_peermem legacy 模式实验无效

两台机器默认参数一致:

参数
nvidia_peermem version 580.159.03
peerdirect_support 0
persistent_api_support 1
OFED OFED-internal-26.01-1.0.0

临时切换两台机器到 peerdirect_support=12 节点 x 1 GPU NCCL 仍显示:

NET/IB : GPU Direct RDMA Disabled for HCA 0 'mlx5_0'

带宽仍约 13.4 GB/s。测试后已经恢复默认 peerdirect_support=0,persistent_api_support=1

当前阻塞

阻塞 1NCCL 禁用 GPU Direct RDMA

现象:

  • IB 能被 NCCL 识别:Using network IB
  • 400Gb/s HCA 被 NCCL 选中:mlx5_0, mlx5_1, mlx5_6, mlx5_7
  • 但 NCCL 明确禁用 GDRGPU Direct RDMA Disabled
  • perftest 的经典 CUDA RDMA 又能跑到 387.16 Gb/s

判断:底层 RDMA 能力存在,但 NCCL 的 GDR 判定/注册路径没有打通。优先排查 NCCL 与 NVIDIA driver、OFED、nvidia_peermem、NCCL net plugin/内部 IB 后端之间的兼容性。

阻塞 2nccl-gpu-2 SSH 存在外部连接压力

现象:

  • 多次出现过:kex_exchange_identification: Connection closed by remote host
  • 根因是未认证连接过多触发 MaxStartups
  • 当前已经通过临时 SSHD 配置缓解,并拿到了有效 2x8 报告
  • 但如果外部连接压力持续,仍建议从网络侧或安全策略侧处理来源连接

判断:这不再阻塞当前报告产出,但属于环境稳定性风险。

建议下一步

  1. 从网络/安全侧处理 172.239.10.85 等来源的 SSH 未认证连接压力,或者保留更高的 MaxStartups 配置作为测试窗口临时策略。
  2. 尝试安装或启用匹配当前 OFED/driver 的 NCCL net plugin当前日志显示 No plugin found (libnccl-net.so)NCCL 使用的是 internal network plugin。
  3. 用同版本软件栈补测 nccl-tests + NCCL net plugin 后的 GDR 状态,核心判据是报告里 GPU Direct RDMADISABLED 变成未禁用,且 2x8 带宽显著抬升。
  4. 如果仍禁用 GDR再继续查 NVIDIA driver 580.159.03、OFED 26.01、NCCL 2.21.5 与 H100/IB NDR 组合的兼容矩阵。
  5. GDR 修复后重跑完整多机配置2 节点 x 8 GPU至少覆盖 all_reduce_perfalltoall_perf,消息大小从 1K16G

当前可交付物

  • configs/multinode_nccl_diagnostic.yaml:多机多卡诊断配置
  • reports_multinode_nccl_diagnostic_2x8_sshfix.md:脚本生成的原始 2x8 诊断报告
  • reports_multinode_nccl_diagnosis_20260523.md:本中文诊断总结