00 · Prologue

一个被误解的数字

在 GPU 算力测试、AI 训练调优、或者给新显卡"体检"时,我们常听到一个词——满载。很多人直观地认为:"GPU 利用率冲到 100% 就是满载。" 但压测中的"满载"真的有这么简单吗?

核心观察: 任务管理器里那个"GPU 利用率"达到 100%,不等于显卡真正满载

以 NVIDIA GPU 为例,常见的监控工具(如 nvidia-smi、任务管理器)显示的利用率,往往指的是 计算核心(CUDA 核心)的活跃时间占比。比如一个简单的向量加法核函数,可能让 CUDA 核心忙到 100%,但显存带宽、PCIe 带宽、Tensor Core 等其他资源可能闲置大半。

真正的"满载",应该是指 GPU 的 多个关键子系统同时达到性能上限,而不仅仅是核心利用率一个数字。

i · architecture
01 · Three Modules

GPU 卡的三大资源模块

GPU 可以抽象为三个相互配合但又独立的资源模块。单卡满载,理想情况下意味着三者同时处于高负荷状态。

MODULE 01
计算子系统
  • CUDA Core — 通用并行计算
  • Tensor Core — 矩阵乘加加速
  • RT Core — 光线追踪加速
MODULE 02
显存子系统
  • HBM / GDDR 显存颗粒
  • 显存控制器与缓存层级
  • 显存带宽与 ECC 纠错
MODULE 03
互联带宽
  • PCIe / NVLink 总线速率
  • 功耗墙与温度墙约束
  • VRM 供电与散热系统

理想状态下,计算单元以最高频率运行 + 显存以最高带宽读写 + 功耗接近甚至达到 TDP 上限,三者同时被推到极限。但实际压测中,不同负载往往只侧重压不同资源:

负载类型 主要压力 典型场景
大模型训练 计算单元 + 显存带宽 LLM 预训练 / 微调
显存拷贝测试 显存控制器 带宽基准测试
纯计算任务 CUDA Core 矩阵乘法、科学计算
烤机软件 着色器 + 部分显存 FurMark、Folding@home
ii · definition
02 · What Is "Reasonable"

什么是"合理满载"?

"合理"二字,其实是从 压测目的 出发的。不同的测试目标,对"满载"的定义完全不同。

从稳定性角度看
合理满载 = 在功耗墙 / 温度墙内,长时间稳定运行,不降频,不出错。 不合理的表现:跑几分钟就触发温度保护降频、出现 ECC 错误、驱动崩溃。合理的表现:频率曲线平坦、温度稳定在规格内、无报错日志。
从性能角度看
合理满载 = 核心 / 显存频率达到预期上限 + 电压 / 功耗未触发异常保护 + 实际吞吐量(TFlops、带宽 GB/s)与理论值相符。 一个经典反例:有人超频显存后跑分反而下降——因为显存频率拉太高,触发了隐形的纠错重传(ECC 重试),导致有效带宽下降。此时监控看到显存频率 100%,实际读写速率却腰斩 — 这不是合理的满载
从功耗角度看
合理满载 = GPU 卡整卡功耗达到 TDP 上限(厂商设定的 MAX TDP),并且热源分布均匀(核心、显存、VRM 温度都在规格内)。 此时需要用功耗计测量从电源到 GPU 卡的 12V 输入功率,而不是完全相信软件读数 — 软件读数通常有 5~10% 的误差。
iii · pitfalls
03 · False Full-Load

常见的"假满载"陷阱

陷阱 1 · FurMark 甜甜圈
FurMark 是著名的功耗测试工具,但它压的主要是 着色器单元 + 一部分显存带宽,对 Tensor Core、RT Core 几乎无负载。在某些 GPU 卡(如 RTX 4090)上,FurMark 跑出的功耗甚至比大模型训练还低几十瓦。所以 FurMark 能过测,不代表 AI 训练一定稳。
陷阱 2 · 轻负载循环
比如写一个简单的 while 循环,反复做向量加法。GPU 利用率显示 100%,但功耗只有 TDP 的 60%。这种"满载"骗过了利用率监控,却没有压到真正的功率瓶颈。
陷阱 3 · 单测显存带宽
nvidia-smi -dmtp 模拟的显存压力,或者 cudaMemcpy 来回拷贝,会让显存控制器 100% 负载,但核心几乎空转。此时温度很低,风扇都不转 — 对稳定性验证意义有限。
iv · recipe
04 · Stress Testing

"合理满载"的压测方案

如果需要对自己的单 GPU 卡做一次靠谱的单卡满载验证,可以参考以下组合。核心思路:组合使用不同工具,覆盖计算、带宽、功耗三个维度。

A · 快速验证
gpu-burn 200(循环 200 秒),时长 5~10 分钟。关注指标:频率、功耗、温度、有无报错。这一步可以快速确认卡的基本健康状态。
B · 长时间烤机
gpu-burn -d 36000(10 小时)或 PyTorch 跑大矩阵乘法循环。关注指标:频率曲线是否平坦、是否降频、功耗是否稳定。长时间测试是发现散热问题的关键。
C · 显存稳定性
使用 memtest_gpu / cuda-memtest,时长 1~2 小时。关注指标:显存 ECC 错误、带宽衰减。这一步能暴露显存颗粒或供电的隐性问题。
D · 混合负载(推荐)
同时运行:1 个 GEMM 大矩阵乘(压计算)+ 1 个随机访存 kernel(压带宽),时长 30 分钟。目标:功耗达到 TDP 95% 以上,三项资源利用率均 > 80%。混合负载最接近真实大模型训练场景。

推荐命令速查

Compute Stress
# gpu-burn — 计算单元压测
./gpu_burn 200
./gpu_burn -d 36000

# PyTorch — 大矩阵乘循环
python -c "import torch; ..."
Memory & Monitor
# 显存稳定性测试
./cuda_memtest
./memtest_gpu

# 实时监控
nvidia-smi dmon -s puct
nvidia-smi -l 1

对于个人用户,最简单也最可靠的办法是:直接跑一个流行的大模型训练脚本(比如 LLaMA 7B 的 pretrain 步骤,把 batch size 调大),观察 nvidia-smi 的功耗和频率曲线。如果 10 分钟内频率稳定、功耗贴顶、风扇曲线平滑,基本可以认为是合理满载。

# 实时查看 GPU 状态(每秒刷新)
nvidia-smi -l 1

# 查看更详细的功耗/频率/利用率时间序列
nvidia-smi dmon -s puct -d 2

# gpu-burn 双精度长时间测试
./gpu_burn -d 36000 -tc 0

# PyTorch 快速压测计算 + 带宽
python stress_gpu.py
v · summary
05 · Takeaway

写在最后

"满载"不是指 GPU 利用率为 100%,而是指在 功率、散热、电压 限制内,计算单元、显存、功耗三者同时达到高负荷且稳定运行的状态。

"合理的满载",取决于目的:

下次看到有人晒"烤机图"说"显卡满载了",不妨多问一句:"是核心满载、显存满载、还是功耗满载?" — 这三个答案,才拼出一个真实的 GPU 压力全貌。

原文出处: 微信公众号 "GPU 那些事儿"。本站仅做学习归档,内容归原作者所有。
相关工具: gpu-burn · NVIDIA NVML · PyTorch