728x90
왜 통합 모니터링이 필요한가
HPC/GPU 클러스터 운영에서 GPU 상태와 Job 스케줄러 상태는 서로 밀접하게 연결되어 있습니다.
- Slurm에서 Job이 Pending 상태로 오래 대기 → GPU 리소스 부족 또는 정책 제한 가능성
- GPU Utilization이 낮음 → 스케줄링 정책 오류, 데이터 I/O 병목 가능성
따라서 Slurm Exporter와 DCGM Exporter 데이터를 Grafana 대시보드에서 통합 시각화하면,
Job 스케줄링 지표와 GPU 성능 지표를 한 화면에서 비교 분석할 수 있어 운영 효율성이 크게 향상됩니다.
Slurm Exporter 개요
Slurm Exporter는 Slurm REST API 또는 Slurm 명령어 출력을 Prometheus 포맷으로 변환하는 Exporter입니다.
- 주요 메트릭
- slurm_jobs_pending / slurm_jobs_running
- slurm_nodes_idle / slurm_nodes_allocated
- 파티션별 Job 수, 자원 할당량
설치 예시
git clone https://github.com/vpenso/prometheus-slurm-exporter.git
cd prometheus-slurm-exporter
go build
./slurm_exporter --listen-address=":8080"
Prometheus 설정
- job_name: 'slurm'
static_configs:
- targets: ['slurm-exporter:8080']
DCGM Exporter 개요
DCGM Exporter는 NVIDIA GPU 상태를 Prometheus 포맷으로 제공하는 Exporter입니다.
- 주요 메트릭
- DCGM_FI_DEV_GPU_UTIL (GPU 사용률 %)
- DCGM_FI_DEV_FB_USED (메모리 사용량 MiB)
- DCGM_FI_DEV_POWER_USAGE (전력 W)
- DCGM_FI_DEV_TEMP_GPU (온도 °C)
설치 예시 (Docker)
docker run -d --gpus all --rm \
--net=host \
nvcr.io/nvidia/k8s/dcgm-exporter:3.1.8-1-ubuntu20.04Prometheus 설정
- job_name: 'gpu'
static_configs:
- targets: ['node1:9400']
Grafana 대시보드 설계
1. 데이터 소스
- Prometheus URL: http://prometheus:9090
- Slurm Exporter와 DCGM Exporter 메트릭을 동일 Prometheus 인스턴스에서 수집
2. 주요 패널 구성
| 패널 이름 | 데이터 소스 | 주요 메트릭 | 설명 |
| GPU Utilization | Prometheus | DCGM_FI_DEV_GPU_UTIL | GPU 사용률 시계열 그래프 |
| GPU Memory Usage | Prometheus | DCGM_FI_DEV_FB_USED | GPU 메모리 사용량 |
| GPU Temperature & Power | Prometheus | DCGM_FI_DEV_TEMP_GPU, DCGM_FI_DEV_POWER_USAGE | 온도/전력 |
| Job Queue Status | Prometheus | slurm_jobs_pending, slurm_jobs_running | Pending/Running Job 수 |
| Partition Usage | Prometheus | slurm_nodes_allocated, slurm_nodes_idle | 파티션별 노드 상태 |
| GPU per Job Mapping | Prometheus | Slurm Job ID ↔ GPU ID 매핑 | Job별 GPU 점유 현황 |
GPU-Job 매핑 시각화
PromQL 예시
slurm_job_gpu_allocation{job_state="RUNNING"} * on(job_id) group_left(gpu_uuid) DCGM_FI_DEV_GPU_UTIL
- Slurm에서 수집한 Job ID와 DCGM Exporter의 GPU UUID를 매핑
- 특정 Job이 어느 GPU에서 실행되고 있는지와 GPU 사용률을 함께 표시
알림(Alert) 설정
- GPU 온도 경고
- alert: HighGPUTemperature
expr: DCGM_FI_DEV_TEMP_GPU > 85
for: 2m
labels:
severity: warning
annotations:
description: "GPU 온도가 85°C 이상입니다. 노드={{ $labels.instance }}"
- Job 대기 시간 경고
- alert: LongPendingJob
expr: slurm_jobs_pending > 50
for: 10m
labels:
severity: critical
annotations:
description: "Pending Job이 50개 이상이며 10분 이상 지속 중입니다."
운영 시 활용 시나리오
- 자원 병목 분석
- Pending Job 증가 + GPU Idle → 스케줄링 정책 문제
- 성능 최적화
- GPU Utilization 낮음 + 높은 CPU I/O Wait → 데이터 프리페치 필요
- 장애 예측
- 특정 노드 GPU 온도 급상승 → 냉각 문제 사전 대응
Kubernetes 환경 통합 예시
Helm Chart 기반 통합 배포:
helm install monitoring grafana/loki-stack \
--set grafana.enabled=true \
--set prometheus.enabled=true
- Slurm Exporter/ DCGM Exporter DaemonSet 구성
- Prometheus Operator의 ServiceMonitor로 자동 수집
장점과 단점
장점
- GPU 성능과 Job 스케줄링 상태를 한눈에 확인 가능
- 자원 활용률 향상 및 병목 진단 속도 증가
- 알림을 통한 장애 사전 예방 가능
단점
- Exporter와 Prometheus, Grafana 구성 복잡
- 대규모 클러스터에서 Prometheus 성능 튜닝 필요
- GPU-Job 매핑 로직이 환경별 커스터마이징 요구
정리하며
Slurm Exporter와 DCGM Exporter를 통합하면 **“누가 어떤 GPU를 어떻게 쓰고 있는지”**를 실시간으로 파악할 수 있습니다.
이는 HPC/GPU 클러스터 운영에서 병목 원인 분석, 장애 예측, 정책 조정에 큰 도움을 줍니다.
운영자는 알림 규칙과 대시보드를 지속적으로 개선해 관찰 가능한 HPC 환경을 구축해야 합니다.
728x90