别被 100% 骗了:GPU 利用率背后的真相
时间:2026-09-12 23:18 来源:未知 人气:
原文链接:https://www.trainy.ai/blog/gpu-utilization-misleading
前言
机器学习团队评估 GPU 使用情况的最常见指标是 GPU 利用率,通常通过终端运行 nvidia-smi 来获取。许多集成观测工具也将 GPU 利用率作为其主要性能指标。但是,这一指标并非总是评估 GPU 性能的最佳选择。事实上,仅通过内存读/写操作而无需进行任何计算,即可实现 100% 的 GPU 利用率。本文将探讨我们如何发现这一局限性,以及在此过程中获得的进一步洞见。
我们实施了几乎所有 PyTorch 性能调优指南中提到的基本步骤,包括:
- 通过调整数据加载器参数(例如 num_workers、batch_size、pin_memory、prefetch_factor 等)来饱和 GPU。
- 通过混合精度训练(FP16 或 BF16)最大化TensorCore利用率。
- 使用 Apex 或 DeepSpeed 等库中的融合优化器(例如 FusedAdam 或 FusedAdamW)。
- 采用专为训练设计的实例和网络(例如 H100 SXM 或 A100 SXM),并优先选择较新世代(H100 A100 V100)。
这些简单调整使我们达到了 100% 的 GPU 利用率和显著的功率消耗,这是一个良好的开端。为了判断是否还有进一步优化的空间,我们计算了训练负载的模型 FLOPS 利用率(MFU)。
简要回顾:MFU(模型 FLOPS 利用率)是评估 GPU 性能的最佳指标之一,由 Google 的 PaLM 论文引入。它是“观测吞吐量(每秒令牌数)相对于系统在峰值 FLOPs 下运行的理论最大吞吐量的比率”。简而言之,它量化了工作负载每秒执行的浮点运算数相对于 GPU 最大能力的比例。其主要缺点是计算相对复杂,因为它依赖于模型参数和框架。
遗憾的是,该训练过程仅达到了约 20% 的 MFU。作为参考,当今大多数 LLM 训练通常达到 35%–45% 的 MFU。这引发了一个关键问题:为什么在 GPU 利用率达到 100% 的同时,我们仅利用了 GPU 理论计算峰值的 20%?
要解答这一差异,需要更深入地理解 GPU 利用率的实际含义。
GPU 利用率究竟是什么?
NVIDIA 文档对 GPU 利用率的定义较为模糊:“报告 GPU 计算资源和内存接口的当前利用率。”
Datadog 的 NVML 文档提供了更精确的解释:“在过去采样周期内,一个或多个内核在 GPU 上执行的时间百分比。”要理解为什么这一定义具有误导性,需要简要介绍 GPU 的工作原理。
本文标签: