nvidia-smi 挥发性 GPU 利用率解释?
nvidia-smi Volatile GPU-Utilization explanation?
我知道nvidia-smi -l 1
会每隔一秒给出一次GPU使用率(类似下面的)。但是,我希望能解释一下 Volatile GPU-Util
的真正含义。是使用的 SM 数占 SM 总数的比例,还是占用率,还是其他什么?
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48 Driver Version: 367.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K20c Off | 0000:03:00.0 Off | 0 |
| 30% 41C P0 53W / 225W | 0MiB / 4742MiB | 96% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla K20c Off | 0000:43:00.0 Off | 0 |
| 36% 49C P0 95W / 225W | 4516MiB / 4742MiB | 63% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 1 5193 C python 4514MiB |
+-----------------------------------------------------------------------------+
是a sampled measurement over a time period。对于给定的时间段,它报告一个或多个 GPU 内核处于活动状态的时间百分比(即 运行ning)。
它不会告诉您有关使用了多少 SM、代码有多“忙”、代码究竟在做什么或可能以何种方式使用内存的任何信息。
使用微基准测试类型的练习(见下文)可以毫不费力地验证上述声明。
基于 Nvidia docs,采样周期可能在 1 秒到 1/6 秒之间,具体取决于产品。但是,句点对您如何解释结果应该没有太大影响。
另外,nvidia-smi
中的这个数据项不属于“易失性”一词。您误读了输出格式。
这是支持我的主张的简单代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
const long long tdelay=1000000LL;
const int loops = 10000;
const int hdelay = 1;
__global__ void dkern(){
long long start = clock64();
while(clock64() < start+tdelay);
}
int main(int argc, char *argv[]){
int my_delay = hdelay;
if (argc > 1) my_delay = atoi(argv[1]);
for (int i = 0; i<loops; i++){
dkern<<<1,1>>>();
usleep(my_delay);}
return 0;
}
在我的系统上,当我 运行 命令行参数为 100 的上述代码时,nvidia-smi 将报告 99% 的利用率。当我 运行 的命令行参数为 1000 时,nvidia-smi 将报告~83% 的利用率。当我 运行 它的命令行参数为 10000 时,nvidia-smi 将报告~9% 的利用率。
虽然这个答案集中在 GPU 内核上,但我最近注意到 nvidia-smi
也会报告非零 GPU 利用率,例如 cudaMemcpy
操作是 运行ning(并且没有其他的)。所以上面的描述应该算是针对CUDA内核的报告描述activity.
nvidia-smi 上的 'Volatile' 不是 GPU-Util 的一部分,它是 'Volatile Uncorr. ECC' 的一部分,它显示了自上次驱动以来 GPU 上发生的未纠正错误的数量加载。 nvidia-smi 中的所有内容都写得很好:
https://medium.com/analytics-vidhya/explained-output-of-nvidia-smi-utility-fc4fbee3b124
我知道nvidia-smi -l 1
会每隔一秒给出一次GPU使用率(类似下面的)。但是,我希望能解释一下 Volatile GPU-Util
的真正含义。是使用的 SM 数占 SM 总数的比例,还是占用率,还是其他什么?
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48 Driver Version: 367.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K20c Off | 0000:03:00.0 Off | 0 |
| 30% 41C P0 53W / 225W | 0MiB / 4742MiB | 96% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla K20c Off | 0000:43:00.0 Off | 0 |
| 36% 49C P0 95W / 225W | 4516MiB / 4742MiB | 63% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 1 5193 C python 4514MiB |
+-----------------------------------------------------------------------------+
是a sampled measurement over a time period。对于给定的时间段,它报告一个或多个 GPU 内核处于活动状态的时间百分比(即 运行ning)。
它不会告诉您有关使用了多少 SM、代码有多“忙”、代码究竟在做什么或可能以何种方式使用内存的任何信息。
使用微基准测试类型的练习(见下文)可以毫不费力地验证上述声明。
基于 Nvidia docs,采样周期可能在 1 秒到 1/6 秒之间,具体取决于产品。但是,句点对您如何解释结果应该没有太大影响。
另外,nvidia-smi
中的这个数据项不属于“易失性”一词。您误读了输出格式。
这是支持我的主张的简单代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
const long long tdelay=1000000LL;
const int loops = 10000;
const int hdelay = 1;
__global__ void dkern(){
long long start = clock64();
while(clock64() < start+tdelay);
}
int main(int argc, char *argv[]){
int my_delay = hdelay;
if (argc > 1) my_delay = atoi(argv[1]);
for (int i = 0; i<loops; i++){
dkern<<<1,1>>>();
usleep(my_delay);}
return 0;
}
在我的系统上,当我 运行 命令行参数为 100 的上述代码时,nvidia-smi 将报告 99% 的利用率。当我 运行 的命令行参数为 1000 时,nvidia-smi 将报告~83% 的利用率。当我 运行 它的命令行参数为 10000 时,nvidia-smi 将报告~9% 的利用率。
虽然这个答案集中在 GPU 内核上,但我最近注意到 nvidia-smi
也会报告非零 GPU 利用率,例如 cudaMemcpy
操作是 运行ning(并且没有其他的)。所以上面的描述应该算是针对CUDA内核的报告描述activity.
nvidia-smi 上的 'Volatile' 不是 GPU-Util 的一部分,它是 'Volatile Uncorr. ECC' 的一部分,它显示了自上次驱动以来 GPU 上发生的未纠正错误的数量加载。 nvidia-smi 中的所有内容都写得很好:
https://medium.com/analytics-vidhya/explained-output-of-nvidia-smi-utility-fc4fbee3b124