가이드 · 시작하기

nvidia-smi 사용법과 출력 보는 법

nvidia-smi는 NVIDIA 드라이버와 함께 설치되는 GPU 상태 확인 도구예요. 그냥 실행하면 GPU별 메모리 사용량, GPU-Util, 온도, 전력과 GPU를 쓰는 프로세스를 한 화면에 보여 줘요.

업데이트
읽는 시간
약 12분

기본 출력 한눈에 보기

위쪽 표는 GPU별 상태, 아래쪽 표는 GPU를 쓰는 프로세스예요. GPU가 여러 장이면 위쪽 표에 GPU마다 한 칸씩 늘어나요.

text
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3090        On  |   00000000:01:00.0 Off |                  N/A |
| 45%   63C    P2            285W /  350W |   18432MiB /  24576MiB |     97%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A     12345      C   python                                      18420MiB |
+-----------------------------------------------------------------------------------------+
RTX 3090에서 학습 중일 때의 예시예요. 숫자와 표 모양은 드라이버 버전에 따라 조금씩 달라요.

Driver Version과 CUDA Version의 뜻

맨 윗줄의 Driver Version은 설치된 드라이버 버전이에요. 옆의 CUDA Version은 설치된 CUDA Toolkit 버전이 아니라 이 드라이버가 지원하는 가장 높은 CUDA 버전이에요.

그래서 CUDA Version: 12.4로 나와도 서버에 CUDA Toolkit이 없을 수 있어요. PyTorch는 자체 CUDA 런타임을 포함하고 있어서 Toolkit 없이도 GPU를 써요. 실제로 쓰는 버전은 따로 확인하세요.

bash
nvcc --version                                       # 설치된 CUDA Toolkit 버전
python -c "import torch; print(torch.version.cuda)"  # PyTorch가 빌드된 CUDA 버전

두 명령이 보여 주는 버전이 드라이버의 CUDA Version보다 낮거나 같으면 보통 괜찮고, 높으면 GPU를 인식하지 못하는 등 문제가 생길 수 있어요. 자세한 내용은 CUDA 버전 확인하는 법을 보세요.

GPU 상태 항목의 뜻

자주 보는 GPU 항목
항목뜻과 볼 때 참고할 점
GPU, NameGPU 번호(0부터)와 모델명이에요.
Memory-Usage사용 중인 VRAM과 전체 VRAM이에요. 프로세스가 확보만 해 둔 메모리까지 포함해요.
GPU-Util최근 측정 구간 중 GPU에서 작업이 하나라도 실행된 시간의 비율이에요. 연산 자원을 얼마나 쓰는지를 뜻하지는 않아요.
Temp, FanGPU 온도(섭씨)와 팬 속도예요. 높은 온도가 이어지면 GPU가 스스로 클럭을 낮출 수 있어요. 서버 섀시 팬으로 식히는 GPU는 Fan이 N/A로 나와요.
Pwr:Usage/Cap현재 소비 전력과 전력 상한이에요. 상한에 닿으면 클럭이 내려갈 수 있어요.
Perf성능 상태예요. 작업 중에는 P0~P2, 쉴 때는 P8처럼 숫자가 커져요.
Volatile Uncorr. ECC드라이버가 로드된 뒤 생긴, 고칠 수 없는 메모리 오류 수예요. 0이 아니면 서버 제공자에게 알리세요. ECC를 지원하지 않는 GPU는 N/A예요.

Persistence-M, Bus-Id, Disp.A, Compute M., MIG M.은 드라이버 모드와 연결 정보라서 평소에는 볼 일이 거의 없어요.

Memory-Usage가 높다고 바로 문제는 아니에요. PyTorch는 해제한 메모리를 캐시로 남겨 두고, vLLM은 시작할 때 GPU 메모리의 대부분을 미리 잡아요. TensorFlow도 기본 설정에서는 보이는 GPU 메모리를 거의 다 확보해요.

Processes 표 읽기

Type의 C는 CUDA 같은 계산 작업, G는 화면 출력 같은 그래픽 작업이에요. 둘 다 하면 C+G로 나와요. GI ID와 CI ID는 MIG를 쓸 때만 의미가 있어요.

필요 없는 프로세스는 PID로 종료해요. kill 12345로 안 되면 kill -9 12345로 강제 종료할 수 있는데, 저장하지 않은 결과가 사라지니 무슨 프로세스인지 먼저 확인하세요.

자주 쓰는 명령어

1초마다 갱신해서 보기

bash
nvidia-smi -l 1          # 1초마다 전체 출력을 아래로 이어서 찍어요
watch -n 1 nvidia-smi    # 화면을 지우고 같은 자리에서 갱신해요
둘 다 Ctrl+C로 멈춰요.

필요한 값만 골라 보기

bash
nvidia-smi --query-gpu=name,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv -l 1
출력 예시
name, memory.used [MiB], memory.total [MiB], utilization.gpu [%], temperature.gpu
NVIDIA GeForce RTX 3090, 18432 MiB, 24576 MiB, 97 %, 63

