首页/AI/大模型部署与运维速查/NCCL 带宽测试:nccl-tests 用法
推理环境与 GPU50 条

NCCL 带宽测试:nccl-tests 用法

多卡与多机通信能力的基线工具:编译 nccl-tests 后运行 all_reduce_perf,观察不同消息大小下的 busbw 与耗时,判断 NVLink、PCIe 或 RDMA 链路是否达到预期。

通信基线工具

nccl-tests 用来测多卡与多机之间集合通信的实际带宽。它在不同消息大小下反复执行通信操作,输出耗时与带宽,判断链路是否达到预期:卡间互联、同一交换树、跨主机走网络,各档表现差别很大。张量并行推理的性能上限受通信约束时,这是第一个该跑的工具。

编译与单机测试

编译与单机测试
# 拉源码并编译(指定 CUDA 与 NCCL 路径)
git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
make CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local/nccl
# 8 卡单机测试:消息从 8 字节到 128M,倍数递增
git checkout >/dev/null 2>&1 || true
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8
# 多机测试需要 MPI,按主机与每机卡数指定进程布局
mpirun -np 16 -H hostA:8,hostB:8 ./build/all_reduce_perf -b 8 -e 1G -f 2 -g 1

输出列读法

列含义关注点
size消息大小(字节)从小到大的曲线形状比单点更说明问题
count参与通信的元素个数与数据类型一起决定实际字节数
time该次通信耗时小消息看时延,大消息看带宽
算法带宽不含通信加倍的带宽口径用于横向对比同口径结果
总线带宽可对标链路理论值的口径与链路规格比较是否达到预期
校验列结果正确性校验非零说明通信出错,结果不可用

典型使用场景

  • 新集群上架:建立通信基线,作为后续性能变化的参照
  • 多卡方案评估:确认张量并行的通信开销是否可接受
  • 排障对比:怀疑通信劣化时,与基线结果逐档对比
  • 网络设备变更后验证:换交换机或网卡后复测,确认没有回退
  • 容量混部:多任务共用同一网络时,观察带宽是否被抢占
多机测试要用 MPI 按主机与卡数指定进程布局:布局写错时结果看起来正常,实际测的是单机内部的通信。
不指定网卡直接跑多机测试:可能选到管理网甚至容器网桥,带宽异常且会把排查方向带偏。

易错点

  • 不指定网卡跑多机:选到错误的网络接口,结果与实际链路能力无关
  • 忽略校验列:通信出错时带宽数字仍在输出,不看校验会得出错误结论
  • 只跑一个消息大小:小消息看时延、大消息看带宽,单点无法判断整体
  • 不看拓扑直接比较:不同互联方式的理论上限不同,横向比较要先对齐拓扑
  • 测量期间有别的任务在跑:带宽被抢占,基线与实际能力都不准

数据来源与参考

  • NVIDIA nccl-tests 仓库(github.com/NVIDIA/nccl-tests)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