GPU利用率
英伟达官方的GPU利用率的定义如下:
nvidia-smi
中的GPU利用率
1 |
|
上述代码片段将在单个流多处理器(SM)上启动指定的内核(线程)。根据常规理解,GPU的“利用率”应该计算为$\frac{1}{num_sm}$。但 nvidia-smi
却显示GPU利用率为100%:
根据NVML的定义,“利用率”是指在过去的样本期间内发生某些活动的时间百分比。具体来说:
- GPU利用率:这表示一个或多个内核在GPU上执行的时间百分比
NVML的定义完全不符合我们日常开发中的“利用率”理解。它仅测量给定采样周期内设备使用的时间部分,而不考虑该时间内使用的流式多处理器(SM)的数量。
通常,我们将“利用率”视为正在使用的GPU处理器的部分,用专业术语说就是“饱和度”:
资源具有无法服务的额外工作的程度
我们可以用 dcgm-exporter
来收集GPU的饱和度信息,这里引用Tim在路上的图片:
上图可以看到当GPU利用率为100%时,SM占用率非常低(<20%),浮点运算(FP32/FP16/TensorCore)也保持在非常低的百分比,这表明GPU还没有饱和,而这才是真实的GPU利用现状。