系统学习 AI 学习路径:从 GPU 运行时到推理、微调与 RAG 评估

nccl-tests

NCCL 多卡通信测试:测 all_reduce/all_gather 带宽,判断 NVLink、PCIe 与 IB 是否正常

补充说明

NCCL Tests 是 NVIDIA 提供的集合通信微基准,包含 all_reduce_perf、all_gather_perf、reduce_scatter_perf、broadcast_perf、alltoall_perf 等程序。它测的是 GPU 之间的通信带宽和延迟,不测模型算力,也不替代训练吞吐测试。单机多卡看 NVLink/PCIe,多机看 IB/RoCE 和 NCCL 拓扑选择。

判断结果时看 busbw(算法带宽按通信模式折算后的总线带宽),不要只看 algbw。all_reduce 的 busbw = algbw × 2(n-1)/n,不同集合操作的折算系数不同,跨操作比较 algbw 没有意义。先跑正确性检查 -c 1,再跑性能;出现 #wrong 非零时不要继续调优。

常用示例

# 单机 8 卡,从 8B 到 128MB,按 2 倍递增
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8

# 只做正确性检查,不做性能统计
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8 -c 1

# 多机:每机 8 卡,共 16 卡;hostfile 里列出节点
mpirun -np 16 --hostfile hosts \
  -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=ib0 \
  ./build/all_reduce_perf -b 8 -e 8G -f 2 -g 8
# 打开 NCCL 调试日志,确认网卡、拓扑和算法选择
NCCL_DEBUG=INFO NCCL_DEBUG_SUBSYS=INIT,NET \
  ./build/all_reduce_perf -b 1G -e 1G -f 2 -g 8

# 指定 IB HCA,避免 NCCL 选错网卡
NCCL_IB_HCA=mlx5_0,mlx5_1 ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8

构建时按环境选择 MPI 或单进程模式:

make MPI=1 MPI_HOME=/usr/lib/x86_64-linux-gnu/openmpi CUDA_HOME=/usr/local/cuda

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. algbw 和 busbw 有什么区别?为什么跨集合操作比较时要看 busbw?
  2. 多机测试带宽异常低,先检查哪些 NCCL 环境变量?
  3. 出现 #wrong 非零时,应该先调性能还是先排查正确性?
答案
  1. algbw 是按消息大小和耗时算出的算法带宽;busbw 按集合操作的通信模式折算成总线带宽。不同操作的折算系数不同,busbw 才能跨操作比较。
  2. 先看 NCCL_DEBUG=INFO,确认选中的网卡和拓扑;用 NCCL_SOCKET_IFNAME 指定数据网卡,用 NCCL_IB_HCA 指定 IB 设备,并确认容器能看到 /dev/infiniband。
  3. 先排查正确性。#wrong 非零说明结果不一致,可能是硬件、驱动、NCCL 版本或拓扑问题;此时性能数字不可信。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令