3、核心工具介绍:NCCL Tests、ib_write_bw、iperf3 的适用场景与基本用法
做带宽测试,说白了就是给网络做「体检」。你不能等到训练跑起来才发现带宽不够,那代价太大了。我个人习惯,在集群上线前,先把这三板斧抡一遍:NCCL Tests、ib_write_bw、iperf3。它们各自管一摊事,谁也替不了谁。
3.1 NCCL Tests:GPU 通信的「照妖镜」
NCCL Tests 是 NVIDIA 官方出品的工具集。它直接调用 NCCL 库,模拟的就是 GPU 之间通信的真实场景。你想想看,我们训练时用的 all-reduce、all-gather,它都能测。
适用场景:
- 验证多机多卡之间的 NCCL 通信带宽
- 排查 Ring 算法或 Tree 算法下的性能瓶颈
- 对比不同拓扑(如 NVLink vs PCIe)的差异
常用命令:
# 单机 8 卡 all_reduce 测试
./build/all_reduce_perf -b 128M -e 8G -f 2 -g 8
# 双机 16 卡 all_reduce 测试(需要指定 hosts)
./build/all_reduce_perf -b 128M -e 8G -f 2 -g 8 --hosts node1:8,node2:8
参数说明:-b 起始大小,-e 结束大小,-f 倍数因子,-g GPU 数量。
NCCL_IB_DISABLE=1 被错误设置了。所以跑测试前,先 echo $NCCL_* 看一眼环境变量,能省很多时间。
3.2 ib_write_bw:RDMA 网络的「硬指标」
ib_write_bw 是 Mellanox(现 NVIDIA)的 Perftest 工具包里的。它绕过了 GPU,直接测试网卡到网卡的 RDMA 带宽。说白了,它测的是网络本身的极限能力,跟 GPU 没关系。
适用场景:
- 验证 InfiniBand 或 RoCE 网络的物理带宽
- 排查网卡、光模块、线缆问题
- 确认交换机端口协商速率是否正确
基本用法:
# 服务端(node1)
ib_write_bw -d mlx5_0 -p 18515 --report_gbits
# 客户端(node2)
ib_write_bw -d mlx5_0 -p 18515 192.168.1.1 --report_gbits
-d 指定网卡设备,-p 端口号,--report_gbits 以 Gb/s 显示结果。
3.3 iperf3:TCP/IP 层的「通用体检」
iperf3 是网络工程师的老朋友了。它测的是 TCP 或 UDP 的吞吐量。虽然 GPU 训练走的是 RDMA,但控制面、数据下载、日志传输还是离不开 TCP。所以 iperf3 的结果能反映网络栈的整体健康度。
适用场景:
- 验证 TCP 带宽和延迟
- 排查路由、防火墙、MTU 问题
- 对比 RDMA 与 TCP 的性能差异
基本用法:
# 服务端
iperf3 -s -p 5201
# 客户端(测 60 秒,4 个并行流)
iperf3 -c 192.168.1.1 -p 5201 -t 60 -P 4
-P 并行流数,-t 测试时长。
3.4 三款工具的对比
| 工具 | 测试层级 | 主要用途 | 依赖 |
|---|---|---|---|
| NCCL Tests | GPU 通信层 | 验证 all-reduce 等集合通信性能 | NCCL、CUDA |
| ib_write_bw | RDMA 网络层 | 验证 InfiniBand/RoCE 点对点带宽 | Mellanox OFED |
| iperf3 | TCP/IP 层 | 验证 TCP 吞吐量、排查网络栈问题 | 无特殊依赖 |
我的建议是:先跑 iperf3 确认 TCP 没问题,再跑 ib_write_bw 确认 RDMA 没问题,最后跑 NCCL Tests 确认 GPU 通信没问题。一层一层往下剥,问题出在哪一层,一目了然。
3.5 知识体系结构图
下面这张图,帮你理清这三款工具在测试链路中的位置:
从这张图可以看得很清楚:iperf3 在最底层,测的是网络基础设施;ib_write_bw 在中间层,测的是 RDMA 能力;NCCL Tests 在最上层,直接反映 GPU 训练通信的真实表现。你如果发现 NCCL Tests 结果差,别急着调 NCCL 参数,先往下查 ib_write_bw 和 iperf3,往往能更快定位问题。
好了,工具介绍就到这里。记住:没有万能的工具,只有合适的场景。下一节我们聊聊怎么设计测试用例,让这些工具真正为你所用。