GPU-Nutzungsüberwachung (CUDA)

223

Ich habe CUDA Toolkit auf meinem Computer installiert und BOINC-Projekt auf GPU gestartet. In BOINC kann ich sehen, dass es auf der GPU ausgeführt wird. Gibt es jedoch ein Tool, mit dem ich mehr Details darüber anzeigen kann, was auf der GPU ausgeführt wird - GPU-Nutzung und Speichernutzung?

pbm
quelle

Antworten:

251

Für Nvidia-GPUs gibt es ein Tool nvidia-smi, mit dem die Speichernutzung, die GPU-Auslastung und die Temperatur der GPU angezeigt werden können. Es gibt auch eine Liste der Rechenvorgänge und einige weitere Optionen, aber meine Grafikkarte (GeForce 9600 GT) wird nicht vollständig unterstützt.

Sun May 13 20:02:49 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 3.295.40   Driver Version: 295.40         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  GeForce 9600 GT           | 0000:01:00.0  N/A    |       N/A        N/A |
|   0%   51 C  N/A   N/A /  N/A |  90%  459MB /  511MB |  N/A      Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.           Not Supported                                                 |
+-----------------------------------------------------------------------------+
pbm
quelle
1
Mein ION-Chip zeigt auch keine Verwendung an. : /
Raphael
123
watch -n 0.5 nvidia-smi, hält die Ausgabe auf dem neuesten Stand, ohne Ihr Terminal mit Ausgaben zu füllen.
Bar
31
@Bar Guter Tipp. watch -d -n 0.5 nvidia-smiwird noch besser sein.
Zeekvfu
3
@zeekvfu Ich denke, es wäre besser zu erklären, was die -dFlagge tut
donlucacorleone
5
@donlucacorleone man watchteilt uns mit, dass das -dFlag die Unterschiede zwischen den Ausgaben hervorhebt, sodass Sie leichter herausfinden können, welche Metriken sich im Laufe der Zeit ändern.
David Kaczynski
71

Unter Linux gibt use nvidia-smi -l 1kontinuierlich die GPU-Nutzungsdaten mit einem Aktualisierungsintervall von 1 Sekunde an.

qed
quelle
74
Ich bevorzuge es watch -n 1 nvidia-smi, kontinuierliche Updates zu erhalten, ohne das Terminal mit Ausgaben zu
füllen
1
Mit watch starten Sie jede Sekunde einen neuen Prozess, um die Karten abzufragen. Es ist besser, -l, und nicht jede Sekunde, ich würde vorschlagen, jede Minute oder alle 5 Minuten.
Mick T
55

Für Intel-GPUs gibt es das Projekt intel-gpu-toolsvon http://intellinuxgraphics.org/ , das den Befehl intel_gpu_top(unter anderem) bringt . Es ist ähnlich wie topund htop, aber speziell für die Intel-GPU.

   render busy:  18%: ███▋                                   render space: 39/131072
bitstream busy:   0%:                                     bitstream space: 0/131072
  blitter busy:  28%: █████▋                                blitter space: 28/131072

          task  percent busy
           GAM:  33%: ██████▋                 vert fetch: 0 (0/sec)
          GAFS:   3%: ▋                       prim fetch: 0 (0/sec)
            VS:   0%:                      VS invocations: 559188 (150/sec)
            SF:   0%:                      GS invocations: 0 (0/sec)
            VF:   0%:                           GS prims: 0 (0/sec)
            DS:   0%:                      CL invocations: 186396 (50/sec)
            CL:   0%:                           CL prims: 186396 (50/sec)
           SOL:   0%:                      PS invocations: 8191776208 (38576436/sec)
            GS:   0%:                      PS depth pass: 8158502721 (38487525/sec)
            HS:   0%:                      
            TE:   0%:                      
          GAFM:   0%:                      
           SVG:   0%:                      
jippie
quelle
35

nvidia-smifunktioniert auf einigen Linux-Rechnern nicht (gibt für viele Eigenschaften N / A zurück). Sie können nvidia-settingsstattdessen verwenden (dies ist auch das, was Mat Kelcey in seinem Python-Skript verwendet hat).

nvidia-settings -q GPUUtilization -q useddedicatedgpumemory

Sie können auch verwenden:

watch -n0.1 "nvidia-settings -q GPUUtilization -q useddedicatedgpumemory"

zur kontinuierlichen Überwachung.

