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?
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?
Antworten:
Ich finde gpustat sehr nützlich. In kann mit installiert pip install gpustat
werden und druckt eine Aufschlüsselung der Nutzung durch Prozesse oder Benutzer.
watch gpustat -cp
, können Sie Statistiken kontinuierlich sehen, aber die Farben sind weg. Wie behebt man das? @Alleo
watch -c
. @ Roman Orac, danke, das hat auch bei Redhat 8 funktioniert, als ich beim Importieren von _curses in Python einen Fehler bekam.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
Option:gpustat -cp --watch
nvidia-smi -l 1
Dadurch wird die Ansicht jede Sekunde wiederholt und aufgerufen.
Wenn Sie vergangene Spuren des geloopten Anrufs im Konsolenverlauf nicht beibehalten möchten, können Sie außerdem Folgendes tun:
watch -n0.1 nvidia-smi
Wobei 0,1 das Zeitintervall in Sekunden ist.
Mir ist nichts bekannt, das diese Informationen kombiniert, aber Sie können das nvidia-smi
Tool verwenden, um die Rohdaten wie folgt abzurufen (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 %
watch -n 0.5 nvidia-smi
, was vermeidet, Ihr Terminal mit Ausgabe zu
Downloaden und installieren Sie neueste stabile CUDA - Treiber (4.2) von hier . Unter Linux bietet Ihnen nVidia-smi 295.41 genau das, was Sie wollen. Verwenden Sie nvidia-smi
:
[root@localhost 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-Karten beschränkt.
Ein weiterer nützlicher Überwachungsansatz ist die Verwendung ps
gefilterter 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 nvidia GPU-nutzenden Prozesse und einige Statistiken darüber. lsof ...
Ruft eine Liste aller Prozesse mit einer NVIDIA-GPU ab, die dem aktuellen Benutzer gehört, und ps -p ...
zeigt die ps
Ergebnisse für diese Prozesse an. ps f
Zeigt eine schöne Formatierung für untergeordnete / übergeordnete Prozessbeziehungen / -hierarchien an und -o
gibt eine benutzerdefinierte Formatierung an. Dies ähnelt dem ps u
einfachen Vorgang, fügt jedoch die Prozessgruppen-ID hinzu und entfernt einige andere Felder.
Ein Vorteil davon nvidia-smi
ist, dass sowohl Prozessgabeln als auch Hauptprozesse angezeigt werden, die die GPU verwenden.
Ein Nachteil ist jedoch, dass es auf Prozesse beschränkt ist, 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 ein sudo
vor dem hinzu lsof
.
Zuletzt kombiniere ich es mit watch
, um ein kontinuierliches 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*`'
Welches hat Ausgabe 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
sudo
dies zu tun :nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
nicht alle Prozesse aufgelistet, sodass Ihr Speicher von Prozessen verwendet wird, die dort nicht aufgeführt sind. Dies ist die Hauptmethode, mit der ich diese Prozesse verfolgen und beenden kann.
pmem
gegeben von ps
berücksichtigt den Gesamtspeicher der GPU, sondern den der CPU, weil ps
nicht "Nvidia GPU" bewusst ist
Dies mag nicht elegant sein, 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
.
nvidia-smi -l 2
. Oder um wiederholte Konsolenausgabe zu verhindern,watch -n 2 'nvidia-smi'
Wenn Sie nur den Prozess suchen möchten, der auf GPU ausgeführt wird, können Sie einfach den folgenden Befehl verwenden:
lsof /dev/nvidia*
Für mich nvidia-smi
und watch -n 1 nvidia-smi
sind in den meisten Fällen genug. Manchmal nvidia-smi
wird kein Prozess angezeigt, aber der GPU-Speicher ist aufgebraucht, sodass ich den obigen Befehl verwenden muss, um die Prozesse zu finden.
Es gibt Prometheus GPU Metrics Exporter (PGME) , der die nvidai-smi-Binärdatei nutzt. Sie können dies ausprobieren. Sobald 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
Sie können nvidia-smi pmon -i 0
jeden Prozess in GPU 0 überwachen, einschließlich Rechenmodus, SMS-Nutzung, Speichernutzung, Encoder-Nutzung und Decoder-Nutzung.
Sie können die Monitoring - Programm verwenden Blicke mit seiner GPU Monitoring Plug-in:
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
Es überwacht auch die CPU, die Festplatten-E / A, den Speicherplatz, das Netzwerk und einige andere Dinge:
Ich habe eine Batchdatei mit dem folgenden Code auf 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.