뷰노가 AI 모델 학습용 GPU 클러스터의 잉여 리소스를 줄이기 위한 첫 단계로 Prometheus 와 Grafana 기반 리소스 모니터링을 구축한 기록이다. 도커로 두 도구를 띄우고, python-prometheus-client 로 GPU 점유율을 직접 보고하는 커스텀 리포터를 만드는 데까지 다룬다.
핵심 포인트- 목적은 GPU 클러스터를 효율적으로 할당해 잉여 리소스를 최소화하는 것이고, 그 첫 단계가 서버 리소스 관측이다.
- Prometheus 는 리포터의 데이터를 시간별로 저장하고 PromQL 로 불러와 가시화할 수 있는 오픈소스다.
- 설정 파일에서 global 의 수집 주기와 scrape_configs 의 job 이름, 리포터 전송 포트를 지정한다.
- Grafana 는 Prometheus 에서 추출한 시계열 데이터를 대화형으로 다룰 수 있어 관리 툴로 적합하다. Data Sources 에서 Prometheus 를 URL 로 등록하면 연동된다.
- 커스텀 리포터는 python-prometheus-client 로 만든다. 원하는 데이터만 골라 일정 주기로 보고할 수 있고, 주기로 시스템 부하를 조절한다.
상세 정리- Prometheus 와 Grafana 모두 도커 이미지를 받아 컨테이너로 실행하는 방식으로 설치한다.
- Prometheus 실행 시 작성한 설정 파일을 컨테이너 안의 경로로 마운트하고 config.file 인자로 지정한다.
- 설정 예시에서는 여러 서버 IP 와 포트를 targets 로 나열해 수집 대상을 지정한다.
- python-prometheus-client 는 네 가지 데이터 포맷을 지원한다.
- 첫 번째 예제는 변하지 않는 값을 보고하는 경우로, nvidia-smi 로 GPU 이름 목록을 세어 개수를 Gauge 로 노출한다.
- 두 번째 예제는 사용 중인 GPU 비율을 보고한다. nvidia-smi 로 전체 GPU 의 pci bus id 목록과 연산 프로세스가 붙은 bus id 목록을 각각 뽑아 점유 여부를 표시하고 비율로 환산한다.
- 이 예제를 확장하면 GPU 의 전력 소비량과 사용률도 함께 볼 수 있다.
- 최종 목표는 유휴 리소스를 관측하고 클러스터 신규 인원 할당 같은 작업을 자동화해 자원을 공유하는 클러스터를 만드는 것이다.
왜 읽나GPU 클러스터의 놀고 있는 자원을 파악해야 하는 ML 인프라 담당자에게, 표준 exporter 로는 안 잡히는 지표를 직접 만들어 보고하는 최소 구성을 보여주는 글.