서론
취준생에서 현업 AI 엔지니어로 전향하면서, 실무에 필요한 다양한 기술들을 빠르게 습득하고 있는 요즘입니다. 특히, 회사의 리눅스 서버에 접속해 코드를 작성하고 협업하는 일은 일상이 되었는데요.
다행히 저는 입사 전부터 리눅스 커맨드라인과 Git을 어느 정도 다룰 줄 알았기에, 이런 기초적인 지식이 업무에 큰 도움이 되고 있습니다. 아주 간단해서 입사 후 빠르게 배울 수도 있는 것들이기도 하지만, 이런 기본적인 것들을 모르고 시작하면 제일 불편한 건 결국 나 자신이더라고요.
특히 AI 엔지니어로서 GPU를 다루는 일은 필수적입니다. 그래서 저 역시 여러 개의 GPU를 병렬처리 하는 방법, 메모리 배치와 사용량 등에 대해 항상 고민하려고 노력하고 있어요. 그러면서 자연스럽게 서버에 연결된 GPU 사용량과 메모리 상태를 실시간으로 추적하는 것이 필요해졌는데요. 다양한 툴을 비교해보며 저에게 맞는 최적의 도구를 찾아가고 있습니다.
오늘은 이처럼 GPU 모니터링을 더욱 쉽게 해줄 수 있는 다양한 명령어 중에서, 제가 가장 자주 사용하는 3가지를 알려드리고 비교해 보려고 합니다.
참고로 저는 VScode를 사용해 작업합니다!
1. nvidia-smi
GPU 모니터링의 근본, 바로 nvidia-smi입니다. 엔비디아가 제공하는 이 툴은 GPU 사용량, 메모리 상태, 온도 등을 보여주는데요. 저는 간단하게 GPU ID 확인이나 특정 프로세스를 kill할 때 주로 사용합니다. 가장 기본이지만 또 근본이라서 다른 화려한 툴이 많지만 동시에 함께 자주 사용하게 되는 그런 툴입니다 :)
nvidia-smi
간단한 명령어로 실행할 수 있습니다.
위 이미지에서는 nvidia-smi 명령어를 통해 출력된 GPU 상태 정보가 나와 있는데요.
각 GPU의 명칭, 온도, 메모리 사용량, 전력 소모량 등 주요 정보를 확인할 수 있고, 시스템에 설치된 모든 GPU의 상태를 한눈에 보여주는 특징이 있습니다. 아주 기본적인 GPU 모니터링 방법이지요.
특히 nvidia-smi 출력 하단의 Processes 섹션에서 현재 GPU 메모리를 사용 중인 프로세스 목록, 그리고 각 프로세스의 PID(프로세스 ID)를 확인할 수 있습니다. 특정 프로세스가 과도하게 GPU 메모리를 사용하거나 문제가 발생한 경우, kill [PID] 명령어로 해당 프로세스를 종료하여 메모리를 해제할 수 있습니다.
# 실행
nvidia-smi
nvidia-smi -l 2 (2초마다 업데이트)
watch nvidia-smi (실시간 모니터링)
- -l 옵션은 nvidia-smi 자체에서 제공하는 기능으로, 지정한 초 단위로 GPU 상태를 자동으로 반복해서 업데이트해줍니다.
- watch 명령어는 리눅스 기본 명령어로, 특정 명령을 주기적으로 실행하여 그 출력을 갱신하는 기능을 합니다. nvidia-smi 뿐만 아니라 모든 명령에 사용할 수 있습니다.
2. nvitop
화려한 모니터링의 시작! nvitop입니다.
nvitop을 처음 접하면 "우와, 이게 가능해?"라는 생각이 들 만큼 시각적으로 무척 화려합니다. 저도 오로지 nvidia-smi만 알다가, 처음으로 nvitop을 설치하고 실행했을 때, 무척 놀랐던 기억이 있습니다.
nvitop을 사용하면 실시간으로 GPU 사용량을 모니터링할 수 있어 매우 편리합니다. 비슷한 툴로 nvtop도 있는데, 둘 다 nvidia-smi에서 보여주는 기본 정보를 보다 직관적으로 시각화합니다. 특히 많은 GPU를 동시에 모니터링할 때 빛을 발합니다.
pip install nvitop
conda install -c conda-forge nvitop
# 실행
nvitop
위와 같이 2가지 방법으로 설치, 간단하게 실행할 수 있습니다. 가상환경을 사용중이시라면 conda를 이용해서 설치하고 실행하시는 것을 추천드립니다.
3. gpustat
gpustat은 GPU 상태를 실시간으로 모니터링할 수 있는 Python 기반 도구입니다. GPU 사용량, 메모리 사용량, 온도 등을 명령어 한 번으로 간편하게 확인할 수 있습니다. nvidia-smi 명령어를 기반으로 GPU 정보를 수집하기 때문에 NVIDIA GPU에서만 사용 가능한 특징이 있습니다.
아래는 gpustat 깃허브 링크입니다.
https://github.com/wookayin/gpustat
pip install gpustat
conda install -c conda-forge gpustat
# 실행
gpustat
gpustat -i
gpustat -i 2 (2초마다 업데이트)
gpustat -cp (CPU사용량까지 포함해서 업데이트)
다양한 옵션들
- --color : Force colored output (even when stdout is not a tty)
- --no-color : Suppress colored output
- -u, --show-user : Display username of the process owner
- -c, --show-cmd : Display the process name
- -f, --show-full-cmd : Display full command and cpu stats of running process
- -p, --show-pid : Display PID of the process
- -F, --show-fan : Display GPU fan speed
- -e, --show-codec : Display encoder and/or decoder utilization
- -P, --show-power : Display GPU power usage and/or limit (draw or draw,limit)
- -a, --show-all : Display all gpu properties above
- --id : Target and query specific GPUs only with the specified indices (e.g. --id 0,1,2)
- --no-processes : Do not display process information (user, memory) (#133)
- --watch, -i, --interval : Run in watch mode (equivalent to watch gpustat) if given. Denotes interval between updates
- -i 옵션은 인터벌(interval)을 설정하는 옵션으로, 주기적으로 GPU 상태를 업데이트를 해주기 때문에 실시간 모니터링을 매우 편리하게 할 수 있습니다!
- --json : JSON Output (#10)
- --print-completion (bash|zsh|tcsh) : Print a shell completion script. See #131 for usage.
마무리
여러 가지 화려한 툴들이 있지만, 저는 gpustat -i를 가장 자주 사용하고 있습니다. 한 눈에 들어오는 간단하고 깔끔한 인터페이스가 무척 편리하고, GPU를 멈추거나 죽일 때도 금방 빠르게 확인할 수 있어서 속이 시원하거든요. nvitop처럼 화려한 툴도 좋지만, 아직까지는 실용성과 간편함 면에서 gpustat이 제 마음 속 GPU 모니터링 툴 1위입니다.
물론, 정답은 없습니다. 취향에 따라, task에 따라 다양한 툴을 비교해보며 본인에게 맞는 최적의 도구를 선택해서 사용하시면 되겠습니다.
그럼 여러분도 GPU 모니터링, 이제 걱정 없이 화이팅 하세요! 👾 감사합니다 :)
'Code > problem solving' 카테고리의 다른 글
CPU, 병렬 처리, Ray, Multiprocessing (2) | 2024.09.20 |
---|---|
프로그래머스 코딩테스트 | 2단계 올바른 괄호 (Stack 알고리즘으로 풀이하기) (1) | 2024.04.23 |
프로그래머스 코딩테스트 | 2단계 피보나치 수 문제풀이 (재귀함수 + 메모화로 효율성 올리기) (0) | 2024.04.12 |
오류 해결 | 주피터, 코랩 future warning 제거하기 (pandas, seaborn) (0) | 2024.04.09 |
프로그래머스 코딩테스트 | 1단계 카카오 인턴십 키패드 누르기 문제 풀이 (파이썬) (1) | 2024.04.04 |