Jonathan
quelle
4
Ich bin froh, dass dies kein Kommentar war. Es ist genau das, wonach ich gesucht habe, als ich auf diese Frage gestoßen bin.
Score_Under
Danke, das hat bei mir funktioniert, da ich eine GeForce-Karte besitze, die von nvidia-smi nicht unterstützt wird.
Alexg
4
Sie können nvidia-settings -q allsehen, welche anderen Parameter Sie überwachen können. Ich beobachte GPUCurrentProcessorClockFreqsund GPUCurrentClockFreqs.
Alexander
1
Vielen Dank Mann, gute Idee, alle abzufragen, da jede Karte unterschiedliche Zeichenfolgen haben kann, um zu überwachen!
Ruoho Ruotsi
Wenn Sie nur die Nummer und nichts anderes wollen (zB für conky), verwenden Sie diese:nvidia-settings -q [gpu:0]/UsedDedicatedGPUMemory -t
hLk
16

Für Linux verwende ich dieses HTOP-ähnliche Tool, das ich selbst geschrieben habe. Es überwacht und gibt einen Überblick über die GPU-Temperatur sowie die Core- / VRAM- / PCI-E- und Speicherbusauslastung. Es wird jedoch nicht überwacht, was auf der GPU läuft.

gmonitor

Bildbeschreibung hier eingeben

Mountassir El Hafi
quelle
1
nvidia-settingsbenötigt ein laufendes X11, was nicht immer der Fall ist.
Victor Sergienko
funktioniert für mich ohne Ärger!
Hennadii Madan
15

Der Vollständigkeit halber hat AMD zwei Möglichkeiten:

  1. fglrx (Closed-Source-Treiber).

    $ aticonfig --odgc --odgt
    
  2. Mesa (Open Source-Treiber) können Sie RadeonTop verwenden .

    Zeigen Sie Ihre GPU-Auslastung sowohl für den Gesamtaktivitätsprozentsatz als auch für einzelne Blöcke an.

kevinf
quelle
13

Ich habe eine GeForce 1060 GTX-Grafikkarte und habe festgestellt, dass der folgende Befehl mir Informationen zu Auslastung, Temperatur, Lüftergeschwindigkeit und Stromverbrauch der Karte gibt:

$ nvidia-smi --format=csv --query-gpu=power.draw,utilization.gpu,fan.speed,temperature.gpu

Sie sehen eine Liste aller Abfrageoptionen mit:

$ nvidia-smi --help-query-gpu
Lyubomir
quelle
1
Es lohnt sich auch, memory.usedoder ( memory.free) hinzuzufügen .
Zoltan
3

Für OS X

Einschließlich Berglöwe

iStat-Menüs

Ohne Berglöwe

atMonitor

Die letzte Version von atMonitor, die GPU-bezogene Funktionen unterstützt, ist atMonitor 2.7.1.

- und der Link zu 2.7.1 liefert 2.7b.

Für die neuere Version der App erklärt atMonitor - FAQ :

Um atMonitor mit MacOS 10.8 kompatibel zu machen, haben wir alle GPU-bezogenen Funktionen entfernt.

Ich habe mit 2.7b alias 2.7.1 auf Mountain Lion mit einem MacBookPro5.2 mit NVIDIA GeForce 9600M GT experimentiert. Die App lief einige Sekunden, bevor sie beendet wurde. Die Temperatur wurde angezeigt, aber nicht die Nutzung:

                                                  Screenshot von atMonitor 2.7b auf Mountain Lion

Graham Perrin
quelle
3

Ich habe Prozesse beenden lassen (wahrscheinlich beendet oder abgestürzt) und weiterhin Ressourcen verwendet, wurde jedoch nicht in aufgeführt nvidia-smi. Normalerweise nahmen diese Prozesse nur GPU-Speicher in Anspruch.

Wenn Sie glauben, dass ein Prozess Ressourcen auf einer GPU verwendet und nicht in angezeigt wird nvidia-smi, können Sie versuchen, diesen Befehl zur Überprüfung auszuführen. Es zeigt Ihnen, welche Prozesse Ihre GPUs verwenden.

sudo fuser -v /dev/nvidia*

Dies funktioniert mit EL7, Ubuntu oder anderen Distributionen, deren NVIDIA-Geräte möglicherweise unter einem anderen Namen / Ort aufgeführt sind.

Rick Smith
quelle
2

Für NVIDIA unter Linux verwende ich das folgende Python-Skript, das eine optionale Verzögerung verwendet und wie iostat und vmstat wiederholt

https://gist.github.com/matpalm/9c0c7c6a6f3681a0d39d

