4. 带宽测试工具链
做过多卡训练的人都知道,通信带宽是分布式性能的命门。你模型写得再好,通信一卡顿,整个集群都在等数据。
我个人习惯,拿到一台新机器,第一件事就是跑一遍带宽测试工具链。这就像医生给病人做体检——先查清楚哪里通、哪里堵,心里才有底。
今天我把四个最常用的工具串起来讲:nvidia-smi topo -m、nccl-tests、ib_write_bw、iperf3。它们各自负责不同层面的诊断,组合起来就是一套完整的通信体检方案。
核心思路:从拓扑结构 → GPU通信 → 网络传输 → 带宽验证,逐层排查。
4.1 nvidia-smi topo -m:先看清你的GPU怎么连的
很多人一上来就测带宽,结果发现性能不对。其实第一步应该是看拓扑。
nvidia-smi topo -m 会输出一张GPU互联关系表。你想想看,如果两张卡是通过PCIe桥接的,那带宽上限就是PCIe 4.0 x16的32GB/s。如果是NVLink直连,那就能跑到600GB/s以上。差距巨大。
我在项目中遇到过,有同事抱怨多卡训练慢,一查发现两张卡挂在不同的CPU socket上,走的是QPI/UPI链路。那带宽直接砍半。所以,先跑这个命令,心里有个数。
我的习惯:每次拿到新机器,第一件事就是 nvidia-smi topo -m 保存一份拓扑图。后续所有测试都基于这个拓扑来解读。
4.2 nccl-tests:GPU通信的硬核体检
拓扑看完了,接下来测GPU之间的实际通信带宽。这里我推荐 nccl-tests。
它本质上是NVIDIA官方提供的NCCL性能测试套件。能测 all_reduce、all_gather、reduce_scatter 等常见集合通信操作。
跑起来很简单:
# 编译
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make
# 测试2张卡 all_reduce
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 2
# 测试8张卡 all_gather
./build/all_gather_perf -b 8 -e 128M -f 2 -g 8
输出结果里,我最关注的是 总线带宽(Bus BW) 这一列。它代表实际的有效带宽。如果这个值远低于理论值,那就要排查了。
| 测试项 | 理论带宽 | 实测带宽(参考) | 说明 |
|---|---|---|---|
| NVLink 3.0 (A100) | 600 GB/s | ~550 GB/s | 接近理论值,正常 |
| NVLink 4.0 (H100) | 900 GB/s | ~830 GB/s | 性能优秀 |
| PCIe 4.0 x16 | 32 GB/s | ~25 GB/s | 有协议开销,正常 |
| 跨Socket PCIe | 32 GB/s | ~15 GB/s | ⚠️ 可能瓶颈 |
注意:nccl-tests 测试的是GPU之间的通信,不经过CPU。如果发现带宽异常低,先检查NVLink是否启用,或者PCIe是否降速。
4.3 ib_write_bw:RDMA网络的真实力
多机训练时,节点之间走的是RDMA网络(比如InfiniBand或RoCE)。这时候 ib_write_bw 就派上用场了。
它属于 perftest 工具包,专门测试RDMA的读写带宽。我个人习惯,先测单条链路,再测多链路聚合。
基本用法:
# 服务端(节点A)
ib_write_bw -d mlx5_0 -p 18515
# 客户端(节点B)
ib_write_bw -d mlx5_0 -p 18515 192.168.1.1
输出结果里,看 BW average 这一行。如果是100Gbps的网卡,实测应该在95-98 Gbps左右。如果只有50-60 Gbps,那就有问题了。
我曾经遇到过,客户说带宽只有理论值的一半。排查了半天,发现是网卡固件版本不匹配。升级固件后,带宽直接翻倍。所以,别小看这个工具。
小技巧:测试时加上 -a 参数,可以自动跑多种消息大小,方便看不同粒度下的带宽表现。
4.4 iperf3:TCP/IP层面的兜底检查
最后,别忘了 iperf3。虽然现在很多场景走RDMA,但TCP/IP仍然是基础。控制面通信、数据落盘、日志传输,都离不开TCP。
而且,如果RDMA跑不起来,很多系统会回退到TCP。这时候TCP带宽就成了兜底。
用法很简单:
# 服务端
iperf3 -s -p 5201
# 客户端
iperf3 -c 192.168.1.1 -p 5201 -t 30 -P 4
-P 4 表示4个并行流。多流测试能更真实地反映多连接场景下的带宽。
我建议,TCP带宽至少要到网卡标称值的80%以上。比如25G网卡,实测应该到20-23 Gbps。如果低于这个值,检查一下网卡配置、驱动、或者交换机流控。
总结一下这四个工具的分工:
- nvidia-smi topo -m:看拓扑,知道GPU怎么连的
- nccl-tests:测GPU间通信,验证NVLink/PCIe性能
- ib_write_bw:测RDMA网络,多机通信的核心
- iperf3:测TCP网络,兜底检查
这四个工具串起来,就是一套完整的带宽测试工具链。从单机到多机,从GPU到网络,全覆盖。