MLOps와 CI/CD 파이프라인 구축

MLA-C01 대비 SageMaker Pipelines, Model Registry, SageMaker Projects와 AWS CI/CD 도구를 통합해 재현 가능한 ML 워크플로를 구축하는 MLOps 방법을 정리합니다.

MLOps가 중요한 이유: 재현성, 자동화, 거버넌스

전통적인 소프트웨어 개발에서는 CI/CD가 코드 변경을 자동으로 빌드, 테스트, 배포합니다. ML에서는 코드뿐 아니라 데이터와 모델도 함께 버전 관리해야 하고, 훈련 결과의 비결정론적 특성 때문에 더 복잡한 검증 게이트가 필요합니다. MLOps는 이 복잡성을 체계적으로 다루기 위한 접근 방식입니다.

재현성은 MLOps의 핵심 원칙입니다. 6개월 전에 훈련된 모델과 동일한 결과를 다시 얻을 수 있어야 하고, 어떤 데이터로 훈련되었는지, 어떤 하이퍼파라미터가 사용되었는지, 어떤 평가 지표를 통과했는지를 추적할 수 있어야 합니다. 자동화는 반복적인 실험과 재훈련 사이클의 속도를 높이고 인간 오류를 줄입니다. 거버넌스는 어떤 모델이 프로덕션에 배포되었는지, 누가 승인했는지, 어떤 성능을 보이는지를 감사 가능한 형태로 기록합니다.

 

SageMaker Pipelines: ML 워크플로의 뼈대

SageMaker Pipelines는 ML 워크플로를 유향 비순환 그래프(DAG)로 정의하고 실행하는 완전 관리형 서비스입니다. 각 스텝의 입력, 출력, 의존 관계를 코드로 정의하며, 실행 이력과 아티팩트 계보를 자동으로 추적합니다.

주요 스텝 유형을 살펴보면, ProcessingStep은 데이터 전처리, 후처리, 피처 엔지니어링에 사용됩니다. SageMaker Processing Job을 래핑하며 SKLearnProcessor, PySparkProcessor 등 다양한 프로세서를 지원합니다. TrainingStep은 SageMaker Training Job을 실행하고 모델 아티팩트를 출력합니다. TuningStep은 하이퍼파라미터 최적화 작업(HPO)을 실행합니다. TransformStep은 Batch Transform 작업을 파이프라인에 통합합니다. ModelStep은 SageMaker 모델 리소스를 생성합니다. ConditionStep은 조건부 분기를 구현합니다. 예를 들어 모델 정확도가 기준치를 초과할 때만 배포 스텝으로 진행하는 로직을 표현할 수 있습니다. CallbackStep은 외부 서비스나 Lambda 함수를 호출하고 완료 신호를 기다립니다. 인간 검토 루프나 외부 시스템 연동에 활용됩니다.

 

파이프라인 파라미터와 캐싱

SageMaker Pipelines는 파이프라인 파라미터를 지원합니다. 인스턴스 타입, 훈련 에포크 수, 데이터 S3 경로 같은 값을 파이프라인 정의 시 파라미터로 선언하면, 실행 시점에 다른 값을 주입할 수 있습니다. 이를 통해 동일한 파이프라인 정의를 개발, 스테이징, 프로덕션 환경에서 재사용할 수 있습니다.

스텝 캐싱(Step Caching)은 파이프라인 실행 비용과 시간을 줄이는 중요한 기능입니다. 동일한 입력으로 이미 성공적으로 실행된 스텝이 있으면, 재실행 대신 캐시된 결과를 사용합니다. 전처리 스텝은 데이터가 변경되지 않으면 재실행할 필요가 없고, 훈련 스텝은 코드와 데이터가 동일하면 캐시를 활용할 수 있습니다. 캐시 만료 기간을 설정하여 오래된 캐시를 무효화할 수 있습니다.

 

SageMaker Model Registry: 모델 버전 관리와 승인 워크플로

Model Registry는 훈련된 모델의 카탈로그입니다. 모델은 모델 그룹(Model Group) 안에 버전으로 등록되며, 각 버전은 모델 아티팩트 위치, 훈련에 사용된 컨테이너, 평가 지표, 메타데이터를 포함합니다.

