it-swarm.com.de

oberster Befehl für GPUs, die CUDA verwenden

Ich versuche, einen Prozess zu überwachen, der cuda und MPI verwendet. Gibt es eine Möglichkeit, dies zu tun, etwa den Befehl "top", der aber auch die GPU überwacht?

65
natorro

Ich finde gpustat sehr nützlich. In kann mit pip install gpustat installiert werden und druckt eine Aufschlüsselung der Nutzung durch Prozesse oder Benutzer.

 enter image description here

21
Alleo

Ich kenne nichts, was diese Informationen kombiniert, aber Sie können das nvidia-smi-Tool verwenden, um die Rohdaten zu erhalten, wie es so ist (danke an @jmsu für den Tipp zu -l):

$ nvidia-smi -q -g 0 -d UTILIZATION -l

==============NVSMI LOG==============

Timestamp                       : Tue Nov 22 11:50:05 2011

Driver Version                  : 275.19

Attached GPUs                   : 2

GPU 0:1:0
    Utilization
        Gpu                     : 0 %
        Memory                  : 0 %
75
Edric

Um in Echtzeit einen Überblick über die verwendeten Ressourcen zu erhalten, führen Sie folgende Schritte aus:

nvidia-smi -l 1

Dadurch wird die Ansicht in jeder Sekunde wiederholt und aufgerufen.

Wenn Sie die Spuren des Anrufs in der Konsolenhistorie nicht beibehalten möchten, können Sie auch Folgendes tun:

watch -n0.1 nvidia-smi

Dabei ist 0,1 das Zeitintervall in Sekunden. 

 enter image description here

69

Laden Sie den neuesten stabilen CUDA-Treiber (4.2) von hier herunter und installieren Sie ihn. NVidia-smi 295.41 bietet Ihnen unter Linux genau das, was Sie möchten. Verwenden Sie nvidia-smi:

[[email protected] release]# nvidia-smi 
Wed Sep 26 23:16:16 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 3.295.41   Driver Version: 295.41         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  Tesla C2050               | 0000:05:00.0  On     |         0          0 |
|  30%   62 C  P0    N/A /  N/A |   3%   70MB / 2687MB |   44%     Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.  7336     ./align                                                 61MB  |
+-----------------------------------------------------------------------------+

BEARBEITEN: In den neuesten NVIDIA-Treibern ist diese Unterstützung auf Tesla Cards beschränkt.

18
lashgar

Ein weiterer nützlicher Überwachungsansatz ist die Verwendung von ps für Prozesse, die Ihre GPUs verbrauchen. Ich benutze dieses oft:

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

Das zeigt alle GPU-nutzenden Prozesse von nvidia und einige Statistiken über sie. lsof ... ruft eine Liste aller Prozesse ab, die eine nvidia-GPU des aktuellen Benutzers verwenden, und ps -p ... zeigt ps-Ergebnisse für diese Prozesse an. ps f zeigt die Nice-Formatierung für untergeordnete/übergeordnete Prozessbeziehungen/Hierarchien und -o gibt eine benutzerdefinierte Formatierung an. Dieser Vorgang ähnelt dem Ausführen von ps u, fügt jedoch die Prozessgruppen-ID hinzu und entfernt einige andere Felder. 

Ein Vorteil gegenüber nvidia-smi ist, dass sowohl Prozessgabeln als auch Hauptprozesse angezeigt werden, die die GPU verwenden. 

Ein Nachteil ist jedoch die Beschränkung auf Prozesse, die dem Benutzer gehören, der den Befehl ausführt. Um es für alle Prozesse zu öffnen, die einem Benutzer gehören, füge ich eine Sudo vor der lsof hinzu. 

Schließlich kombiniere ich es mit watch, um ein fortlaufendes Update zu erhalten. Am Ende sieht es also so aus:

watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `Sudo lsof -n -w -t /dev/nvidia*`'

