Nvidia-smi Неустойчивое использование GPU-использования?

Я знаю, что 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 |
+-----------------------------------------------------------------------------+

Ответы

Ответ 1

Это выборочное измерение за период времени. В течение заданного периода времени он сообщает, в каком проценте времени было задействовано одно или несколько ядер ядра (ядро) (т.е. Работа).

Это ничего не говорит о том, сколько SM было использовано или как "занят" код, или что он делает точно, или каким образом он мог использовать память.

Вышеуказанное утверждение может быть проверено без особых трудностей с помощью упражнения типа microbenchmarking (см. ниже).

Я не знаю, как точно определить период времени, но поскольку это также общее просто выборочное измерение (т.е. nvidia-smi сообщает одно выборочное измерение так часто, как вы его опросили), я не думаю, что это должно быть что важно для общего использования или понимания инструмента. Период времени явно короткий и не обязательно связан с интервалом опроса, если он указан, для nvidia-smi. Возможно также выявить период времени выборки, используя также методы микрообнаружения.

Кроме того, слово "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%.