top polecenie dla GPU używających CUDA


127

Próbuję monitorować proces, który używa cuda i MPI, czy jest jakiś sposób, bym mógł to zrobić, coś w rodzaju polecenia „top”, ale to też monitoruje GPU?


2
Jest też nvtop github.com/Syllo/nvtop
konvas

„nvidia-smi pmon -i 0” może monitorować cały proces działający na GPU nvidia 0
changqi.xia

Odpowiedzi:


84

Uważam, że gpustat jest bardzo przydatny. Program In można zainstalować za pomocą programu pip install gpustati wyświetla podział wykorzystania według procesów lub użytkowników.

wprowadź opis obrazu tutaj


4
po umieszczeniu watch gpustat -cpmożesz zobaczyć statystyki w sposób ciągły, ale kolory zniknęły. Jak to naprawić? @Alleo
AbhimanyuAryan,

1
@AbhimanyuAryan use watch -c. @Roman Orac, dziękuję, działało to również dla mnie na redhat 8, kiedy otrzymywałem błąd z powodu importowania _curses w Pythonie.
Bobak Hashemi

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

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

4
gpustat ma teraz --watchopcję:gpustat -cp --watch
jayelm

141

Aby uzyskać wgląd w używane zasoby w czasie rzeczywistym, wykonaj:

nvidia-smi -l 1

Spowoduje to zapętlenie i wywołanie widoku co sekundę.

Jeśli nie chcesz pozostawić śladów zapętlonego wywołania w historii konsoli, możesz również:

watch -n0.1 nvidia-smi

Gdzie 0,1 to przedział czasu w sekundach.

wprowadź opis obrazu tutaj


2
Pytanie o kartę co 0,1 sekundy? Czy to spowoduje obciążenie karty? Dodatkowo, korzystając z zegarka, rozpoczynasz nowy proces co 0,1 sekundy.
Mick T

@MickT Czy to wielka sprawa? Ponieważ Nvidia-smi ma tę pętlę budowania! Czy polecenie „watch” różni się bardzo od polecenia nvidia-smi -l?
Mohammad Javad

Być może widziałem, że karty z niższej półki mają dziwne blokady i myślę, że dzieje się tak dlatego, że zbyt wielu użytkowników używało nvidia-smi na kartach. Myślę, że użycie 'nvidia-smi -l' jest lepszym sposobem, ponieważ nie tworzysz nowego procesu za każdym razem. Ponadto sprawdzanie karty co 0,1 sekundy jest przesadą, robiłbym co sekundę, gdy próbuję debugować problem, w przeciwnym razie robię co 5 minut, aby monitorować wydajność. Mam nadzieję że to pomogło! :)
Mick T

@Gulzar tak, jest.
TrostAft

83

