通信基线工具
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 按主机与卡数指定进程布局:布局写错时结果看起来正常,实际测的是单机内部的通信。
不指定网卡直接跑多机测试:可能选到管理网甚至容器网桥,带宽异常且会把排查方向带偏。