$ gpu_stat.py 1 2
{"util":{"PCIe":"0", "memory":"10", "video":"0", "graphics":"11"}, "used_mem":"161", "time": 1424839016}
{"util":{"PCIe":"0", "memory":"10", "video":"0", "graphics":"9"}, "used_mem":"161", "time":1424839018}
mat kelcey
quelle
1

Mit der folgenden Funktion werden Informationen wie PID, Benutzername, CPU-Auslastung, Speicherauslastung, GPU-Speicherauslastung, Programmargumente und Laufzeit von Prozessen, die auf der GPU ausgeführt werden, an die Ausgabe von angehängt nvidia-smi:

function better-nvidia-smi () {
    nvidia-smi
    join -1 1 -2 3 \
        <(nvidia-smi --query-compute-apps=pid,used_memory \
                     --format=csv \
          | sed "s/ //g" | sed "s/,/ /g" \
          | awk 'NR<=1 {print toupper($0)} NR>1 {print $0}' \
          | sed "/\[NotSupported\]/d" \
          | awk 'NR<=1{print $0;next}{print $0| "sort -k1"}') \
        <(ps -a -o user,pgrp,pid,pcpu,pmem,time,command \
          | awk 'NR<=1{print $0;next}{print $0| "sort -k3"}') \
        | column -t
}

Beispielausgabe:

$ better-nvidia-smi
Fri Sep 29 16:52:58 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 378.13                 Driver Version: 378.13                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 730      Off  | 0000:01:00.0     N/A |                  N/A |
| 32%   49C    P8    N/A /  N/A |    872MiB /   976MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
|   1  Graphics Device     Off  | 0000:06:00.0     Off |                  N/A |
| 23%   35C    P8    17W / 250W |    199MiB / 11172MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
|    1      5113    C   python                                         187MiB |
+-----------------------------------------------------------------------------+
PID   USED_GPU_MEMORY[MIB]  USER    PGRP  %CPU  %MEM   TIME      COMMAND
9178  187MiB                tmborn  9175  129   2.6    04:32:19  ../path/to/python script.py args 42
Lenar Hoyt
quelle
Vorsicht, ich denke nicht, dass der von ps angegebene pmem den gesamten Speicher der GPU berücksichtigt, sondern den der CPU, da ps nicht "Nvidia GPU"
-bewusst ist
0

Dieses Skript ist besser lesbar und wurde für einfache Modifikationen und Erweiterungen entwickelt.

Sie können gnome-terminal durch Ihr bevorzugtes Terminal-Fensterprogramm ersetzen.


#! /bin/bash

if [ "$1" = "--guts" ]; then
    echo; echo "    ctrl-c to gracefully close"
    f "$a"
    f "$b"
    exit 0; fi

# easy to customize here using "nvidia-smi --help-query-gpu" as a guide
a='--query-gpu=pstate,memory.used,utilization.memory,utilization.gpu,encoder.stats.sessionCount'
b='--query-gpu=encoder.stats.averageFps,encoder.stats.averageLatency,temperature.gpu,power.draw'
p=0.5    # refresh period in seconds
s=110x9  # view port as width_in_chars x line_count

c="s/^/    /; s/, +/\t/g"
t="`echo '' |tr '\n' '\t'`"
function f() { echo; nvidia-smi --format=csv "$1" |sed -r "$c" |column -t "-s$t" "-o   "; }
export c t a b; export -f f
gnome-terminal --hide-menubar --geometry=$s -- watch -t -n$p "`readlink -f \"$0\"`" --guts

#

Lizenz: GNU GPLv2, TranSeed Research

Douglas Daseeco
quelle
0

Sie können verwenden

nvidia-smi pmon -i 0

um jeden Prozess in GPU 0 zu überwachen, einschließlich Rechen- / Grafikmodus, SM-Nutzung, Speichernutzung, Encodernutzung, Decodernutzung.

changqi.xia
quelle
0

Ich habe es nicht in den verfügbaren Antworten gesehen (außer vielleicht in einem Kommentar), also dachte ich, ich würde hinzufügen, dass Sie eine schönere Erfrischung nvidia-smimit bekommen können watch. Dadurch wird der Bildschirm bei jeder Aktualisierung aktualisiert, anstatt ständig zu scrollen.

watch -n 1 nvidia-smi

für eine Sekunde Intervall-Updates. Ersetzen Sie das 1durch das, was Sie wollen, einschließlich Sekundenbruchteile:

watch -n 5 nvidia-smi
watch -n 0.1 nvidia-smi
Engineero
quelle