cuda 및 MPI를 사용하는 프로세스를 모니터링하려고합니다. 이렇게 할 수있는 방법이 있습니까? "top"명령과 같은 것이지만 GPU도 모니터링합니까?
cuda 및 MPI를 사용하는 프로세스를 모니터링하려고합니다. 이렇게 할 수있는 방법이 있습니까? "top"명령과 같은 것이지만 GPU도 모니터링합니까?
답변:
내가 찾을 수 gpustat 매우 유용합니다. In은와 함께 설치할 수 있으며 pip install gpustat
프로세스 또는 사용자 별 사용 내역을 인쇄합니다.
watch gpustat -cp
는 통계를 계속 볼 수 있지만 색상이 사라집니다. 어떻게 고쳐 요? @Alleo
watch -c
. @Roman Orac, 감사합니다. 파이썬에서 _curses를 가져 와서 오류가 발생했을 때 redhat 8에서도 저에게 효과적이었습니다.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
옵션이 있습니다.gpustat -cp --watch
nvidia-smi -l 1
이것은 매초마다 뷰를 반복하고 호출합니다.
콘솔 기록에서 루프 된 통화의 과거 추적을 유지하지 않으려면 다음을 수행 할 수도 있습니다.
watch -n0.1 nvidia-smi
여기서 0.1은 시간 간격 (초)입니다.
이 정보를 결합하는 것은 알지 못하지만 nvidia-smi
도구를 사용 하여 원시 데이터를 가져올 수 있습니다 (-l에 대한 팁에 대해 @jmsu에게 감사드립니다).
$ 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
출력 터미널을 작성 피할 수있는
여기 에서 안정적인 최신 CUDA 드라이버 (4.2)를 다운로드하여 설치 합니다 . Linux에서 nVidia-smi 295.41은 원하는 것을 제공합니다. 사용 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 |
+-----------------------------------------------------------------------------+
편집 : 최신 NVIDIA 드라이버에서이 지원은 Tesla 카드로 제한됩니다.
또 다른 유용한 모니터링 접근 방식은 ps
GPU 를 사용 하는 프로세스를 필터링 하여 사용 하는 것입니다. 나는 이것을 많이 사용합니다.
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
그러면 모든 nvidia GPU 활용 프로세스와 이에 대한 몇 가지 통계가 표시됩니다. lsof ...
현재 사용자가 소유 한 nvidia GPU를 사용하여 모든 프로세스 목록을 검색하고 해당 프로세스에 대한 결과를 ps -p ...
표시 ps
합니다. ps f
자식 / 부모 프로세스 관계 / 계층에 대한 멋진 형식을 표시 -o
하고 사용자 지정 형식을 지정합니다. 그건 그냥하는 것과 비슷합니다ps u
하지만 프로세스 그룹 ID를 추가하고 다른 필드를 제거합니다.
이것의 한 가지 장점은 nvidia-smi
GPU를 사용하는 주요 프로세스뿐만 아니라 프로세스 포크를 표시한다는 것입니다.
그러나 한 가지 단점은 명령을 실행하는 사용자가 소유 한 프로세스로 제한된다는 것입니다. 다른 사용자가 소유 한 모든 프로세스에를 열려면, 나는를 추가 sudo
전과 lsof
.
마지막으로 watch
계속 업데이트하기 위해 함께 결합합니다 . 따라서 결국 다음과 같이 보입니다.
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
다음과 같은 출력이 있습니다.
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
이 같은를 :nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
모든 프로세스를 나열하지 않으므로 거기에 나열되지 않은 프로세스에서 사용하는 메모리로 끝납니다. 이것이 제가 이러한 프로세스를 추적하고 종료 할 수있는 주요 방법입니다.
pmem
주어진 ps
GPU의 총 메모리를 고려 ps
하지 않고 CPU의 메모리를 고려 하지 않는다고 생각합니다
이 프로 메테우스 GPU 메트릭 수출 (PGME) nvidai-SMI 바이너리를 활용합니다. 이것을 시도해 볼 수 있습니다. 내보내기가 실행되면 http : // localhost : 9101 / metrics 를 통해 액세스 할 수 있습니다 . 두 GPU의 경우 샘플 결과는 다음과 같습니다.
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
nvidia-smi pmon -i 0
컴퓨팅 모드, sm 사용량, 메모리 사용량, 인코더 사용량, 디코더 사용량을 포함하여 GPU 0의 모든 프로세스를 모니터링 하는 데 사용할 수 있습니다 .
매초 모니터링하기 위해 Windows 시스템에서 다음 코드로 배치 파일을 만들었습니다. 그것은 나를 위해 작동합니다.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe는 명령을 한 번만 실행하려는 경우 일반적으로 "C : \ Program Files \ NVIDIA Corporation"에 있습니다.