Skip to content

Commit da09f6b

Browse files
committed
Write Linux Post " Linux 환경에서 nvidia-smi 명령어 알아보기 "
1 parent 2aefb82 commit da09f6b

File tree

6 files changed

+163
-0
lines changed

6 files changed

+163
-0
lines changed
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
---
2+
layout: post
3+
title: " Linux 환경에서 nvidia-smi 명령어 알아보기 "
4+
categories: [Linux]
5+
author: devFancy
6+
---
7+
* content
8+
{:toc}
9+
10+
## Prologue
11+
12+
실무에서 GPU를 사용하면서 관련 명령어인 nvidia-smi 에 대해 공식문서를 바탕으로 정리하고자 이 글을 작성하게 되었다.
13+
14+
`nvidia-smi` 는 NVIDIA System Management Interface의 약자로, NVIDIA GPU의 상태를 모니터링하고 관리하는 데 사용되는 명령어이다.
15+
16+
딥러닝 등 GPU를 사용하는 환경에서는 필수적인 도구 중 하나이다.
17+
18+
19+
## nvidia-smi 개념 및 출력 정보
20+
21+
터미널에 `nvidia-smi` 를 입력하면 현재 시스템에 설치된 모든 NVIDIA GPU의 상태 요약 정보를 볼 수 있다.
22+
23+
![](/assets/img/linux/Linux-Nvidia-Smi.png)
24+
25+
각 항목의 의미는 다음과 같다.
26+
27+
* `Driver Version`: 설치된 NVIDIA 드라이버 버전
28+
* `CUDA Version`: 설치된 CUDA 버전
29+
* `GPU`: GPU의 인덱스 (0부터 시작)
30+
* `Fan`: 팬 속도 (%)
31+
* `Name`: GPU 모델명
32+
* `Temp`: GPU 온도 (섭씨)
33+
* `Perf`: 성능 상태 (Performance State). P0(최고 성능)부터 P8(최저 성능, 유휴 상태)까지 있다.
34+
* `Pwr:Usage/Cap`: 현재 소비 전력 / 설정된 최대 전력 용량 (W)
35+
* `Memory-Usage`: **사용 중인 GPU 메모리** / 전체 GPU 메모리
36+
* `GPU-Util`: **GPU 사용률 (%)**
37+
* `Compute M.`: 컴퓨트 모드 (Default, Exclusive_Process 등)
38+
* `Processes`: 현재 GPU를 사용하고 있는 프로세스 목록
39+
40+
## 주요 명령어 옵션
41+
42+
> 보다 자세한 내용은 [공식문서](https://docs.nvidia.com/deploy/nvidia-smi/index.html) 를 참고하자.
43+
44+
`nvidia-smi`는 다양한 옵션을 통해 원하는 정보만 보거나 GPU 설정을 변경할 수 있다.
45+
46+
### 목록 및 기본 옵션
47+
48+
* `-L` 또는 `--list-gpus`
49+
* 시스템에 설치된 모든 GPU의 목록과 각 GPU의 고유 식별자(UUID)를 간단히 보여준다.
50+
* 명령어: nvidia-smi -L
51+
52+
* `-h` 또는 `--help`
53+
* 사용 가능한 모든 명령어와 옵션에 대한 도움말을 보여준다.
54+
55+
### 쿼리(조회) 옵션
56+
57+
* `-q` 또는 `--query`
58+
* 모든 GPU의 상세 정보를 출력한다.
59+
* 기본 `nvidia-smi` 명령어보다 훨씬 자세한 정보를 보여준다.
60+
61+
* `-i, --id=ID`
62+
* 특정 GPU를 지정하여 정보를 조회한다. ID는 GPU 인덱스(0, 1, ...), UUID, PCI 버스 ID 등으로 지정할 수 있다.
63+
* 명령어: nvidia-smi -q -i 0 // 0번 GPU의 상세 정보 조회
64+
65+
* `-l SEC`, `--loop=SEC`
66+
* 지정한 시간(초) 간격으로 정보를 계속해서 업데이트하며 보여준다. `Ctrl+C`를 누르면 종료된다. `watch` 명령어와 유사한 기능
67+
* 명령어: nvidia-smi -l 2 -i 0 // 2초마다 0번 GPU의 상태를 갱신
68+
69+
### 장치 변경 옵션
70+
71+
대부분의 옵션은 `root` 권한(sudo)이 필요하며, 시스템에 직접적인 영향을 줄 수 있으므로 신중하게 사용해야 한다.
72+
73+
* `pm, --persistence-mode=MODE`
74+
* Persistence Mode(지속성 모드)를 설정합니다. `1` 또는 `Enabled`로 설정하면 GPU를 사용하는 프로세스가 없어도 드라이버를 메모리에 계속 상주시켜, CUDA 애플리케이션 실행 시 드라이버 로딩 시간을 단축한다.
75+
* 명령어: `sudo nvidia-smi -pm 1` // 모든 GPU에 지속성 모드 활성화
76+
77+
* `pl, --power-limit=POWER_LIMIT`
78+
* GPU의 **최대 소비 전력(Power Limit)**을 와트(W) 단위로 설정한다. GPU의 발열이나 전력 소모를 제어해야 할 때 유용하다.
79+
* 명령어: `sudo nvidia-smi -i 0 -pl 300` // 0번 GPU의 최대 전력을 300W로 제한
80+
81+
## 실제 예시
82+
83+
> 실시간 GPU 상태 모니터링
84+
85+
`nvidia-smi`는 특정 시점의 GPU 상태를 보여주기 때문에, 시간에 따른 변화를 관찰하려면 주기적으로 명령어를 실행해야 한다.
86+
87+
이때 리눅스의 `watch` 명령어를 사용하면 된다.
88+
89+
`watch`는 뒤따르는 명령어를 지정한 시간 간격으로 반복 실행하여 결과를 계속 갱신해주는 도구이다.
90+
91+
```bash
92+
watch -d -n 1 nvidia-smi
93+
```
94+
95+
![](/assets/img/linux/Linux-Nvidia-Smi-watch.png)
96+
97+
* `watch`: 명령어를 주기적으로 실행한다.
98+
* `-n 1`: 1초 간격으로 실행한다.
99+
* `-d`: 이전 실행 결과와 달라진 부분을 하이라이트로 표시해준다.
100+
101+
주로 모델 학습이나 성능 테스트 중 GPU가 의도대로 잘 동작하는지 확인할 때 유용하다.
102+
103+
104+
> 특정 GPU의 메모리, 사용률, 온도 확인
105+
106+
```bash
107+
nvidia-smi -q -i 0 -d MEMORY,UTILIZATION,TEMPERATURE -l 10
108+
```
109+
110+
* 0번 GPU 에 대해 원하는 핵심 지표들만 10초마다 모니터링한다. (아래는 주요 값만 정리했다)
111+
112+
* 메모리 (FB Memory Usage): GPU 메모리(VRAM)는 딥러닝 모델, 학습 데이터 등 실제 작업에 필요한 모든 것을 올려두는 작업 공간이다. 이 수치를 통해 메모리가 부족하지는 않은지 확인할 수 있다.
113+
114+
![](/assets/img/linux/Linux-Nvidia-Smi-memory.png)
115+
116+
* `Total`: GPU의 전체 메모리 용량이다.
117+
118+
* `Used`: 현재 애플리케이션이 사용 중인 메모리 양이다. 이 수치가 `Total`에 가까워지면 'Out of Memory' 에러가 발생할 수 있다.
119+
120+
* `Free`: 앞으로 더 사용할 수 있는 남은 메모리 양이다.
121+
122+
* 사용률 (Utilization): GPU의 각 부분이 얼마나 활발하게 일하고 있는지를 나타낸다. GPU가 일을 제대로 하고 있는지, 아니면 병목 현상이 있는지 파악하는 핵심 지표이다.
123+
124+
![](/assets/img/linux/Linux-Nvidia-Smi-utilization.png)
125+
126+
* `Gpu`: GPU의 핵심 연산 장치(코어)가 실제로 계산 작업을 처리하는 비율이다.
127+
128+
* `Memory`: GPU 메모리 컨트롤러의 사용률이다. 데이터를 메모리에서 읽고 쓰는 작업이 얼마나 활발한지를 보여준다.
129+
130+
* 온도 (Temperature)
131+
132+
![](/assets/img/linux/Linux-Nvidia-Smi-temperature.png)
133+
134+
* `GPU`: GPU 칩의 현재 온도이다. 일반적으로 유휴 상태에서는 30~50°C, 작업 시에는 70~85°C 사이를 유지한다. 90°C를 넘어가면 성능 저하(Throttling)가 발생하거나 하드웨어 수명에 영향을 줄 수 있다.
135+
136+
* `GPU Shutdown Temp`: GPU가 과열로 인한 손상을 막기 위해 자동으로 꺼지는 온도
137+
138+
* `GPU Slowdown Temp`: GPU가 성능을 스스로 낮추기 시작하는 온도
139+
140+
> GPU를 사용하는 프로세스 ID(PID)와 메모리 사용량 확인
141+
142+
```bash
143+
nvidia-smi --query-compute-apps=pid,used_memory --format=csv
144+
## 결과
145+
pid, used_gpu_memory [MiB]
146+
562760, 3658 MiB
147+
```
148+
149+
* 현재 GPU에서 실행 중인 프로세스의 PID와 메모리 사용량을 CSV 형식으로 출력하여 다른 스크립트에서 활용하기 좋다.
150+
151+
---
152+
153+
## Review
154+
155+
지금까지 `nvidia-smi` 명령어의 기본적인 개념과 실무에서 유용한 활용 예시를 살펴보았다.
156+
157+
이 외에 다른 명령어 옵션들에 대해서는 아래 공식문서와 다른 사이트를 참고하자.
158+
159+
## References
160+
161+
* [[공식문서] nvidia-smi](https://docs.nvidia.com/deploy/nvidia-smi/index.html)
162+
163+
* [Displaying Full GPU Details With nvidia-smi](https://www.baeldung.com/linux/nvidia-smi-full-gpu-details)
46.6 KB
Loading
40.2 KB
Loading
20.2 KB
Loading
136 KB
Loading
123 KB
Loading

0 commit comments

Comments
 (0)