[딥러닝] NVIDIA GPU 보는법(nvidia-smi)

JAEYOON SIM·2022년 2월 18일
12

et cetera

목록 보기
1/7
post-thumbnail

nvidia-smi

NVIDIA의 GPU는 많은 양의 연산을 빠르게 처리해줄 수 있기에 많은 연산량의 딥러닝을 하고자할 때 반드시 필요하다. 이를 사용하기 위해서는 nvidia에서 제공하는 GPU driver를 OS에 맞게 설치해줘야 한다. GPU driver 설치 후에 이러한 정보를 확인할 수 있도록 도와주는 명령어가 바로 nvidia-smi이다. GPU의 상태를 확인하기 위해서 nvidia-smi를 입력하여 자세하게 확인해보고자 한다.

$ nvidia-smi

nvidia-smi를 입력하면 위와 같은 블록 형태의 문자들과 숫자들이 나타나는 것을 확인할 수 있다. 그리고 위는 GPU를 사용하지 않는 상태이고 다음은 GPU를 이용해서 연산 처리를 할 때의 상태이다. 숫자의 변화가 있는 것을 알 수 있는데 각 숫자들이 의미하는 바가 무엇인지 알아보도록 할 것이다.
1. Driver Version 470.103.01: 현재 설치되어 사용하고 있는 nvidia GPU의 driver version이다.

2. CUDA Version 11.4: 현재 사용하고 있는 driver와 호환이 잘 되는 CUDA의 version으로, 이는 추천해주는 것뿐이라서 현재 설치되어 사용하고 있는 CUDA의 version을 이야기하는 것이 아니다.

3. GPU Fan 0 48%: 현재 설치되어 있는 GPU의 번호(0~7)와 fan이 장착되어 있는 GPU의 fan 성능을 %로 나타낸 것이다.(Tesla 계열의 GPU는 fan이 없어 N/A(Not Available)로 표기)

4-1. Name NVIDA RTX A6000: GPU의 model명을 나타낸 것이다.
4-2. Temp 70C: 현재 GPU의 현재 온도를 섭씨로 표기한 것이다. GPU의 온도가 일정치를 넘어가면 성능이 떨어지게 된다. 보통 70도에서 80도 사이가 적당한 온도이다.
4-3. Perf P2: Performance의 약자로 P0부터 P12까지 존재한다. 숫자가 작아질수록 GPU의 performance가 좋은 상태를 나타낸다.
4-4. Persistence-M Off: Persistence-Mode로 on-mode와 off-mode가 존재한다. 기본적으로 default mode는 off이며, on-mode가 되면 power limit을 설정할 수 있다. 즉, power를 얼마나 지속할지 정해줄 수가 있다. GPU 사용시에 지연 시간을 아끼는 장점이 존재하지만, 전력을 더 낭비하는 단점이 존재한다.
4-5. Pwr:Usage/Cap 192W /300W: GPU의 현재 전력의 사용량과 최대 용량을 나타낸 것이다.

5-1. Bus-ID 00000000:1B:00.0: Main board마다 가지고 있는 PCI slot에 부여된 Bus-ID이다. 이를 통해서 사용하는 GPU 번호와 main board의 PCI slot을 매칭시킬 수 있다.(중요!)
5-2. Disp.A off: Linux 설치 시에 Desktop version과 Server version이 존재한다. Desktop version의 경우 화면 출력을 GPU card로 하는 것이 좋고 기본적으로 off이지만 모니터를 연결한 출력 포트의 GPU의 경우 on이 되어 GPU card에 출력이 되고 있음을 의미한다.
5-3. Memory-Usage 21787MiB / 48682MiB: 현재 사용하고 있는 GPU의 memory와 GPU의 총 memory를 나타낸 것으로, GPU마다 memory의 크기가 다르다.
(MiB는 Mebibyte의 약자로 다른 말로는 Mega binary byte가 있다. 우리가 흔히 아는 MB는 Megabyte의 약자로 1,000,000 Byte를 의미하지만, 실제로 1MB memory는 정확하게는 1,048,576 Byte이다. 그래서 보통 2진법 값들을 나타내어 혼돈을 막고자 사이에 "i"를 추가하여 2진법으로 나타낸 것이다. Mega는 1,00021,000^2이고 Mebi는 1,02421,024^2인 셈이다.)

