pile·
인프라 / DevOps·마켓컬리마켓컬리 Hello World·

Kurly만의 MLOps 구축하기 - 초석 다지기

컬리 데이터플랫폼팀이 MLOps 플랫폼의 첫 단계로 GPU 사용 환경을 구축한 기록이다. 비싼 GPU 자원을 필요할 때만 자동 할당·회수하기 위해 Kubernetes 노드 오토스케일러 Karpenter를 도입한 과정과 GPU 세팅 팁을 다룬다.

핵심 포인트
  • 클라우드 GPU는 비싸서 쓸 때만 켜고 안 쓰면 꺼야 하는데, 기존엔 엔지니어가 수동 요청·모니터링해야 해 데이터 사이언티스트가 자유롭게 못 썼다.
  • 목표는 Jupyter Notebook 생성 시 GPU 옵션을 켜면 GPU 서버가 provisioning되고 종료하면 deprovisioning되는 구조다.
  • 기존 Cluster Auto Scaler(ASG 기반)보다 단순·빠른 Karpenter를 선택하고, Provisioner로 인스턴스 타입·제약을 정의한다.
  • GPU 노드는 NVIDIA device plugin(NVDP) 설치가 필요하고, deprovisioning은 Node Affinity와 Consolidation 옵션으로 보완한다.
상세 정리
  • 배경: Airflow·JupyterHub·MLFlow가 이미 Kubernetes로 구성돼 있었지만 GPU 때문에 ML 작업을 편하게 못 했다.
  • 통합 환경 고민: SageMaker·VertexAI 같은 관리형도 검토했으나 비용 문제로 기존 Kubernetes 위에 직접 구축하기로 했다.
  • Karpenter 선택: AWS가 만든 오픈소스로 re:Invent 2021에서 v0.5 GA 릴리스됐고, 신규 pod를 보고 부족하면 워커 노드를 직접 추가·삭제한다.
  • 기존 CA 동작: AWS EKS는 ASG와 Launch Template으로 노드를 그룹핑하고, pod가 Pending이면 ASG desired capacity를 늘려 EC2를 붙이는 여러 단계를 거친다.
  • Karpenter 차이: Cloud Provider 기능에 의존하는 CA와 달리 스케줄링·바인딩 상당 부분을 직접 처리해 구조가 단순하고 노드 확장이 빠르다.
  • 4개 개념: Watching(unschedulable pod 관찰), Evaluating(제약 확인), Provisioning(노드 배포), Removing(불필요 노드 삭제).
  • Provisioner: taints·labels·requirements(instance type/zone/arch/capacity)·limits(전체 CPU·메모리 상한)를 설정하며, GPU requirements를 넣어 GPU 노드를 프로비저닝한다.
  • NVDP: GPU 노드를 띄워도 NVIDIA device plugin을 데몬셋으로 설치해야 실제 학습이 되며, 데몬셋이 GPU 노드를 감지해 플러그인을 자동 설치한다.
  • deprovisioning 함정 1: GPU와 무관한 pod가 GPU 노드에 붙으면 Karpenter가 사용 중으로 판단해 노드를 안 지운다. Anti Node Affinity·Node Selector로 GPU 노드 할당을 막는다.
  • deprovisioning 함정 2: v0.15.0부터 Consolidation 옵션으로 노드 자동 정리가 되는데, 활성화 시 unknown field consolidation validation 에러는 버전 업 후에도 CRD가 옛 버전으로 남기 때문이라 CRD를 업그레이드해야 해결된다.
왜 읽나EKS에서 GPU 노드를 비용 효율적으로 자동 확장·회수하려는 MLOps·인프라 엔지니어에게 Karpenter 실전 팁 레퍼런스.
마켓컬리
마켓컬리 Hello World 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    대규모 도그푸딩: cdnjs를 Cloudflare 개발자 플랫폼으로 이전하다

    cdnjs는 하루 90억 요청을 처리하는 오픈소스 JS/CSS CDN으로, 전 세계 웹사이트의 12%가 의존한다. 2026년 6월, Cloudflare는 6년간 GCP에서 운영하던 발행 파이프라인을 Workers, Workflows, R2, KV, Queues, Containers, Durable Objects로 완전 전환했다. 성능 문제가 아닌 관측성·유지보수성 한계가 동인이었으며, 마이그레이션 과정에서 플랫폼 한도를 직접 끌어올렸다.

    #durable-objects#workflows#cloudflare-workers+2
  2. 인프라 / DevOps·github-engGitHub Engineering·

    Dependabot 길들이기: 업데이트 묶고, 주기 늦추고, 보안은 빠르게

    GitHub의 Dependabot은 의존성 업데이트를 자동화하지만, 기본 설정에서는 10개 업데이트 = 10개 PR이 쏟아져 메인테이너가 알림을 무시하게 된다. Microsoft의 GCToolkit 사례(578개 커밋 중 92개가 Dependabot 버전 범프)를 바탕으로, 그룹핑·주기 조절·보안 업데이트 분리 3가지 설정으로 노이즈를 줄이면서 보안 속도는 유지하는 방법을 다룬다.

    #github-actions#devops#supply-chain-security+2
  3. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    Cloudflare, 프라이버시 프로토콜 디버깅 CLI pvcli 오픈소스 공개

    Cloudflare가 OHTTP(Oblivious HTTP) 등 프라이버시 보존 프로토콜 디버깅을 위한 CLI 도구 pvcli를 오픈소스(Apache-2.0)로 공개했다. 기존에는 RFC를 참조하며 바이너리를 수작업으로 파싱해야 했는데, pvcli는 curl과 유사한 문법으로 이 과정을 단일 명령으로 줄인다. Apple Private Relay·Microsoft Edge Secure Network를 구동하는 실전 규모의 경험에서 나온 도구다.

    #rust#cli#ohttp+2