Nvidia-smi Volatile GPU-объяснение использования?
Я знаю, что nvidia-smi -l 1
даст использование GPU каждую секунду (аналогично следующему). Тем не менее, я был бы признателен за объяснение того, что Volatile GPU-Util
на самом деле означает. Это количество использованных SMs над общим SMs, или заполняемость, или что-то еще?
+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+
1 ответов
это выборочное измерение в течение периода времени. В течение определенного периода времени он сообщает, какой процент времени одно или несколько ядер GPU были активны (т. е. запущены).
Он ничего не говорит вам о том, сколько SMs было использовано, или как "занят" код был, или что он делал точно, или каким образом он мог использовать память.
вышеуказанное утверждение(ы) может быть проверено без особых трудностей с помощью упражнения типа microbenchmarking (см. ниже.)
Я не знаю, как точно определить период времени, но поскольку он также является общим только выборочным измерением (т. е. nvidia-smi
сообщает одно выборочное измерение так часто, как вы его опрашиваете) я не думаю, что это должно быть важно для общего использования или понимания инструмента. Период времени явно короткий и не обязательно связан с интервалом опроса, если он указан, для nvidia-smi
. Возможно, удастся выявить период времени выборки с помощью методы microbenchmarking также.
кроме того, слово "Volatile" не относится к этому элементу данных в 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%.