comando superiore per GPU che utilizzano CUDA


127

Sto cercando di monitorare un processo che utilizza cuda e MPI, c'è un modo per farlo, qualcosa come il comando "top" ma che monitora anche la GPU?


2
C'è anche nvtop github.com/Syllo/nvtop
konvas

"nvidia-smi pmon -i 0" può monitorare tutti i processi in esecuzione su nvidia GPU 0
changqi.xia

Risposte:


84

Trovo gpustat molto utile. In può essere installato con pip install gpustate stampa la ripartizione dell'utilizzo per processi o utenti.

inserisci qui la descrizione dell'immagine


4
dopo averlo inserito watch gpustat -cppuoi vedere le statistiche continuamente ma i colori sono spariti. Come lo risolvi? @Alleo
AbhimanyuAryan

1
@AbhimanyuAryan use watch -c. @Roman Orac, grazie, questo ha funzionato anche per me su Redhat 8 quando ho ricevuto qualche errore a causa dell'importazione di _curses in Python.
Bobak Hashemi

4
watch -c gpustat -cp --color
Lee Netherton

1
watch -n 0.5 -c gpustat -cp --color
Gabriel Romon

4
gpustat ora ha --watchun'opzione:gpustat -cp --watch
jayelm

139

Per ottenere informazioni in tempo reale sulle risorse utilizzate, eseguire le operazioni seguenti:

nvidia-smi -l 1

Questo eseguirà un ciclo e chiamerà la visualizzazione ogni secondo.

Se non desideri conservare le tracce passate della chiamata in loop nella cronologia della console, puoi anche fare:

watch -n0.1 nvidia-smi

Dove 0,1 è l'intervallo di tempo, in secondi.

inserisci qui la descrizione dell'immagine


2
Interrogare la carta ogni 0,1 secondi? Questo causerà il carico sulla scheda? Inoltre, utilizzando l'orologio, inizi un nuovo processo ogni 0,1 secondi.
Mick T

@MickT È un grosso problema? Poiché Nvidia-smi ha questo ciclo di costruzione! Il comando "watch" è molto diverso da nvidia-smi -l?
Mohammad Javad

Potrebbe essere, ho visto schede di fascia bassa avere strani blocchi e penso che sia perché troppi utenti eseguivano nvidia-smi sulle schede. Penso che usare 'nvidia-smi -l' sia un modo migliore di procedere poiché non si biforca ogni volta un nuovo processo. Inoltre, controllare la scheda ogni 0,1 secondi è eccessivo, lo farei ogni secondo quando provo a eseguire il debug di un problema, altrimenti lo faccio ogni 5 minuti per monitorare le prestazioni. Spero che aiuti! :)
Mick T

@Gulzar sì, lo è.
TrostAft

83

