跳到正文
SkyWang的博客
返回

GPU 集群压测记录:nvidia-smi、DCGM 和 NCCL Tests 怎么看

这篇记录 GPU 集群压测的基本方法。压测不是为了跑一个漂亮数字,而是确认节点、GPU、网络、容器和训练通信链路是否稳定。A100、H800 这类集群尤其要重视 NCCL 和拓扑。

Table of contents

Open Table of contents

一、压测前先定义目标

压测前先说清楚要验证什么:

如果目标不清楚,很容易出现“跑了很多命令,但不知道结果是否合格”的情况。

二、基础状态检查

先看 GPU:

nvidia-smi
nvidia-smi topo -m
nvidia-smi -q | less

持续观察:

nvidia-smi dmon -s pucvmet -d 1

字段大致含义:

字段说明
pwr功耗
gtempGPU 温度
mtemp显存温度
smSM 利用率
mem显存利用率
enc/dec编解码利用率

压测时要同时看温度、功耗和错误,不要只看利用率。

三、DCGM 诊断

DCGM 可以做数据中心 GPU 的诊断和监控。

安装后启动:

systemctl enable --now nvidia-dcgm

查看 GPU:

dcgmi discovery -l

跑诊断:

dcgmi diag -r 1
dcgmi diag -r 2

官方文档里 -r 是诊断 run level:1 是 Quick,2 是 Medium,3 是 Long,4 是 Extended。日常巡检常用 -r 1,交付或疑难排查再跑 -r 2 或更长等级。诊断会占用 GPU,不要和业务任务混跑。

四、单机 CUDA 样例测试

如果安装了 CUDA samples,可以跑:

cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery

结果里出现:

Result = PASS

说明 CUDA 运行时基本正常。

再跑带宽测试:

cd /usr/local/cuda/samples/1_Utilities/bandwidthTest
make
./bandwidthTest

这个测试不能代表训练性能,但可以快速发现明显异常。

五、NCCL Tests 编译

NCCL Tests 是 GPU 集群通信压测常用工具。

git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make MPI=0 CUDA_HOME=/usr/local/cuda

如果做多机测试,需要 MPI:

make MPI=1 MPI_HOME=/path/to/mpi CUDA_HOME=/usr/local/cuda

六、单机 all_reduce 压测

8 卡单机测试:

./build/all_reduce_perf -b 8M -e 16G -f 2 -g 8

常看两列:

同型号、同拓扑机器之间,busbw 差距如果明显,优先检查:

七、多机 NCCL 压测

多机测试示例:

mpirun -np 16 \
  -H node01:8,node02:8 \
  -x NCCL_DEBUG=INFO \
  -x NCCL_SOCKET_IFNAME=eth0 \
  ./build/all_reduce_perf -b 8M -e 16G -f 2 -g 1

如果是 IB/RDMA 网络,结合现场环境增加:

export NCCL_IB_DISABLE=0
export NCCL_IB_HCA=mlx5

不要盲目复制变量。NCCL_IB_HCA=mlx5 是前缀匹配,现场也可以精确到 =mlx5_0:1 这种设备和端口。RoCE 场景里老版本 NCCL 可能要手工设 NCCL_IB_GID_INDEX,但 NCCL 2.21 及以后已经支持动态选择 GID index,通常先不要固定,除非网络方案或日志明确要求。

八、压测时同步采集

压测时建议同时采集:

nvidia-smi dmon -s pucvmet -d 1 > gpu-dmon.log
dmesg -w > dmesg.log
journalctl -f > journal.log

网络侧:

sar -n DEV 1
ip -s link

如果压测异常,日志比最终数字更重要。

九、结果判断

判断压测结果时不要只看平均值。至少看:

查看 Xid:

dmesg | grep -i xid
journalctl -k | grep -i xid

常见异常包括:

十、压测报告建议

每次压测至少记录:

可以按节点保存:

benchmark/
  node01/
    nvidia-smi.txt
    topo.txt
    all_reduce.log
    gpu-dmon.log
  node02/
    ...

小结

GPU 集群压测的核心是建立基线。先确认单机,再确认多机;先看是否稳定,再看性能数字。没有日志和环境信息的压测结果,很难用于后续排障。

参考资料


分享这篇文章:

上一篇
iperf3 网络测速笔记:TCP、UDP 和结果怎么看
下一篇
NCCL 测试笔记:安装、编译 nccl-tests 和多机压测