Welche hat ausgegeben wie:

Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `Sudo lsof -n -w -t /dev/nvi...  Mon Jun  6 14:03:20 2016
USER      PGRP   PID %CPU %MEM  STARTED     TIME COMMAND
grisait+ 27294 50934  0.0  0.1   Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941  0.0  0.0   Jun 02 00:00:00  \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6  1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428  6.9  0.5 14:02:09 00:00:04  \_ python -u process_examples.py
grisait+ 53596 33773  7.5  0.5 14:02:19 00:00:04  \_ python -u process_examples.py
grisait+ 53596 34174  5.0  0.5 14:02:30 00:00:02  \_ python -u process_examples.py
grisait+ 28205 28205  905  1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387  5.8  0.4 13:30:49 00:01:53  \_ python -u train.py
grisait+ 28205 28388  5.3  0.4 13:30:49 00:01:45  \_ python -u train.py
grisait+ 28205 28389  4.5  0.4 13:30:49 00:01:29  \_ python -u train.py
grisait+ 28205 28390  4.5  0.4 13:30:49 00:01:28  \_ python -u train.py
grisait+ 28205 28391  4.8  0.4 13:30:49 00:01:34  \_ python -u train.py
13
grisaitis

Verwenden Sie das Argument "--query-compute-apps =".

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

für weitere Hilfe folgen Sie bitte

nvidia-smi --help-query-compute-app
10
Deepak

Verwenden Sie einfach watch nvidia-smi. Die Nachricht wird standardmäßig im 2s-Intervall ausgegeben.

Zum Beispiel als das folgende Bild:

 enter image description here

Sie können auch watch -n 5 nvidia-smi (-n 5 x 5s Intervall) verwenden.

6
Jayhello

Sie können nvtop ausprobieren, das dem weit verbreiteten Tool htop ähnelt, jedoch für NVIDIA-GPUs. Hier ist ein Screenshot von nvtop davon in Aktion.

 Screenshot of nvtop in action 

2
Rodrigo

Das ist vielleicht nicht elegant, aber Sie können es versuchen

while true; do sleep 2; nvidia-smi; done

Ich habe auch die Methode von @Edric ausprobiert, die funktioniert, aber ich bevorzuge das ursprüngliche Layout von nvidia-smi.

2
skyuuka

Es gibt Prometheus GPU Metrics Exporter (PGME) , der die nvidai-smi-Binärdatei nutzt. Sie können dies ausprobieren. Wenn der Exporter ausgeführt wird, können Sie über http: // localhost: 9101/metrics darauf zugreifen. Für zwei GPUs sieht das Beispielergebnis folgendermaßen aus: 

temperature_gpu{gpu="TITAN X (Pascal)[0]"} 41
utilization_gpu{gpu="TITAN X (Pascal)[0]"} 0
utilization_memory{gpu="TITAN X (Pascal)[0]"} 0
memory_total{gpu="TITAN X (Pascal)[0]"} 12189
memory_free{gpu="TITAN X (Pascal)[0]"} 12189
memory_used{gpu="TITAN X (Pascal)[0]"} 0
temperature_gpu{gpu="TITAN X (Pascal)[1]"} 78
utilization_gpu{gpu="TITAN X (Pascal)[1]"} 95
utilization_memory{gpu="TITAN X (Pascal)[1]"} 59
memory_total{gpu="TITAN X (Pascal)[1]"} 12189
memory_free{gpu="TITAN X (Pascal)[1]"} 1738
memory_used{gpu="TITAN X (Pascal)[1]"} 10451
0
Abu Shoeb

sie können nvidia-smi pmon -i 0 verwenden, um jeden Prozess in GPU 0 . zu überwachen, einschließlich Rechenmodus, sm-Nutzung, Speicherauslastung, Encoderverwendung, Decoderverwendung.

0
changqi.xia

Sie können das Überwachungsprogramm glances mit seiner GPU-Überwachung plug-in verwenden:

  • open Source
  • zu installieren: Sudo apt-get install -y python-pip; Sudo pip install glances[gpu]
  • zu starten: Sudo glances

 enter image description here

Es überwacht auch die CPU, die Festplatten-E/A, den Festplattenspeicher, das Netzwerk und einige andere Dinge:

 enter image description here

0

Ich habe eine Batch-Datei mit dem folgenden Code in einem Windows-Computer erstellt, um jede Sekunde zu überwachen. Für mich geht das.

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

nvidia-smi exe befindet sich normalerweise unter "C:\Programme\NVIDIA Corporation", wenn Sie den Befehl nur einmal ausführen möchten.

0
Karthik N G