|
| 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 | + |
| 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 | + |
| 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 | +  |
| 115 | + |
| 116 | + * `Total`: GPU의 전체 메모리 용량이다. |
| 117 | + |
| 118 | + * `Used`: 현재 애플리케이션이 사용 중인 메모리 양이다. 이 수치가 `Total`에 가까워지면 'Out of Memory' 에러가 발생할 수 있다. |
| 119 | + |
| 120 | + * `Free`: 앞으로 더 사용할 수 있는 남은 메모리 양이다. |
| 121 | + |
| 122 | + * 사용률 (Utilization): GPU의 각 부분이 얼마나 활발하게 일하고 있는지를 나타낸다. GPU가 일을 제대로 하고 있는지, 아니면 병목 현상이 있는지 파악하는 핵심 지표이다. |
| 123 | + |
| 124 | +  |
| 125 | + |
| 126 | + * `Gpu`: GPU의 핵심 연산 장치(코어)가 실제로 계산 작업을 처리하는 비율이다. |
| 127 | + |
| 128 | + * `Memory`: GPU 메모리 컨트롤러의 사용률이다. 데이터를 메모리에서 읽고 쓰는 작업이 얼마나 활발한지를 보여준다. |
| 129 | + |
| 130 | + * 온도 (Temperature) |
| 131 | + |
| 132 | +  |
| 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) |
0 commit comments