--format=csv,noheader,nounits를 쓰면 머리글과 단위가 빠져서 스크립트로 처리하기 쉬워요. 조회할 수 있는 항목 전체는 nvidia-smi --help-query-gpu로 볼 수 있어요.

GPU를 쓰는 프로세스만 보기

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

자세한 정보 보기

bash
nvidia-smi -L                          # GPU 목록과 UUID
nvidia-smi -q                          # 모든 항목을 자세히 출력
nvidia-smi -q -d MEMORY,TEMPERATURE    # 원하는 부분만 출력

-d에는 MEMORY, UTILIZATION, TEMPERATURE, POWER, CLOCK, PERFORMANCE처럼 보고 싶은 부분을 쉼표로 이어서 넣어요.

GPU 사용량을 CSV 파일로 기록하기

아래 명령은 백그라운드에서 5초마다 한 줄씩 gpu-log.csv에 기록해요. 파일은 실행할 때마다 새로 쓰여요.

bash
nohup nvidia-smi \
  --query-gpu=timestamp,index,utilization.gpu,memory.used,memory.total,temperature.gpu,power.draw \
  --format=csv -l 5 -f gpu-log.csv > /dev/null 2>&1 &

첫 열이 timestamp라서 스프레드시트나 pandas로 바로 그래프를 그릴 수 있어요.

bash
pkill -f "nvidia-smi --query-gpu"
기록을 멈출 때 써요.

자주 헷갈리는 상황

컨테이너 안에서 프로세스가 안 보여요

Docker 같은 컨테이너 안에서는 메모리를 쓰고 있어도 Processes 표가 비거나 No running processes found로 나올 수 있어요. 컨테이너가 호스트와 다른 PID 공간을 쓰기 때문이에요.

이때는 ps aux | grep python으로 프로세스를 찾거나, fuser -v /dev/nvidia*로 GPU 장치를 열고 있는 프로세스를 확인하세요. fuser는 psmisc 패키지에 들어 있어요.

GPU-Util이 100%인데 느려요

GPU-Util 100%는 GPU가 쉬지 않는다는 뜻이지, 성능을 다 끌어 쓰고 있다는 뜻은 아니에요. 작은 작업이 쉬지 않고 이어지면 연산 유닛의 일부만 써도 100%로 보여요.

  • 소비 전력(Pwr:Usage/Cap)이 상한보다 한참 낮다면 연산 유닛이 덜 쓰이고 있을 가능성이 커요. 배치 크기를 키우거나 혼합 정밀도를 써 보세요.
  • nvidia-smi -q -d PERFORMANCE로 클럭이 내려간 이유를 확인하세요. 온도나 전력 때문이라면 해당 항목이 Active로 나와요.
  • Processes 표에서 다른 프로세스가 같은 GPU를 함께 쓰고 있지 않은지 보세요.

반대로 GPU-Util이 낮고 들쭉날쭉하다면 GPU가 데이터를 기다리는 경우가 많아요. PyTorch DataLoader의 num_workers를 늘려 보세요.

프로세스가 없는데 메모리가 잡혀 있어요

  • 컨테이너 안이라서 프로세스가 안 보이는 것일 수 있어요. 위의 방법으로 확인하세요.
  • Jupyter 커널이 살아 있으면 노트북 탭을 닫아도 메모리가 그대로예요. JupyterLab에서 커널을 종료하세요.
  • 분산 학습이나 멀티프로세싱이 비정상 종료되면 자식 프로세스가 남아 메모리를 붙잡고 있을 수 있어요. ps aux | grep python으로 찾아 종료하세요.
  • 아무 작업이 없는데 몇 MiB 정도만 쓰이는 것은 정상이에요.

메모리가 모자라서 오류가 난다면 CUDA out of memory 오류 해결하기를 보세요.

Shelf GPU 서버에서 확인하기

Shelf의 환경 템플릿은 드라이버와 개발 환경을 함께 설치해 둬서, SSH로 접속하자마자 nvidia-smi로 할당된 GPU를 확인할 수 있어요. JupyterLab에서는 터미널을 열거나 셀에서 !nvidia-smi를 실행해요.

VRAM이 모자라면 데이터를 영구 볼륨에 둔 채 더 큰 GPU 서버를 만들어 볼륨을 연결하면 돼요. 지금 빌릴 수 있는 GPU와 VRAM은 GPU 목록에서 확인하세요.

자주 묻는 질문

nvidia-smi: command not found가 나와요.

NVIDIA 드라이버가 설치되지 않았거나 경로에 없는 경우예요. Docker 컨테이너라면 NVIDIA Container Toolkit이 설치된 환경에서 docker run --gpus all처럼 GPU를 연결해 실행했는지 확인하세요.

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver 오류는 왜 나나요?

드라이버 커널 모듈이 로드되지 않았거나, 드라이버를 업데이트한 뒤 재부팅하지 않아 버전이 어긋났을 때 자주 나요. 재부팅한 뒤에도 같다면 드라이버를 다시 설치하세요.

GPU 서버가 필요할 때

필요한 GPU와 개발 환경을 골라 시간 단위로 시작해요.