Non sono a conoscenza di nulla che combini queste informazioni, ma puoi usare lo nvidia-smistrumento per ottenere i dati grezzi, in questo modo (grazie a @jmsu per il suggerimento su -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 %

4
Penso che se aggiungi un -l a quello ottieni l'aggiornamento continuo monitorando efficacemente la GPU e l'utilizzo della memoria.
jmsu

6
E se quando lo eseguo la GPU utilizacion dice solo N / A ??
natorro

3
@natorro Sembra che nVidia abbia abbandonato il supporto per alcune schede. Controlla questo link forums.nvidia.com/index.php?showtopic=205165
jmsu

29
Preferisco watch -n 0.5 nvidia-smi, che evita di riempire il tuo terminale con l'output
ali_m

nvidia-smi pmon -i 0
changqi.xia

19

Scarica e installa l'ultimo driver CUDA stabile (4.2) da qui . Su Linux, nVidia-smi 295.41 ti dà proprio quello che vuoi. utilizzare 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  |
+-----------------------------------------------------------------------------+

MODIFICA: negli ultimi driver NVIDIA, questo supporto è limitato alle schede Tesla.


18

Utilizza l'argomento "--query-compute-apps ="

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

per ulteriore assistenza, segui

nvidia-smi --help-query-compute-app

17

Basta usare watch nvidia-smi, produrrà il messaggio con un intervallo di 2 secondi come impostazione predefinita.

Ad esempio, come l'immagine qui sotto:

inserisci qui la descrizione dell'immagine

Puoi anche usare watch -n 5 nvidia-smi(-n 5 per 5s intervallo).


16

Un altro approccio di monitoraggio utile consiste nell'utilizzare psfiltri sui processi che consumano le tue GPU. Lo uso molto:

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

Questo mostrerà tutti i processi che utilizzano la GPU NVIDIA e alcune statistiche su di essi. lsof ...recupera un elenco di tutti i processi utilizzando una GPU nvidia di proprietà dell'utente corrente e ps -p ...mostra i psrisultati per tali processi. ps fmostra una bella formattazione per le relazioni / gerarchie del processo figlio / padre e -ospecifica una formattazione personalizzata. Quello è simile al solo fareps u ma aggiunge l'ID del gruppo di processi e rimuove alcuni altri campi.

Un vantaggio di tutto questo nvidia-smi è che mostrerà i fork di processo così come i processi principali che utilizzano la GPU.

Uno svantaggio, tuttavia, è che è limitato ai processi di proprietà dell'utente che esegue il comando. Per aprirlo a tutti i processi di proprietà di qualsiasi utente, aggiungo un sudoprima dilsof .

Infine, lo combino con watchper ottenere un aggiornamento continuo. Quindi, alla fine, sembra:

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

Che ha output come:

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

2
Puoi anche ottenere i PID dei programmi di calcolo che occupano la GPU di tutti gli utenti senza sudoquesto:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
A volte nvidia-sminon elenca tutti i processi, quindi si finisce con la memoria utilizzata da processi non elencati lì. Questo è il modo principale in cui posso tracciare e terminare quei processi.
rand

1
@grisaitis Attenta, non credo che il pmemdato da pstenga conto della memoria totale della GPU ma di quella della CPU perché psnon è "Nvidia GPU" a conoscenza
SebMa

10

Puoi provare nvtop, che è simile allo htopstrumento ampiamente utilizzato ma per le GPU NVIDIA. Ecco uno screenshot nvtopdi esso in azione.

Screenshot di nvtop in azione


3

Potrebbe non essere elegante, ma puoi provare

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

Ho anche provato il metodo di @Edric, che funziona, ma preferisco il layout originale di nvidia-smi.


12
Oppure puoi semplicemente farlo nvidia-smi -l 2. O per evitare ripetuti output della console,watch -n 2 'nvidia-smi'
grisaitis

3

Se vuoi solo trovare il processo in esecuzione su gpu, puoi semplicemente usare il seguente comando:

lsof /dev/nvidia*

Per me nvidia-smie watch -n 1 nvidia-smisono sufficienti nella maggior parte dei casi. A volte nvidia-sminon mostra alcun processo ma la memoria della gpu è esaurita, quindi è necessario utilizzare il comando precedente per trovare i processi.


2

In Linux Mint, e molto probabilmente Ubuntu, puoi provare "nvidia-smi --loop = 1"


0

C'è Prometheus GPU Metrics Exporter (PGME) che sfrutta il binario nvidai-smi. Puoi provarlo. Una volta che l'esportatore è in esecuzione, puoi accedervi tramite http: // localhost: 9101 / metrics . Per due GPU, il risultato di esempio è simile al seguente:

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

è possibile utilizzare nvidia-smi pmon -i 0per monitorare ogni processo nella GPU 0. inclusa la modalità di calcolo, l'utilizzo di sm, l'utilizzo della memoria, l'utilizzo del codificatore, l'utilizzo del decodificatore.


0

È possibile utilizzare gli sguardi del programma di monitoraggio con il plug-in di monitoraggio della GPU :

  • open source
  • installare: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • lanciare: sudo glances

inserisci qui la descrizione dell'immagine

Monitora anche la CPU, l'IO del disco, lo spazio su disco, la rete e alcune altre cose:

inserisci qui la descrizione dell'immagine


0

Ho creato un file batch con il seguente codice in una macchina Windows per monitorare ogni secondo. Per me funziona.

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

nvidia-smi exe si trova in genere in "C: \ Programmi \ NVIDIA Corporation" se si desidera eseguire il comando una sola volta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.