Nie znam niczego, co łączy te informacje, ale możesz użyć nvidia-sminarzędzia, aby uzyskać surowe dane, na przykład (dzięki @jmsu za wskazówkę na -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
Myślę, że jeśli dodasz do tego -l, otrzymasz aktualizację w sposób ciągły, efektywny monitoring GPU i wykorzystania pamięci.
jmsu

6
Co się stanie, jeśli po uruchomieniu go użycie GPU wyświetli komunikat „N / A”?
natorro

3
@natorro Wygląda na to, że nVidia porzuciła obsługę niektórych kart. Sprawdź ten link forums.nvidia.com/index.php?showtopic=205165
jmsu

29
Wolę watch -n 0.5 nvidia-smi, co pozwala uniknąć wypełniania terminala danymi wyjściowymi
ali_m

nvidia-smi pmon -i 0
changqi.xia

19

Pobierz i zainstaluj najnowszy stabilny sterownik CUDA (4.2) stąd . W systemie Linux nVidia-smi 295.41 zapewnia dokładnie to, czego chcesz. zastosowanie 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  |
+-----------------------------------------------------------------------------+

EDYCJA: W najnowszych sterownikach NVIDIA ta obsługa jest ograniczona do kart Tesla.


18

Użyj argumentu "--query-compute-apps ="

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

aby uzyskać dalszą pomoc, postępuj zgodnie z

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

17

Po prostu użyj watch nvidia-smi, domyślnie wyświetli wiadomość co 2 sekundy.

Na przykład, jak na poniższym obrazku:

wprowadź opis obrazu tutaj

Możesz również użyć watch -n 5 nvidia-smi(-n 5 na 5s interwał).


16

Innym użytecznym podejściem do monitorowania jest psfiltrowanie procesów, które zużywają Twoje GPU. Używam tego często:

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

To pokaże wszystkie procesy wykorzystujące GPU nvidia i niektóre statystyki na ich temat. lsof ...pobiera listę wszystkich procesów korzystających z procesora graficznego nvidia należącego do bieżącego użytkownika i ps -p ...wyświetla pswyniki dla tych procesów. ps fpokazuje ładne formatowanie relacji / hierarchii procesów potomnych / nadrzędnych i -ookreśla niestandardowe formatowanie. To jest podobne do zwykłego robienia, ps uale dodaje identyfikator grupy procesów i usuwa niektóre inne pola.

Jedną z zalet tego rozwiązania nvidia-smijest to, że pokazuje rozwidlenia procesów, a także główne procesy korzystające z GPU.

Jedną z wad jest jednak to, że ogranicza się do procesów należących do użytkownika, który wykonuje polecenie. Aby otworzyć go dla wszystkich procesów należących do dowolnego użytkownika, dodaję sudoprzed rozszerzeniem lsof.

Na koniec łączę to z, watchaby uzyskać ciągłą aktualizację. Ostatecznie wygląda to tak:

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

Który ma dane wyjściowe:

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
Możesz również pobrać PID programów obliczeniowych, które zajmują GPU wszystkich użytkowników bez sudotego:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
Czasami nvidia-sminie wyświetla wszystkich procesów, więc Twoja pamięć jest używana przez procesy, których tam nie ma. To jest główny sposób, w jaki mogę śledzić i zabijać te procesy.
rand

1
@grisaitis Ostrożnie, nie sądzę, że pmempodana wartość psbierze pod uwagę całkowitą pamięć GPU, ale pamięć procesora, ponieważ psnie jest świadomy "GPU Nvidia"
SebMa

10

Możesz spróbować nvtop, który jest podobny do powszechnie używanego htopnarzędzia, ale dla procesorów graficznych NVIDIA. Oto zrzut ekranu nvtopprzedstawiający to w akcji.

Zrzut ekranu przedstawiający nvtop w akcji


3

To może nie być eleganckie, ale możesz spróbować

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

Wypróbowałem też metodę @Edric, która działa, ale wolę oryginalny układ nvidia-smi.


12
Albo możesz po prostu to zrobić nvidia-smi -l 2. Albo żeby zapobiec powtarzaniu się konsoli,watch -n 2 'nvidia-smi'
grisaitis

3

Jeśli chcesz tylko znaleźć proces działający na gpu, możesz po prostu użyć następującego polecenia:

lsof /dev/nvidia*

Jak dla mnie nvidia-smiiw watch -n 1 nvidia-smiwiększości przypadków wystarczą. Czasami nvidia-sminie pokazuje żadnego procesu, ale pamięć GPU jest zużyta, więc muszę użyć powyższego polecenia, aby znaleźć procesy.


2

W Linux Mint i najprawdopodobniej Ubuntu możesz wypróbować „nvidia-smi --loop = 1”


0

Istnieje Prometheus GPU Metrics Exporter (PGME), który wykorzystuje plik binarny nvidai-smi. Możesz to wypróbować. Po uruchomieniu eksportera możesz uzyskać do niego dostęp przez http: // localhost: 9101 / metrics . Przykładowy wynik dla dwóch procesorów graficznych wygląda następująco:

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

możesz użyć nvidia-smi pmon -i 0do monitorowania każdego procesu w GPU 0. włączając tryb obliczeniowy, użycie sm, użycie pamięci, użycie kodera, użycie dekodera.


0

Możesz użyć skrótu do programu monitorującego z jego wtyczką do monitorowania GPU :

  • otwarte źródło
  • żeby zainstalować: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • Wystrzelić: sudo glances

wprowadź opis obrazu tutaj

Monitoruje również procesor, IO dysku, miejsce na dysku, sieć i kilka innych rzeczy:

wprowadź opis obrazu tutaj


0

Utworzyłem plik wsadowy z następującym kodem na komputerze z systemem Windows do monitorowania co sekundę. Mi to pasuje.

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

nvidia-smi exe zwykle znajduje się w „C: \ Program Files \ NVIDIA Corporation”, jeśli chcesz uruchomić polecenie tylko raz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.