본문 바로가기
IT & Tech 정보

ModelOps CI/CD: Kubeflow Pipelines + Seldon + Argo Rollouts 기반

by 지식과 지혜의 나무 2025. 5. 29.
반응형

ML 모델 자동 배포·카나리·자동 롤백 파이프라인



🎯 목표

“코드를 한 줄도 바꾸지 않고” 개발→학습→검증→프로덕션 배포→카나리 롤아웃→데이터 드리프트 감지→자동 롤백까지 ML 모델 라이프사이클(CI/CD)을 완전 자동화합니다.



⚙️ 핵심 구성 요소
1. Kubeflow Pipelines
• 모델 학습·평가 워크플로우를 재현 가능한 컴포넌트로 정의
• ‘train’ → ‘eval’ → ‘package’ → ‘push to registry’ 파이프라인
2. Container Registry
• Trained 모델을 포함한 컨테이너 이미지(예: model:gitsha) 저장
3. Seldon Core
• Kubernetes 위에 모델 Serving Inference API 자동 생성
• SeldonDeployment CRD로 버전별 엔드포인트 선언
4. Argo Rollouts
• SeldonDeployment에 카나리 전략 적용
• Prometheus Metrics-based AnalysisTemplate으로 자동 판단
5. Prometheus + Drift Detector
• “추론 결과 분포”(예: 클래스별 확률 평균)와 “기준 분포”(훈련 데이터) 간 JS Divergence 계산
• 이상치(Drift) 감지 시 자동 롤백 트리거
6. GitOps (Argo CD)
• PipelineRun, SeldonDeployment, Rollout CR 모두 Git 저장소에 선언
• Sync 옵션으로 실시간 동기화·자가 치유



🏗️ 워크플로우

[Git Push ML 코드]
        ↓
[Kubeflow Pipelines]
(train → eval → containerize → push)
        ↓
[GitOps: new SeldonDeployment manifest]
        ↓
Argo CD Sync → Seldon Core 벤치마킹 Inference 서비스 생성
        ↓
[Argo Rollouts 시작: 10% → 50% → 100%]
        ↓
Prometheus 수집된 분포 메트릭
        ↓
AnalysisTemplate 평가: JS Divergence < θ?
    ├─ Yes: 다음 단계로 카나리 확장
    └─ No: 자동 롤백(rollbackTo: lastStableRevision)




🧪 실전 예제

1) SeldonDeployment + Rollout

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata: { name: ml-model-rollout }
spec:
  strategy:
    canary:
      steps:
        - setWeight: 10
        - pause: {duration: 60}
        - setWeight: 50
        - pause: {duration: 120}
  selector: { matchLabels: { app: seldon-ml } }
  template:
    metadata: { labels: { app: seldon-ml } }
    spec:
      replicas: 4
      containers:
      - name: predictor
        image: registry/my-model:${{gitsha}}
        ports: [{ containerPort: 9000 }]

2) AnalysisTemplate (Drift 감지)

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata: { name: ml-drift-check }
spec:
  metrics:
  - name: js-divergence
    interval: 30s
    provider:
      prometheus:
        query: |
          js_divergence(
            histogram_quantile(0.5, sum(rate(prediction_prob_bucket[5m])) by (le)),
            histogram_quantile(0.5, sum(rate(baseline_prob_bucket[5m])) by (le))
          )
    successCondition: result < 0.05
    failureLimit: 1




✅ 기대 효과
• 완전 자동화된 모델 배포: 개발→학습→배포→모니터링→롤백까지 “버튼 없음”
• 안전한 카나리 릴리즈: 실제 트래픽의 카나리 10~50%에서 검증 후 확장
• 데이터 드리프트 대응: 분포 이상시 즉시 롤백하여 잘못된 예측 방지
• GitOps 일관성: 모든 리소스 정의와 이력이 Git에 기록



🔧 확장 포인트
• A/B 테스트 연동: TrafficSplit CRD로 사용자 세그먼트별 롤아웃
• Feature Store 연계: Feast로 실시간 특성 검증
• ML Metadata 추적: MLMD + Kubeflow MetadataStore 통합
• Explainability Hook: SHAP 기반 모델 설명 API 자동 배포


반응형