Erklärung zur Verwendung von nvidia-smi Volatile GPU?

71

Ich weiß, nvidia-smi -l 1dass die GPU jede Sekunde verwendet wird (ähnlich wie im Folgenden). Ich würde mich jedoch über eine Erklärung freuen, was Volatile GPU-Utilwirklich bedeutet. Ist das die Anzahl der verwendeten SMs über die Gesamtzahl der SMs oder die Belegung oder etwas anderes?

+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+
user3813674
quelle
20
Für diejenigen, die sich fragen, bedeutet SM Streaming Multiprocessor und wird hier
Davidmh
Volatileist aus der obersten Reihe, wie in Volatile Uncorr. ECC- was nach einem schwerwiegenden Speicherfehler klingt. Sie haben 0 davon in der obigen Ausgabe.
Tomasz Gandor

Antworten:

69

Es handelt sich um eine Stichprobenmessung über einen bestimmten Zeitraum . Für einen bestimmten Zeitraum wird angegeben, wie viel Prozent der Zeit ein oder mehrere GPU-Kernel aktiv waren (dh ausgeführt wurden).

Es sagt Ihnen nichts darüber aus, wie viele SMs verwendet wurden, wie "beschäftigt" der Code war, was er genau tat oder auf welche Weise er möglicherweise Speicher verwendet hat.

Die obigen Behauptungen können ohne allzu große Schwierigkeiten mit einer Übung vom Typ Mikrobenchmarking überprüft werden (siehe unten).

Basierend auf den Nvidia- Dokumenten kann der Probenzeitraum je nach Produkt zwischen 1 Sekunde und 1/6 Sekunde liegen. Der Zeitraum sollte jedoch keinen großen Einfluss darauf haben, wie Sie das Ergebnis interpretieren.

Auch das Wort "flüchtig" bezieht sich nicht auf dieses Datenelement in nvidia-smi. Sie haben das Ausgabeformat falsch gelesen.

Hier ist ein trivialer Code, der meine Behauptung unterstützt:

#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;
}

Wenn ich auf meinem System den obigen Code mit einem Befehlszeilenparameter von 100 ausführe, meldet nvidia-smi eine Auslastung von 99%. Wenn ich mit einem Befehlszeilenparameter von 1000 laufe, meldet nvidia-smi eine Auslastung von ~ 83%. Wenn ich es mit einem Befehlszeilenparameter von 10000 ausführe, meldet nvidia-smi eine Auslastung von ~ 9%.

Robert Crovella
quelle