NviWatch: NVIDIA GPU 상태를 터미널에서 실시간으로 모니터링하는 Rust 기반 TUI 도구

NviWatch 소개

최근 몇 년 간 머신러닝과 데이터 과학의 확산으로 인해 NVIDIA GPU를 사용하는 환경이 급격히 증가했습니다. 이에 따라 GPU 자원의 활용률을 실시간으로 확인하고, 이상 징후를 신속히 파악하는 모니터링 도구의 중요성도 더욱 커지고 있습니다. 이러한 필요에 대응하기 위해 다양한 도구들이 등장했지만, 대부분은 무겁거나 GUI에 의존하여 서버 환경에서 쓰기 어렵다는 단점이 있습니다.

NviWatch는 이러한 문제점을 해결하기 위해 등장한 경량의 터미널 기반 사용자 인터페이스(TUI) 프로그램입니다. Rust 언어로 개발되었으며, NVIDIA GPU의 온도, 사용률, 메모리 사용량, 전력 소비 등을 실시간으로 확인할 수 있습니다. 또한, InfluxDB와 연동하여 장기적인 GPU 모니터링도 가능하다는 특징을 가집니다.

터미널에서 실행되며 직관적인 키 바인딩으로 손쉽게 조작할 수 있고, 다양한 시각화 모드를 지원해 여러 GPU 시스템에서도 유용하게 사용할 수 있습니다. 무엇보다도 매우 낮은 CPU 및 메모리 사용량 덕분에 서버에 부하를 주지 않는 것이 큰 장점입니다.

NviWatch는 nvtop, nvitop, gpustat과 같은 기존의 인기 있는 GPU 모니터링 툴들과 성능 비교가 진행되었습니다:

  • CPU 사용률: NviWatch는 평균 0.28%로, gpustat(3.47%)이나 nvitop(0.88%)에 비해 훨씬 낮습니다. nvtop과는 유사하지만 최대 사용률은 더 안정적입니다.
  • 메모리 사용량: 평균 18MB로 nvitop(41MB), gpustat(33MB)에 비해 가볍고 nvtop보다도 소폭 낮습니다.
  • 패키지 크기: 1.98MB로 크기면에서는 nvitop(4.1MB)보다 가볍지만, nvtop은 매우 작은 106KB입니다.

즉, NviWatch는 성능과 리소스 효율성 면에서 매우 경쟁력 있는 도구라 할 수 있습니다.

NviWatch의 주요 기능

실시간 GPU 상태 모니터링

  • GPU 온도, 사용률, 메모리 사용량, 전력 소비를 실시간으로 확인할 수 있습니다.
  • 데이터는 터미널 화면에 시각적으로 표현되며, 바 그래프 또는 탭 형태로 전환 가능합니다.

프로세스 관리

  • GPU를 점유하고 있는 프로세스 목록을 확인하고, 원클릭으로 종료할 수 있는 기능도 포함되어 있습니다.

다양한 시각화 모드

  • 기본 모드: 전체 GPU 상태를 단일 화면에 표시
  • 바 차트 모드: 각 지표를 바 형태로 시각화
  • 탭 모드: 멀티 GPU 환경에서 GPU 별로 탭으로 구분하여 표시

InfluxDB 통합

  • 수집된 GPU 지표를 InfluxDB로 전송하여 장기 저장 및 Grafana 같은 도구로 시각화 가능
  • scripts/setup_influxdb.sh 스크립트를 통해 InfluxDB 설치 및 대시보드 자동 구성 지원

InfluxDB 연동 설정

InfluxDB를 설치하고 NviWatch와 연동하여 실시간 GPU 데이터를 저장 및 시각화하는 방법은 다음과 같습니다:

  1. 스크립트를 실행하여 InfluxDB 설치:

    chmod +x scripts/setup_influxdb.sh
    ./scripts/setup_influxdb.sh
    
  2. 관리 토큰을 발급:

    influx auth list
    
  3. NviWatch 실행 시 다음 옵션을 통해 연동:

    ./nviwatch \
      --influx-url "http://localhost:8086" \
      --influx-org "my-org" \
      --influx-bucket "gpu-metrics" \
      --influx-token "your-admin-token-here"
    

NviWatch 설치 및 실행 방법

사전 요구사항

  • NVIDIA Management Library(NVML)가 설치되어 있어야 합니다.
  • Rust 및 Cargo 설치 필요(소스 빌드 또는 Cargo 설치 방식 시)

방법 1: 바이너리 다운로드

  • GitHub Release 페이지에서 Linux용 바이너리 다운로드 후 실행 권한 부여 및 실행:
    chmod +x nviwatch
    ./nviwatch
    

방법 2: Cargo 설치

cargo install nviwatch

방법 3: 소스 코드 빌드

git clone https://github.com/msminhas93/nviwatch.git
cd nviwatch
cargo build --release
./target/release/nviwatch

단축키 및 사용 방법

  • q: 종료
  • ↑/↓: 프로세스 탐색
  • ←/→: GPU 탭 전환
  • x: 프로세스 종료
  • d/t/b: 기본/탭/바 보기 모드 전환

명령어 옵션도 다양하며, InfluxDB 연동 설정도 커맨드라인 인자로 간단하게 적용 가능합니다.

라이선스

NviWatch 프로젝트는 GNU General Public License v3.0로 공개 및 배포되고 있습니다. 상업적 사용은 가능하지만, 소스 코드를 공개하거나 동일 라이선스로 배포해야 합니다.

:github: NviWatch 프로젝트 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: