-
여러 딥러닝 워크스테이션 GPU 사용량 모니터링 방법 (Grafana 및 Prometheus를 이용한)카테고리 없음 2026. 2. 24. 14:58
0. 서론
최근 교내 서버실에 에어컨이 고장나는 상황이 발생하였는데 연구실 GPU 등 과열이 발생할 경우 재성능을 발휘하지 못하거나 고장이 날 수 있는 등의 문제를 초래할 수 있어 다음과 같은 방법으로 연구실 내 있는 모든 워크스테이션의 상태를 모니터링 할 수 있도록 만들어 두었습니다. 물론 쿠버네티스나 슬럼과 같은 고도화 된 방법을 사용할 수 있지만 더 많은 시간을 허비하고 싶진 않아서 빠르고 쉽게 모니터링 환경을 구축해보실 분들은 다음 방법을 사용해보시길 추천드립니다.
1.1 Docker 설치
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io1.2 Docker 설치 확인
sudo systemctl status docker2.1 NVIDIA 기반 Docker로 변경 (윗 단계 선행 필요)
sudo apt-get update && sudo apt-get install -y --no-install-recommends curl gnupg2 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.1-1 sudo apt-get install -y \ nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \ nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \ libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \ libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}2.2 Nvidia-Docker 업데이트
sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker3.0 (모든 클라이언트에 대해, 서버 포함) 서버 모니터링 값 서버로 송신을 위한 과정
3.1 Nvidia 컨테이너 Cloning
sudo docker run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu22.04 nvidia-smi3.2 모니터링 값을 저장할 폴더 생성
mkdir -p ~/monitoring/client cd ~/monitoring/client3.3 Docker Compose를 통한 Node-Exporter와 Dcgm-Exporter 컨테이너 구성
- 3.2에서 생성한 폴더 위치에서 docker-compose.yml 파일을 생성한 후 아래 값들을 작성
version: '3.8' services: # 1. 시스템 정보(CPU, RAM, Disk) 수집기 node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)' ports: - "9100:9100" # 2. NVIDIA GPU 정보 수집기 (핵심) dcgm-exporter: image: nvidia/dcgm-exporter:latest container_name: dcgm-exporter restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] ports: - "9400:9400"
3.4 Docker Compose 업데이트
sudo docker compose up -d3.5 모니터링 수행 중인지 확인
curl http://localhost:9400/metrics4.0 각 서버에 모니터링 값을 수집할 서버 PC에서의 환경 구축 (단, 단일 PC에서만)
4.1 모니터링 값을 취합할 폴더 생성
mkdir -p ~/monitoring/server cd ~/monitoring/server4.2 프로메테우스 설정 값 작성
- 4.1에서 생성한 폴더 위치에서 prometheus.yml 파일을 생성한 후 아래 내용을 작성
- 각 워크스테이션 상황에 맞게 작성
global: scrape_interval: 10s # 10초마다 데이터 수집 scrape_configs: - job_name: 'monitoring-nodes' static_configs: # 예시: 워크스테이션이 3대인 경우 (IP를 실제 환경에 맞게 수정하세요) - targets: ['192.168.1.01:9100', '192.168.1.01:9400'] # Workstation A (Node, DCGM) labels: alias: 'GeForce-Ampere-01' - targets: ['192.168.1.02:9100', '192.168.1.02:9400'] # Workstation B labels: alias: 'GeForce-Ampere-02' - targets: ['192.168.1.03:9100', '192.168.1.03:9400'] # Workstation C labels: alias: 'Quadro-Blackwell-01' - targets: ['192.168.1.04:9100', '192.168.1.04:9400'] # Workstation C labels: alias: 'Quadro-Blackwell-02'* 추후 Workstation이 추가될 경우 위 파일에 새로운 워크스테이션 추가 후 다음 코드 실행
sudo docker restart prometheus4.3 docker-compose.yml 파일 작성
- 4.1에서 생성한 폴더 위치에서 docker-compose.yml 파일을 생성한 후 아래 내용을 작성
version: '3.8' services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus ports: - "9090:9090" grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped user: "0" # 권한 문제 방지 volumes: - grafana_data:/var/lib/grafana ports: - "3000:3000" volumes: prometheus_data: grafana_data:4.4 Docker compose 업데이트
sudo docker compose up -d5.0 Result

- 3.2에서 생성한 폴더 위치에서 docker-compose.yml 파일을 생성한 후 아래 값들을 작성