主要来自于文章
搞懂 NVIDIA GPU 性能指标 很容易弄混的一个概念: Utilization vs Saturation
这篇文章简单的来说,就是纠正我们对nvidia-smi中的GPU-Util这一个指标的直观理解。
在直观的理解中,这个指标应该表示GPU计算资源的饱和度,当这个指标不满100%,表示计算资源有空闲,可以继续加大计算量,充分利用计算资源。
这个直观的理解是部分正确的。
首先这个指标表示GPU计算资源的饱和度,这个观点是错误的。
实际上“利用率”指的是 **过去样本期间内某些活动发生的时间百分比**,这代表了一个或多个内核在 GPU 上执行的时间百分比。而不是饱和度。这个观点怎么理解呢?
首先GPU上有多个流处理器SM,比如单卡上有10个SM,如果我们启动一个SM线程让他启动运行,那么在饱和度的理解上,GPU的利用率应该是1/10=10%,因为还有9个SM是空闲状态。但是观察nvidia-smi,可以看到GPU-util为100%,这就和我们之前认为的饱和度概念不同。因为这里的指标实际上是执行时间的百分比,因为一个线程一直运行,所以时间片上是100%占用,但是实际上的饱和度只有10%,也就是还能继续计算资源的。
再次重申一下nvidia-smi中的GPU-util概念:这代表了一个或多个内核在 GPU 上执行的时间百分比。表示 GPU 利用率 (in %),即在一个周期时间内(1s或1/6s,根据GPU产品而定),一个或多个核函数处于 Active 的时间。该指标仅能够展示有核函数在用的 GPU 资源,但无法展示具体的使用情况。换句话说,NVML 定义的“利用率”可能 **与我们常规理解不一致**。它仅度量设备在给定采样周期内的使用部分时间,而不考虑该时间内使用的流多处理器(SM)数量。通常,我们认为“utilization”是指使用 GPU 处理器的部分。
因此当我们看到100% 的利用率时,并不表示GPU不能接受更过的工作了,还是可以给他加计算的。
其次“当这个指标不满100%,表示计算资源有空闲,可以继续加大计算量,充分利用计算资源。”这个理解是正确的。
回到GPU的利用率,我们更加关心的其实是饱和度,那么从哪里可以得到这个指标呢?
- 使用服务如 **dcgm-exporter**,它可以输出 Prometheus 格式的数据。
- 此服务内部基于 DCGM (数据中心 GPU 管理)。
- 除了high-level metrics外,它还可以进行分析并收集有关 GPU 设备的详细 **饱和度数据**。
这是这个服务的可视化指标