모든 모델 버전은 세 가지 승인 상태 중 하나를 가집니다. PendingManualApproval은 기본 상태로, 아직 검토되지 않은 상태입니다. Approved는 프로덕션 배포가 승인된 상태입니다. Rejected는 기준을 통과하지 못해 거부된 상태입니다.

승인 워크플로는 자동화와 인간 검토를 결합할 수 있습니다. ConditionStep에서 자동 평가 지표(예: RMSE < 0.05, AUC > 0.90)를 확인하고, 기준을 통과하면 모델을 Registry에 등록합니다. 그 후 데이터 과학자나 ML 엔지니어가 모델의 상세 지표, 설명 가능성 리포트, 편향성 평가 결과를 검토한 후 수동으로 승인합니다. 승인 이벤트는 EventBridge를 통해 자동 배포 파이프라인을 트리거할 수 있습니다.

&nbsp;

SageMaker Projects: MLOps 템플릿

SageMaker Projects는 MLOps 모범 사례가 구현된 템플릿을 제공합니다. 기본 제공 템플릿에는 SageMaker Pipelines + CodePipeline + Model Registry를 연결하는 완전한 CI/CD 구조가 포함되어 있습니다. 조직의 표준을 반영한 커스텀 템플릿을 AWS Service Catalog를 통해 배포하고 공유할 수 있습니다.

프로젝트를 생성하면 모델 빌드 저장소(CodeCommit/GitHub)와 모델 배포 저장소가 자동으로 생성됩니다. 빌드 저장소의 변경이 SageMaker Pipeline 실행을 트리거하고, 모델이 Approved 상태가 되면 배포 저장소의 CodePipeline이 프로덕션 엔드포인트 업데이트를 자동으로 수행합니다.

&nbsp;

AWS CI/CD 도구와의 통합

SageMaker Pipelines가 ML 특화 워크플로를 담당한다면, AWS의 범용 CI/CD 도구들은 코드 변경 감지, 빌드, 인프라 배포를 담당합니다.

CodePipeline은 CI/CD 파이프라인의 오케스트레이터 역할을 합니다. 소스 스테이지(CodeCommit, GitHub, ECR 변경 감지), 빌드 스테이지(CodeBuild에서 컨테이너 빌드, 단위 테스트, SageMaker Pipeline 실행), 배포 스테이지(CloudFormation으로 엔드포인트 업데이트)를 연결합니다. CodeBuild는 서버리스 빌드 환경으로 Python 패키지 설치, 모델 통합 테스트, 컨테이너 이미지 빌드와 ECR 푸시를 담당합니다. CodeDeploy는 EC2나 ECS 기반 추론 서버의 배포 전략을 관리합니다.

&nbsp;

배포 전략: 블루/그린, 카나리, 선형

SageMaker 엔드포인트 업데이트는 세 가지 배포 전략을 지원합니다.

블루/그린 배포는 새 버전(그린)을 완전히 프로비저닝한 후 트래픽을 한꺼번에 전환합니다. 전환 전에 그린 환경을 충분히 검증할 수 있고, 문제 발생 시 즉시 롤백이 가능합니다. 일시적으로 두 배의 인스턴스를 유지해야 하는 비용이 있습니다.

카나리 배포는 트래픽의 일부(예: 5%)를 새 버전으로 먼저 보내고, 지표를 모니터링한 후 안전하다고 판단되면 나머지를 전환합니다. 프로덕션 트래픽으로 새 버전을 점진적으로 검증할 수 있습니다.

선형 배포는 일정 시간 간격으로 트래픽 비율을 단계적으로 높입니다. 예를 들어 10분마다 10%씩 증가시키는 방식입니다. 카나리보다 점진적이지만 전환 완료까지 더 오래 걸립니다.

!SageMaker 배포 전략 3가지

Step Functions: 복잡한 ML 워크플로

Step Functions는 SageMaker Pipelines보다 더 광범위한 AWS 서비스 통합이 필요할 때 유용합니다. Lambda 함수, ECS/Fargate 태스크, AWS Glue 작업, SNS/SQS, DynamoDB를 네이티브로 통합할 수 있으며, 복잡한 오류 처리와 재시도 로직을 상태 머신으로 표현합니다.

