在 GPU 服务器的性能验证、稳定性排查与运维管理中,压力测试是关键环节,可有效检测硬件极限性能、散热效率及潜在故障。以下从工具原理、核心功能、使用场景等维度,详细介绍三款核心测试工具,帮助用户系统掌握 GPU 服务器压力测试方法。
一、GPU 专属压力测试工具:gpu-burn
gpu-burn
是基于 NVIDIA CUDA 框架开发的轻量级 GPU 压力测试工具,专为验证 GPU 核心(CUDA Core)、显存(VRAM)稳定性设计,通过 "饱和式计算" 让 GPU 达到满负载,是检测 GPU 硬件故障(如显存坏块、核心算力衰减)的核心工具。
1. 核心原理
- 算力拉满 :调用 CUDA 内核函数,执行密集型浮点运算(支持单精度
float
、双精度double
),使 CUDA Core 利用率接近 100%,模拟 AI 训练、高性能计算等真实高负载场景; - 显存压榨:分配大尺寸显存缓冲区,循环读写数据,占用 90% 以上显存空间,验证显存带宽、颗粒稳定性,排查显存错误导致的程序崩溃问题;
- 多卡适配:自动识别服务器中所有 NVIDIA GPU,支持单卡、多卡并行压测,适配多 GPU 集群场景。
2. 核心功能与使用场景
- 快速稳定性验证:30-60 秒短期测试,可快速判断 GPU 是否存在明显硬件故障(如开机后检测、显卡更换后的初步验证);
- 长期稳定性考验:2-24 小时持续压测,模拟生产环境下的长时间高负载(如 AI 模型训练、渲染任务),排查隐性稳定性问题;
- 散热效率评估:压测时实时监控 GPU 核心温度(通常升至 80-90℃),判断服务器散热系统(风扇、风道、散热片)是否满足需求,避免过热降频。
3. 关键注意事项
- 环境依赖:仅支持 NVIDIA GPU,需提前安装匹配的 NVIDIA 显卡驱动(建议≥450.xx 版本)与 CUDA Toolkit(建议≥10.0 版本);
- 显存预留 :指定显存缓冲区大小时(如
-s 4096
表示 4096MB),需预留 1-2GB 显存给系统,避免显存溢出导致测试中断; - 结果解读 :测试结束后若显示 "
No errors detected
",说明 GPU 无硬件错误;若出现 "Error detected
",需优先排查显存故障(如通过nvidia-smi -q
查看显存错误日志)。
4.gpunurn
- 两种方式
(1)源码:https://github.com/wilicc/gup-burn
git clone https://github.com/wilicc/gpu-burn
cd gpu-burn
make
./gpu_burn
./gpu_burn 60
./gpu_burn -tc 300 (major >=7)
(2)tar.gz:http://wili.cc/blog/gpu-burn.html
tar -zxvf xx.tar.gz -C
cd xx
make
也可以指定卡去跑
export CUDA_VISIBLE_DEVICES=1
. /gpu_burn 100
. 4090 (tc). 2.7% proc'd: 880 (145963 Gflop/s) - 880 (145466 Gflop/s)
errors: 0 - 0 temps: 46 C - 46 C
. 3090ti (tc)
. 55350 Gflop/s
. A100-40GB (tc)
. 100.0% proc'd: 32568 (118649 Gflop/s) - 33534 (12261 Gflop/s)
errors: 0 -0
二、CPU 压力测试工具:cpu-burn(cpu-burn-in)
cpu-burn
(全称cpu-burn-in
)是一款专注于 CPU 稳定性测试的工具,通过执行高强度数学运算(如素数判定、浮点循环计算),使 CPU 核心、缓存达到满负载,可与gpu-burn
配合,实现 GPU 服务器 "CPU+GPU" 全硬件压力测试。
1. 核心原理
- 核心负载拉满:通过循环执行复杂数学运算(如计算超大整数的素数属性),让 CPU 每个核心的利用率稳定在 99%-100%,模拟多线程计算场景(如分布式任务、数据预处理);
- 缓存压力测试:运算过程中频繁读写 CPU 一、二、三级缓存,验证缓存一致性与稳定性,排查缓存错误导致的数据计算偏差;
- 轻量无依赖:无需复杂依赖库,编译后仅生成几十 KB 的可执行文件,支持 Linux、Windows 等多系统,适配不同架构 CPU(x86_64、ARM)。
2. 核心功能与使用场景
- CPU 硬件故障检测:通过 1-2 小时压测,排查 CPU 核心损坏、电压不稳等问题(如服务器频繁蓝屏、程序随机崩溃时的硬件排查);
- 整机稳定性验证 :与
gpu-burn
同时运行,模拟 "CPU 数据预处理 + GPU 计算" 的真实业务场景,测试服务器电源、主板供电的负载能力(如 AI 服务器上线前的整机压力测试); - 散热评估:压测时 CPU 温度通常升至 70-85℃,可判断 CPU 散热器(风冷 / 水冷)是否正常工作,避免散热不足导致的 CPU 降频(影响整机性能)。
3. 关键注意事项
- 线程控制 :需根据 CPU 核心数指定测试线程数(如 8 核 CPU 执行
./cpu-burn 8
),避免线程数过多导致系统资源争抢,影响测试准确性; - 电源保护 :部分老旧服务器电源功率不足,同时运行
cpu-burn
与gpu-burn
时可能触发电源保护(自动关机),需提前确认电源额定功率; - 结果解读 :测试过程中若出现程序闪退、系统卡顿,需优先排查 CPU 硬件故障(如通过
dmesg
查看 Linux 系统内核错误日志)。
4. cpuburn
(1) 直接解压 ./cpuburn;
Burning 152 CPUs/cores
(2)测试cpu传感器温度
安装
sudo apt install lm-sensors
配置,yes
sudo sensors-detect
watch n -1 sensors
也可以查看系统监视器 (system monitor)
三、CUDA 功能验证与性能参考:CUDA Samples
CUDA Samples 是 NVIDIA 官方提供的 CUDA 开发示例集,包含 100 + 个示例程序,覆盖 CUDA 核心功能(如并行计算、显存管理、多 GPU 通信)与性能优化场景,不仅是 CUDA 开发学习资料,也是 GPU 服务器 CUDA 环境有效性、GPU 功能完整性的验证工具。
1. 核心定位与价值
- 环境验证基准 :通过运行 Samples 中的基础示例(如
vectorAdd
向量加法),可快速判断 CUDA 驱动、CUDA Toolkit 是否安装正确,GPU 是否能正常响应 CUDA 调用(避免因环境配置错误导致的 GPU 无法使用); - 功能完整性测试 :包含多 GPU 通信(
simpleMultiGPU
)、显存带宽测试(bandwidthTest
)、光线追踪(simpleRayTracing
)等示例,可验证 GPU 高级功能(如 NVLink、RTX 光追核心)是否正常工作; - 性能参考标准 :部分示例(如
nbody
天体模拟、matrixMul
矩阵乘法)会输出 GPU 算力(GFLOPS)、显存带宽(GB/s)等关键指标,可作为 GPU 性能对比的基准(如不同型号 GPU 的算力差异、同型号 GPU 的性能一致性验证)。
2. 核心使用场景
- CUDA 环境部署验证 :GPU 服务器新部署 CUDA 环境后,运行
vectorAdd
示例,若输出 "Test PASSED
",说明 CUDA 环境配置正确(可正常调用 GPU 计算); - GPU 功能排查 :若 GPU 无法使用某功能(如多 GPU 通信),可运行对应 Samples 示例(如
simpleMultiGPU
),通过错误日志定位问题(如 NVLink 线缆未插好、CUDA 版本不支持); - 性能基准测试 :运行
matrixMul
示例,对比实测算力与 NVIDIA 官方公布的 GPU 算力(如 Tesla A100 单精度算力为 19.5 TFLOPS),判断 GPU 是否存在性能衰减(如长期高负载导致的硬件老化)。
3. 关键注意事项
- 版本匹配:CUDA Samples 版本需与 CUDA Toolkit 版本一致(如 CUDA 12.0 需对应 Samples 12.0),版本不匹配可能导致示例编译失败;
- 功能依赖:部分高级示例(如光线追踪)需 GPU 支持特定架构(如 RTX 系列支持 RTX Core),老旧 GPU(如 GTX 10 系列)运行时会提示功能不支持(属正常现象);
- 非压力测试工具 :CUDA Samples 以 "功能验证" 为核心,单个示例运行时间短(几秒到几十秒),不能替代
gpu-burn
进行长期稳定性测试,仅用于环境与功能排查。
4. cuda-samples
安装 cmake
sudo apt install cmake -y
git clone https://github.com/NVIDIA/cuda-samples.git
git clone git@githab.com:NVIDIA/cuda-samples.git
cd cuda-samples
git checkout tags/v12.0
conda deactivate
make
- references
(1) https://docs.nvidia.com/cuda/demo-suite/index.html
- cuda-samples/Samples/1_Utilities/
(1) deviceQuery : 设备查询
(2) bandwidthTest: 测试带宽
./bandwidthTestLatencyTest : 两块GPU,卡间p2p带宽
P2P技术允许两个GPU直接相互通信,而不需要通过CPU
4.1 diviceQuery
• cuda driver version / runtime version
• cuda capability major/minor version number
• cuda cores
◦ 4090: 16384 cuda cores, A100: 6912
• memory bus width
◦ 4090: 384-bit, A100: 5120-bit
In [1]: from fractions import Fraction
Fraction(16384, 6912)
executed in 20ms, finished 12:32:35 2025-08-22
Out[1]: Fraction(64, 27)
In [3]: 16384/6912
executed in 11ms, finished 12:32:51 2025-08-22
Out[3]: 2.3703703703703702
4.2 bandwithTest
不同类型的内存传输
• 主机到设备(host to device):即 CPU 及其内存向 GPU 内存传输数据的性能;
• 设备到主机(device to host):从 GPU 内存回传到主机(系统内存)的性能;
• 设备到设备(device to device):两个 GPU 之间直接传输数据的性能。
4.3 1080ti
In [7]: # 1080ti bandwidth
from IPython.display import Image
Image('./imgs/1080ti-bandwidth.png', height=400, width=500)
Out[7]:[CUDA Bandwidth Test] - Starting...
Running on...
Device 0: GeForce GTX 1080 Ti
Quick Mode
Host to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 6022.3
Device to Host Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 6432.5
Device to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 330783.8
Result = PASS
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
四、总结:三款工具的协同使用场景
在 GPU 服务器测试中,三款工具通常配合使用,形成 "环境验证→功能测试→稳定性压测" 的完整流程:
- 环境验证 :先运行 CUDA Samples 的
vectorAdd
,确认 CUDA 环境正常; - 功能测试 :通过 CUDA Samples 的
bandwidthTest
(显存带宽)、simpleMultiGPU
(多 GPU),验证 GPU 核心功能; - 稳定性压测 :同时运行
gpu-burn
(60 分钟 +)与cpu-burn
(60 分钟 +),测试整机硬件稳定性与散热效率,最终确保 GPU 服务器满足生产环境需求。