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 gpustati wyświetla podział wykorzystania według procesów lub użytkowników.
watch gpustat -cpmoż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
--watchopcję: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-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 %
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 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
sudotego:nvidia-smi --query-compute-apps=pid --format=csv,noheader
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.
pmempodana wartość psbierze pod uwagę całkowitą pamięć GPU, ale pamięć procesora, ponieważ psnie 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-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.
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 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.
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 glancesMonitoruje 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.