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?
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?
Odpowiedzi:
Uważam, że gpustat jest bardzo przydatny. Program In można zainstalować za pomocą programu pip install gpustat
i wyświetla podział wykorzystania według procesów lub użytkowników.
watch gpustat -cp
możesz zobaczyć statystyki w sposób ciągły, ale kolory zniknęły. Jak to naprawić? @Alleo
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.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
opcję:gpustat -cp --watch
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.
Nie znam niczego, co łączy te informacje, ale możesz użyć nvidia-smi
narzę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 %
watch -n 0.5 nvidia-smi
, co pozwala uniknąć wypełniania terminala danymi wyjściowymi
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.
Innym użytecznym podejściem do monitorowania jest ps
filtrowanie 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 ps
wyniki dla tych procesów. ps f
pokazuje ładne formatowanie relacji / hierarchii procesów potomnych / nadrzędnych i -o
określa niestandardowe formatowanie. To jest podobne do zwykłego robienia, ps u
ale dodaje identyfikator grupy procesów i usuwa niektóre inne pola.
Jedną z zalet tego rozwiązania nvidia-smi
jest 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ę sudo
przed rozszerzeniem lsof
.
Na koniec łączę to z, watch
aby 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
sudo
tego:nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
nie 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.
pmem
podana wartość ps
bierze pod uwagę całkowitą pamięć GPU, ale pamięć procesora, ponieważ ps
nie jest świadomy "GPU Nvidia"
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
.
nvidia-smi -l 2
. Albo żeby zapobiec powtarzaniu się konsoli,watch -n 2 'nvidia-smi'
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-smi
iw watch -n 1 nvidia-smi
większości przypadków wystarczą. Czasami nvidia-smi
nie pokazuje żadnego procesu, ale pamięć GPU jest zużyta, więc muszę użyć powyższego polecenia, aby znaleźć procesy.
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
możesz użyć nvidia-smi pmon -i 0
do 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.
Możesz użyć skrótu do programu monitorującego z jego wtyczką do monitorowania GPU :
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
Monitoruje również procesor, IO dysku, miejsce na dysku, sieć i kilka innych rzeczy:
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.