Kurly만의 MLOps 구축하기 - 초석 다지기
핵심 내용
컬리가 Karpenter와 NVDP를 활용해 GPU 자원 자동 할당 및 회수를 구현한 자체 MLOps 플랫폼을 구축했다.
자세히 보기
컬리는 기존 Kubernetes 기반 인프라를 활용해 자체 MLOps 플랫폼을 개발하며, GPU 자원의 자동 Provisioning과 Deprovisioning을 핵심 과제로 삼았다. 기존 환경은 도구들이 독립적으로 운영되어 통합된 업무 환경이 부재했고, 클라우드 환경에서 GPU 비용이 비싸 엔지니어의 수동 모니터링과 권한 요청이 필수적이었다.
Karpenter 도입 배경 및 구조
컬리는 AWS SageMaker나 GCP VertexAI 같은 통합 환경을 검토했으나 비용 문제로 제외하고, 기존 Kubernetes 인프라를 활용하는 Karpenter를 선택했다. Karpenter는 AWS가 만든 오픈소스 프로젝트로, Kubernetes Worker Node의 자동 확장을 담당한다.
기존 **Cluster Auto Scaler(CA)**는 EC2 Auto Scaling Group(ASG)과 Launch Template을 이용해 노드 그룹을 관리하므로 단계가 많고 확장 속도가 느렸다. 반면 Karpenter는 Cloud Provider와 무관하게 동작하며, Unschedulable한 Pod를 지속적으로 관찰하고 필요 시 Worker Node 배포 및 삭제를 직접 수행한다. 또한 kube-scheduler를 대신해 Pod를 특정 Worker Node로 바인딩하는 요청까지 처리하여 기존 ASG 대비 훨씬 빠른 자동화가 가능하다.
GPU 자원 관리 및 Deprovisioning 최적화
GPU 서버 프로비저닝은 Karpenter의 Custom Resource인 Provisioner에 GPU requirements를 포함시켜 수행한다. 다만 GPU 노드가 생성된 직후에는 NVIDIA 관련 세팅이 없어 즉시 사용이 불가능하므로, **NVIDIA device plugin for Kubernetes(NVDP)**를 데몬 셋으로 설치해 GPU 장착 노드를 감지하고 플러그인을 빠르게 설치해야 한다.
GPU 사용 중지 시 노드가 삭제되지 않는 Deprovisioning 문제를 해결하기 위해 노드의 Tag와 Label을 활용했다. Anti Node Affinity나 Node Selector를 통해 GPU와 무관한 파드가 GPU 노드에 할당되지 않도록 차단했다. 또한 Karpenter v.0.15.0부터는 워크로드를 더 저렴한 노드로 교체하거나 불필요한 노드를 제거하는 Consolidation 옵션을 활성화하여 클러스터 비용을 절감할 수 있다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.