CUDA를 사용하는 GPU에 대한 top 명령


127

cuda 및 MPI를 사용하는 프로세스를 모니터링하려고합니다. 이렇게 할 수있는 방법이 있습니까? "top"명령과 같은 것이지만 GPU도 모니터링합니까?


2
nvtop도있다 github.com/Syllo/nvtop
konvas

"엔비디아 SMI PMON -i 0"엔비디아 GPU 0에서 실행중인 모든 프로세스를 모니터링 할 수 있습니다
changqi.xia

답변:


84

내가 찾을 수 gpustat 매우 유용합니다. In은와 함께 설치할 수 있으며 pip install gpustat프로세스 또는 사용자 별 사용 내역을 인쇄합니다.

여기에 이미지 설명 입력


4
넣은 후에 watch gpustat -cp는 통계를 계속 볼 수 있지만 색상이 사라집니다. 어떻게 고쳐 요? @Alleo
AbhimanyuAryan

1
@AbhimanyuAryan 사용 watch -c. @Roman Orac, 감사합니다. 파이썬에서 _curses를 가져 와서 오류가 발생했을 때 redhat 8에서도 저에게 효과적이었습니다.
Bobak Hashemi

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

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

4
gpustat에는 이제 --watch옵션이 있습니다.gpustat -cp --watch
jayelm

139

사용 된 리소스에 대한 실시간 통찰력을 얻으려면 다음을 수행하십시오.

nvidia-smi -l 1

이것은 매초마다 뷰를 반복하고 호출합니다.

콘솔 기록에서 루프 된 통화의 과거 추적을 유지하지 않으려면 다음을 수행 할 수도 있습니다.

watch -n0.1 nvidia-smi

여기서 0.1은 시간 간격 (초)입니다.

여기에 이미지 설명 입력


2
0.1 초마다 카드를 쿼리합니까? 카드에 부하를 줄까요? 또한 시계를 사용하여 0.1 초마다 새로운 프로세스를 시작합니다.
Mick T

@MickT 큰일인가요? Nvidia-smi에는이 건물 루프가 있습니다! "watch"명령이 nvidia-smi -l과 매우 다른가요?
Mohammad Javad

저급 카드에 이상한 잠금 기능이있는 것을 보았고 너무 많은 사용자가 카드에서 nvidia-smi를 실행했기 때문이라고 생각합니다. 매번 새로운 프로세스를 포크하지 않기 때문에 'nvidia-smi -l'을 사용하는 것이 더 좋은 방법이라고 생각합니다. 또한 0.1 초마다 카드를 확인하는 것은 과도합니다. 문제를 디버깅하려고 할 때 1 초마다 수행하고 그렇지 않으면 성능을 모니터링하기 위해 5 분마다 수행합니다. 도움이 되었기를 바랍니다. :)
Mick T

@Gulzar 네, 그렇습니다.
TrostAft

83

이 정보를 결합하는 것은 알지 못하지만 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 %

4
-l을 추가하면 GPU 및 메모리 사용률을 지속적으로 효과적으로 모니터링하여 업데이트 할 수 있습니다.
jmsu

6
실행할 때 GPU 유틸리티가 N / A 라고만 표시되면 어떻게합니까 ??
natorro

3
@natorro nVidia가 일부 카드에 대한 지원을 중단 한 것 같습니다. 이 링크를 확인하십시오 forums.nvidia.com/index.php?showtopic=205165
jmsu

29
내가 선호하는 watch -n 0.5 nvidia-smi출력 터미널을 작성 피할 수있는
ali_m

엔비디아 SMI PMON -i 0
changqi.xia

19

여기 에서 안정적인 최신 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 카드로 제한됩니다.


18

"--query-compute-apps ="인수 사용

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

추가 도움이 필요하면 다음을 따르십시오.

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

17

를 사용 watch nvidia-smi하면 기본적으로 2 초 간격으로 메시지가 출력됩니다.

예를 들어, 아래 이미지와 같이 :

여기에 이미지 설명 입력

watch -n 5 nvidia-smi(-n 5 x 5s 간격)을 사용할 수도 있습니다 .


16

또 다른 유용한 모니터링 접근 방식은 psGPU 를 사용 하는 프로세스를 필터링 하여 사용 하는 것입니다. 나는 이것을 많이 사용합니다.

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-smiGPU를 사용하는 주요 프로세스뿐만 아니라 프로세스 포크를 표시한다는 것입니다.

그러나 한 가지 단점은 명령을 실행하는 사용자가 소유 한 프로세스로 제한된다는 것입니다. 다른 사용자가 소유 한 모든 프로세스에를 열려면, 나는를 추가 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

2
또한없이 모든 사용자의 GPU를 차지 컴퓨팅 프로그램의 PID를 얻을 수있는 sudo이 같은를 :nvidia-smi --query-compute-apps=pid --format=csv,noheader
LENAR 호이트

1
때로는 nvidia-smi모든 프로세스를 나열하지 않으므로 거기에 나열되지 않은 프로세스에서 사용하는 메모리로 끝납니다. 이것이 제가 이러한 프로세스를 추적하고 종료 할 수있는 주요 방법입니다.
rand

1
@grisaitis Carefull, 나는 "Nvidia GPU"를 인식하지 않기 때문에 pmem주어진 psGPU의 총 메모리를 고려 ps하지 않고 CPU의 메모리를 고려 하지 않는다고 생각합니다
SebMa

10

nvtop널리 사용되는 htop도구 와 비슷 하지만 NVIDIA GPU 용 을 사용해 볼 수 있습니다 . 다음은 nvtop실제로 작동 하는 스크린 샷입니다 .

작동중인 nvtop의 스크린 샷


3

우아하지 않을 수도 있지만 시도해 볼 수 있습니다.

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

나는 또한 작동하는 @Edric의 방법을 시도했지만 nvidia-smi.


12
아니면 그냥 할 수 있습니다 nvidia-smi -l 2. 또는 반복되는 콘솔 출력을 방지하려면watch -n 2 'nvidia-smi'
grisaitis

3

GPU에서 실행중인 프로세스를 찾으려면 다음 명령을 사용하면됩니다.

lsof /dev/nvidia*

나를 위해 nvidia-smi그리고 watch -n 1 nvidia-smi대부분의 경우에 충분합니다. 때때로nvidia-smi 프로세스가 표시되지 않지만 GPU 메모리가 사용되므로 위의 명령을 사용하여 프로세스를 찾아야합니다.


2

Linux Mint 및 대부분의 경우 Ubuntu에서 "nvidia-smi --loop = 1"을 시도 할 수 있습니다.


0

프로 메테우스 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

0

nvidia-smi pmon -i 0컴퓨팅 모드, sm 사용량, 메모리 사용량, 인코더 사용량, 디코더 사용량을 포함하여 GPU 0의 모든 프로세스를 모니터링 하는 데 사용할 수 있습니다 .


0

GPU 모니터링 플러그인 과 함께 모니터링 프로그램 glances 를 사용할 수 있습니다 .

  • 오픈 소스
  • 설치하기 위해서: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • 개시하다: sudo glances

여기에 이미지 설명 입력

또한 CPU, 디스크 IO, 디스크 공간, 네트워크 및 기타 몇 가지 사항을 모니터링합니다.

여기에 이미지 설명 입력


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"에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.