
Kurly만의 MLOps 구축하기 - 초석 다지기
두줄요약
Kubernetes 기반 MLOps 환경에서 GPU 자원 운영 부담을 줄이기 위한 기반을 설계했습니다. Karpenter와 NVDP로 GPU 노드의 자동 생성·회수 흐름을 구성했습니다.
문제 상황
- ML 애플리케이션 증가에 따른 GPU 자원 요청·모니터링의 엔지니어 운영 부담
- Kubernetes 기반 JupyterHub·Airflow·MLflow 환경에서 독립적으로 운영되던 ML 도구와 고비용 GPU 관리 문제
해결 방법
- Jupyter Notebook의 GPU 요청 시 GPU 노드 생성, 종료 시 노드 회수를 목표로 한 자동 프로비저닝 구조 설계
- Karpenter Provisioner의 GPU 요구사항·인스턴스 제약 설정과 NVDP 데몬셋 기반 NVIDIA 디바이스 플러그인 설치
구조와 흐름
- 스케줄 불가 Pod 감시 후 Provisioner 조건에 맞는 워커 노드 생성 및 Pod 바인딩
- GPU 학습 요청부터 노드 생성, NVIDIA 플러그인 설치, 학습 가능 노드 준비로 이어지는 흐름
- 불필요 노드 제거를 위한 Karpenter의 노드 라이프사이클 관리와 Consolidation 옵션 활용
주의할 점
- GPU 비사용 Pod의 GPU 노드 배치로 인한 Deprovisioning 지연 방지를 위한 Anti Node Affinity·Node Affinity 적용
- Consolidation 설정 검증 오류 발생 시 Karpenter 버전뿐 아니라 CRD 업그레이드 확인


