3、性能基准测试:GPU基准测试工具、网络基准测试、存储基准测试
各位同学,咱们今天聊点实在的——基准测试。说白了,就是给你的集群“体检”。
我见过太多团队,集群搭起来就跑,结果一上大模型训练,各种瓶颈全冒出来。GPU利用率上不去、网络卡成狗、存储读写慢得像蜗牛……嗯,这些坑我都踩过。所以,在正式调优之前,先把基准跑一遍,心里才有底。
3.1 GPU基准测试工具
GPU是集群的心脏。心脏跳得怎么样,得用工具测一测。
3.1.1 nvidia-smi:最基础的“听诊器”
nvidia-smi 是NVIDIA自带的命令行工具。我个人习惯,上机第一件事就是敲这个命令。它能告诉你:
- GPU型号、驱动版本、CUDA版本
- 当前功耗、温度、风扇转速
- 显存使用量、GPU利用率
- 进程占用情况
举个例子,看看你的GPU是不是在“摸鱼”:
nvidia-smi -l 1 # 每秒刷新一次,持续监控
如果GPU-Util一直低于80%,而显存快满了,那大概率是数据加载瓶颈。我曾经排查过一个案例,GPU利用率只有30%,一查发现是数据预处理线程卡住了——嗯,这就是基准测试的价值。
nvidia-smi dmon -s pucvmet 可以输出更详细的指标,包括PCIe带宽、电源管理状态等。适合做长时间记录。
3.1.2 DCGM:企业级监控利器
单机用 nvidia-smi 够了,但集群规模一上来,你就需要DCGM(Data Center GPU Manager)。
DCGM能做什么?
- 健康检查:自动检测GPU是否异常(比如ECC错误、温度过高)
- 性能指标:收集GPU利用率、内存带宽、NVLink流量等
- 策略管理:设置功耗上限、时钟频率锁定
我最常用的是 dcgmi diag 做快速诊断:
dcgmi diag -r 1 # 运行级别1的快速诊断
dcgmi diag -r 3 # 运行级别3的全面诊断(耗时较长)
3.1.3 MLPerf:行业标准性能标杆
MLPerf是MLCommons组织推出的基准测试套件。它不是为了诊断问题,而是为了横向对比——你的集群跟别人的比,到底快多少?
MLPerf包含多个场景:
- 训练(Training):图像分类、目标检测、自然语言处理等
- 推理(Inference):在线推理、离线推理
- 存储(Storage):针对AI工作负载的存储性能
我个人建议,如果你要采购新集群,或者优化现有集群,至少跑一次MLPerf Training。它能给出一个客观的“分数”,让你知道钱花得值不值。
举个例子,跑一个ResNet-50的训练基准:
# 下载MLPerf基准代码
git clone https://github.com/mlcommons/training.git
cd training/image_classification
# 运行基准(假设使用PyTorch)
python main.py --arch resnet50 --epochs 90 --batch-size 256
3.2 网络基准测试
GPU算力再强,网络不行也是白搭。分布式训练中,梯度同步、参数传输都依赖网络。我见过最夸张的情况:8卡机器内部用NVLink,但跨机通信走的是千兆以太网——结果训练速度还不如单机4卡。
3.2.1 ib_write_bw:InfiniBand带宽测试
如果你的集群用了InfiniBand,ib_write_bw 是必测工具。它属于perftest工具集,专门测试RDMA(远程直接内存访问)的带宽和延迟。
基本用法:
# 在服务端启动
ib_write_bw -d mlx5_0 -p 18515
# 在客户端连接
ib_write_bw -d mlx5_0 -p 18515 192.168.1.100
输出结果会显示带宽(Gbps)和延迟(us)。
我记得有一次,客户说他们的HDR100(100Gbps)网络跑不满,一测只有40Gbps。排查了半天,发现是PCIe链路宽度不对——网卡插在了x8的槽位上。嗯,硬件细节真的很重要。
--run_infinitely 参数,持续跑几分钟,观察带宽是否稳定。有些网络在短时间测试中表现很好,但长时间高负载下会降速。
3.2.2 perftest:更全面的网络测试套件
perftest不仅包含 ib_write_bw,还有 ib_read_bw、ib_send_bw、ib_atomic_bw 等。为什么需要这么多?
- 写操作(Write):模拟梯度推送,数据从本地写到远端
- 读操作(Read):模拟参数拉取,数据从远端读到本地
- 原子操作(Atomic):模拟全局归约(AllReduce)中的累加操作
我个人习惯,先跑 ib_write_bw 看带宽上限,再跑 ib_send_lat 看延迟:
ib_send_lat -d mlx5_0 -p 18515 192.168.1.100
如果延迟超过5微秒(对于InfiniBand),那就要检查网络配置了——比如是否启用了流控、MTU是否设置正确。
3.3 存储基准测试
存储是集群的“粮仓”。数据加载慢,GPU就得饿肚子。我见过一个团队,买了A100集群,结果训练时GPU利用率不到50%,一查发现是NFS存储太慢,数据读取成了瓶颈。
3.3.1 IOR:并行文件系统性能测试
IOR是Lustre、GPFS等并行文件系统的标准测试工具。它能模拟不同访问模式:
- 顺序读写(Sequential)
- 随机读写(Random)
- 共享文件(Shared File) vs 独立文件(File Per Process)
基本用法:
# 测试顺序写,使用16个进程,每个写1GB
mpirun -np 16 ior -w -t 1m -b 1g -o /mnt/lustre/testfile
输出结果会显示吞吐量(MB/s)和IOPS。对于AI训练,我建议重点关注 大块顺序读 的性能——因为训练数据通常是大的TFRecord或HDF5文件。
3.3.2 mdtest:元数据性能测试
mdtest专门测试文件系统的元数据性能——比如创建文件、删除文件、查看属性等。为什么重要?
你想想看,训练过程中,数据加载器会频繁打开、关闭文件。如果元数据性能差,光打开文件就能卡死你。
基本用法:
# 测试目录创建性能
mpirun -np 16 mdtest -n 10000 -d /mnt/lustre/testdir
输出结果会显示每秒操作数(ops/s)。对于AI场景,我建议关注 stat 和 open/close 的性能。
3.4 知识体系总览
下面这张图,是我自己总结的基准测试知识体系。你可以把它当作一个检查清单:
这张图把三大测试领域串起来了。GPU、网络、存储,三者缺一不可。我建议你每次搭建新集群,或者做重大升级时,都按这个清单跑一遍。别嫌麻烦——省下的排查时间,够你喝好几杯咖啡了。
好了,基准测试就聊到这儿。记住一句话:没有数据,就没有优化。先把基准跑出来,后面的事情才有方向。