6-1. GPU-Util 70%: GPU의 현재 성능을 나타낸 것으로 100%의 성능 중 얼마만큼 사용하고 있는지를 나타내고 있다. 즉, 현재 해당 GPU의 사용량을 나타낸 것이다.
6-2. Volatile Uncorr.ECC off: on인 상태에서는 error count가 발생해서 0에서 점점 숫자가 증가하게 된다. 이러한 경우에는 system hang이 발생해서 동작하지 않고 응답하지 않는 상태가 되어 system 운영이 불가능한 상태가 된다. 그래서 보통은 off로 설정해서 작업을 한다.
6-3. Compute M. off: Compute-Mode를 보여주고 있는 것으로 Default는 0번이 된다. 1번은 exclusive thread mode, 2번은 prohibited mode, 3번은 exclusive process mode를 의미한다.
6-4. MIG M. N/A: NVIDIA GPU를 slice하는 기능으로, MIG M은 MIG-Mode의 약자이고 MIG는 Multi-Instance GPU의 약자이다. CUDA application을 실행시 최대 7개의 개별 GPU instance로 안전하게 분할하여 여러 사용자에게 별도의 GPU를 제공하여 작업을 가속화하는데 도움을 준다. 여러개의 instance를 지원하는 MIG는 오로지 NVIDIA A100 모델에서만 지원이되고 이외에도 필요조건이 존재한다.

GPU 0~7번까지의 process ID 등 현재 사용중인 정보들을 보여주고 있다.

  • Type(G/C): 2가지 type모두 GPU에 관련된 것이다.
    (1) G = Graphcis의 G로 그래픽을 사용하거나 video rendering을 위한 전문가용 3D 그래픽, 게임 등에서 사용되는 NVIDIA GPU의 graphic-mode를 사용하는 process를 의미한다.
    (2) C = Compute의 C로 CUDA library를 사용하는 NVIDIA GPU의 compute-mode를 사용하는 process를 의미한다. Tensorflow나 Pytorch 등을 사용하는 deep learning의 학습과 테스트하는데 사용된다.
    (3) C+G = Compute+Graphic을 합친 것으로 compute-mode와 graphic-mode를 함께 사용하는 process를 의미한다.

nvidia-smi Live Memory Check

GPU를 이용해서 작업을 하다보면 "out of memory"가 떠서 문제가 되는 경우가 있다. 이를 방지하고자 실시간으로 GPU의 현재 memory 상황을 보고 싶을 때는 watch 명령어를 이용해서 다음과 같이 입력하면 된다.

$ watch -n 1 nvidia-smi

-n 뒤의 숫자는 시간 간격을 의미하며, 1을 입력하게 되면 1초마다 갱신하면서 보겠다는 이야기다.

$ watch -d -n 1 nvidia-smi

또 많이 사용하는 옵션으로는 -d가 있다. 이는 실시간으로 보여주면서 업데이트 사이마다 변경되는 부분에는 하이라이트를 해주는 옵션이다.
자세히보면 원하는 시간을 설정해 업데이트가 될 때마다 변하는 값에 하이라이트가 되어있는 것을 확인할 수 있다.

profile
평범한 공대생의 일상 (글을 잘 못 쓰는 사람이라 열심히 쓰려고 노력 중입니다^^)

8개의 댓글

comment-user-thumbnail
2022년 6월 8일

감사합니다!! 덕분에 도움을 많이 받았어요!! :)

1개의 답글
comment-user-thumbnail
2022년 8월 7일

안녕하세요! 포스트 잘 봤습니다 감사해요! 혹시 graphics mode의 프로세스에 대해 gpu id를 설정하는 방법을 아시나요? CUDA_VISIBLE_DEVICES를 설정해도 compute mode의 프로세스들은 원하는 gpu에 할당되는데 graphics mode 프로세스들은 모두 gpu 0만 사용하더라고요 :(

답글 달기
comment-user-thumbnail
2022년 10월 5일

포스트 잘 봤습니다 :)
요새 gpu관련 설정을 하고있는데, 질문 하나 드려도 될까요?
<질문>
Process에 있는 여러 프로세스 들에서 gpu usage가 다 n/a(not available)로 뜨면 gpu 사용을 잘 못하고 있는건가요?
파이썬 코드를 돌리면 process에 올라가긴 하고 process 위에 있는 gpu memory usage도 올라가는데 프로세스별 memory usage는 다 n/a로 뜨네요ㅜ

답글 달기
comment-user-thumbnail
2023년 9월 25일

감사합니다. 혹시 제 벨로그에서 링크 걸고 해당 내용을 좀 가져가도 괜찮을까요?

답글 달기
comment-user-thumbnail
2023년 9월 27일

크으... 장비가 너무 탐납니다.. 너무 좋은 글 잘 읽었습니다!

답글 달기
comment-user-thumbnail
2024년 2월 22일

gpu 자식이 도대체 돌아가는지 안돌아가는지 눈치도 없이 싸가지없게 굴길래 혼내주려고 찾아봤다가 잘 보고갑니다!!!!

답글 달기
comment-user-thumbnail
2024년 4월 14일

매번 잘 모르고 gpu 메모리 사용량만 봤었는데 감사합니다 ㅎㅎ

답글 달기