ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 여러 딥러닝 워크스테이션 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.io
    
    

     

    1.2 Docker 설치 확인

    sudo systemctl status docker

     

    2.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 docker

     

     

    3.0 (모든 클라이언트에 대해, 서버 포함) 서버 모니터링 값 서버로 송신을 위한 과정

     

    3.1 Nvidia 컨테이너 Cloning

    sudo docker run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu22.04 nvidia-smi

     

    3.2 모니터링 값을 저장할 폴더 생성

    mkdir -p ~/monitoring/client
    cd ~/monitoring/client
    

     

    3.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 -d

     

    3.5 모니터링 수행 중인지 확인

    curl http://localhost:9400/metrics

     

     

    4.0 각 서버에 모니터링 값을 수집할 서버 PC에서의 환경 구축 (단, 단일 PC에서만)

    4.1 모니터링 값을 취합할 폴더 생성

    mkdir -p ~/monitoring/server
    cd ~/monitoring/server

     

    4.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 prometheus

     

    4.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 -d

     

     

    5.0 Result 

    댓글

Designed by Tistory.