SageMaker Pipelines가 ML 실험 추적과 아티팩트 계보에 특화되어 있다면, Step Functions는 이기종 서비스 조합, 병렬 처리, 복잡한 분기 논리에 강합니다. 실제로는 두 서비스를 조합하기도 합니다 — Step Functions가 전체 오케스트레이션을 담당하고, SageMaker Pipeline을 하나의 태스크로 호출하는 방식입니다.

&nbsp;

EventBridge와 자동 재훈련 트리거

EventBridge는 이벤트 기반으로 ML 파이프라인을 트리거하는 허브 역할을 합니다. 스케줄 기반 재훈련(cron 표현식), Model Registry의 승인 상태 변경 이벤트를 감지해 CodePipeline 실행, SageMaker Model Monitor의 데이터 드리프트 알람을 받아 재훈련 파이프라인 시작, 그리고 S3에 새 데이터가 도착하면 자동으로 파이프라인을 실행하는 것이 가능합니다.

이를 통해 인간의 개입 없이 데이터 드리프트가 감지되면 자동으로 모델을 재훈련하고, 평가를 통과하면 자동으로 프로덕션에 배포하는 완전 자동화 재훈련 루프를 구현할 수 있습니다.

&nbsp;

테스트 전략과 모델 승인 게이트

소프트웨어 CI/CD처럼 ML 파이프라인에도 다양한 수준의 테스트가 필요합니다. 단위 테스트는 전처리 함수, 피처 엔지니어링 로직, 커스텀 훈련 코드의 정확성을 검증합니다. 통합 테스트는 파이프라인 전체를 소규모 데이터로 실행하여 엔드투엔드 흐름이 정상인지 확인합니다. 모델 검증 테스트는 홀드아웃 데이터셋에서 성능 지표(정확도, F1, RMSE 등)가 기준치를 만족하는지, 편향성 평가를 통과하는지, 추론 지연 시간이 SLA 내에 있는지를 확인합니다.

모델 승인 게이트는 자동 검증과 수동 검토의 두 단계로 구성됩니다. ConditionStep의 자동 검증을 통과하면 Model Registry에 등록되고, 이후 데이터 과학자의 수동 승인 또는 전적으로 자동화된 승인(지표만으로 판단) 중 하나를 선택합니다. 규제가 강한 산업(의료, 금융)에서는 수동 검토가 필수적이며, 이를 인간 참여 루프(Human-in-the-loop)라고 합니다.

&nbsp;

버전 관리와 지속적 훈련

Git 기반 버전 관리는 코드만이 아닌 파이프라인 정의, 하이퍼파라미터 구성, 평가 기준도 포함해야 합니다. SageMaker Experiments는 실험 실행마다 코드 버전, 데이터 버전, 파라미터, 지표를 자동으로 연결하여 아티팩트 계보를 추적합니다.

지속적 훈련(Continuous Training)은 모델 성능이 일정 수준 이하로 떨어지거나 새로운 데이터가 충분히 쌓이면 자동으로 재훈련을 트리거하는 방식입니다. SageMaker Model Monitor로 데이터 드리프트나 모델 품질 저하를 감지하고, EventBridge 알람으로 재훈련 파이프라인을 시작하는 것이 일반적인 패턴입니다.

&nbsp;

시험 핵심 포인트

"ML 워크플로를 DAG로 정의, 아티팩트 계보 추적" -- SageMaker Pipelines "모델 버전 관리, 승인/거부 상태" -- SageMaker Model Registry "Pending → Approved → 자동 배포 트리거" -- Model Registry + EventBridge + CodePipeline "조건부 스텝, 지표 기준 분기" -- ConditionStep in SageMaker Pipelines "이기종 서비스(Lambda, Glue, ECS) 조합 워크플로" -- AWS Step Functions "MLOps 모범 사례 템플릿, 빠른 시작" -- SageMaker Projects "동일 입력 스텝 재실행 방지" -- 파이프라인 스텝 캐싱 "데이터 드리프트 감지 → 자동 재훈련" -- Model Monitor + EventBridge "인간 검토 포함 배포 승인" -- Human-in-the-loop (CallbackStep 또는 수동 승인) "5% 트래픽을 새 버전으로 먼저 전환" -- 카나리 배포 전략

블로그 목록으로 돌아가기