CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
  • Week 1
    • 1.ML 수명주기(ML Lifecycle): 비즈니스 문제 정의부터 A/B 테스트까지
    • 2.ML용 데이터 저장소: S3·EFS·FSx for Lustre·데이터 포맷
    • 3.데이터 수집: Kinesis·Glue·배치 vs 스트리밍
    • 4.데이터 레이블링: SageMaker Ground Truth·액티브 러닝(Active Learning)·레이블 품질
    • 5.1주차 종합 복습: ML 개요와 데이터 엔지니어링 1
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
    • 1.모델 모니터링: SageMaker Model Monitor와 드리프트 대응
    • 2.MLOps 자동화: SageMaker Pipelines·Model Registry·CI/CD
    • 3.ML 보안: IAM 실행 역할·VPC 격리·KMS 암호화
    • 4.운영과 비용: 비용 최적화·로깅과 감사·재해 복구
    • 5.11주차 종합 복습: 모니터링·MLOps·보안·운영
  • Week 12
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← MLS-C01/Week 11/Day 2

기준: MLS-C01 시험 가이드·오류 제보

MLS-C01· AssociateWeek 11 · Day 2읽기 약 13분
핵심 정리
  • 드리프트를 탐지해도 재학습이 수동이면 운영이 무너진다. MLOps는 처리→학습→평가→등록→배포를 코드로 정의해 반복 가능·추적 가능하게 만드는 일이다.
  • SageMaker Pipelines는 Step들을 DAG로 엮는다. 각 Step은 Processing·Training·Tuning·Condition·RegisterModel·Transform 등으로 구성된다.
  • ConditionStep이 품질 게이트다. "평가 AUC가 임계값 미만이면 등록하지 않는다"로 나쁜 모델의 자동 승격을 막는다.
  • Model Registry는 버전·승인 상태·계보를 관리한다. 등록 시 PendingManualApproval, 승인해야 Approved가 되어 배포 자동화가 이어진다.
  • SageMaker Projects는 ModelBuild/ModelDeploy 2개 리포와 CodePipeline CI/CD를 자동 프로비저닝하고, 배포는 Blue/Green·Canary·Linear·Shadow로 안전하게 굴린다.

Day 2 - MLOps 자동화: SageMaker Pipelines·Model Registry·CI/CD

MLOps가 푸는 3가지 문제

노트북에서 모델 한 번 돌리고 콘솔에서 손으로 배포하는 방식은 재현도, 추적도, 협업도 안 된다.

문제수동 ML에서 벌어지는 일MLOps의 해법AWS 구성 요소
재현성"지난달 그 모델 어떻게 만들었죠?" — 아무도 모른다같은 코드 + 같은 데이터 → 같은 결과가 되도록 워크플로를 코드로 고정SageMaker Pipelines
거버넌스어떤 데이터로 학습했는지, 누가 승인했는지 기록이 없다버전·지표·승인 상태·계보를 한곳에 축적Model Registry, Lineage
자동화재학습·배포가 사람 손에 묶여 지연되고 실수가 난다커밋·이벤트가 학습·배포를 트리거Projects, CodePipeline, EventBridge

💡 개념: 세 문제는 독립이 아니다. 재현성이 없으면 거버넌스 기록이 무의미하고, 거버넌스 게이트가 없으면 자동화는 나쁜 모델을 더 빠르게 배포할 뿐이다. 자동화는 게이트가 먼저 서 있을 때만 안전하다.

SageMaker Pipelines: ML 워크플로를 DAG로

Pipelines는 Step들을 방향성 비순환 그래프(DAG)로 연결한다. Step 사이의 의존성은 한 Step의 출력(properties)을 다른 Step의 입력으로 참조하면 자동으로 만들어진다.

주요 Step 종류

Step하는 일전형적 용도
ProcessingStepProcessing Job 실행전처리, 피처 엔지니어링, 모델 평가
TrainingStepTraining Job 실행모델 학습
TuningStepHyperparameter Tuning Job 실행최적 하이퍼파라미터 탐색
TransformStepBatch Transform 실행대량 오프라인 추론
CreateModelStep학습 산출물로 Model 객체 생성배포·배치 변환 준비
RegisterModel (스텝 컬렉션)Model Registry에 모델 패키지 등록버전 관리·승인 게이트 진입
ConditionStep조건 분기(if_steps/else_steps)품질 게이트
FailStep파이프라인을 명시적으로 실패 처리기준 미달 시 실행 중단 표시
LambdaStepLambda 함수 호출짧은 커스텀 로직, 알림, 외부 API
CallbackStepSQS로 외부 시스템에 넘기고 응답 대기사람 검토, 사내 시스템 연동
QualityCheckStep / ClarifyCheckStep품질·편향 베이스라인 검사드리프트·공정성 회귀 방지
EMRStepEMR에서 Spark 작업 실행대규모 분산 전처리

파이프라인 DAG

[ParameterString input_data]
        │
        ▼
 ┌───────────────┐    ┌──────────────┐    ┌────────────────┐
 │ ProcessingStep│──▶ │ TrainingStep │──▶ │ ProcessingStep │
 │  "Preprocess" │    │   "Train"    │    │   "Evaluate"   │
 └───────────────┘    └──────────────┘    └────────┬───────┘
   train/val/test        model.tar.gz        evaluation.json
                                                   │
                                                   ▼
                                        ┌──────────────────────┐
                                        │  ConditionStep       │
                                        │  AUC >= 0.80 ?       │
                                        └───┬──────────────┬───┘
                                    if_steps│              │else_steps
                                            ▼              ▼
                                   ┌─────────────┐   ┌───────────┐
                                   │RegisterModel│   │ FailStep  │
                                   └──────┬──────┘   └───────────┘
                                          ▼
                        [Model Registry] PendingManualApproval
                                          │ 승인(Approved)
                                          ▼
                      [EventBridge] ─▶ [ModelDeploy CodePipeline] ─▶ 엔드포인트

정의 코드

from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.steps import ProcessingStep, TrainingStep
from sagemaker.workflow.condition_step import ConditionStep
from sagemaker.workflow.conditions import ConditionGreaterThanOrEqualTo
from sagemaker.workflow.functions import JsonGet
from sagemaker.workflow.parameters import ParameterString, ParameterFloat
 
input_data   = ParameterString(name="InputData", default_value="s3://bucket/raw/")
auc_threshold = ParameterFloat(name="AucThreshold", default_value=0.80)
 
step_process = ProcessingStep(name="Preprocess", processor=sklearn_proc, ...)
step_train   = TrainingStep(name="Train", estimator=xgb, ...)
step_eval    = ProcessingStep(name="Evaluate", processor=eval_proc,
                              property_files=[eval_report], ...)
 
# 평가 지표가 임계값 이상일 때만 등록
cond = ConditionGreaterThanOrEqualTo(
    left=JsonGet(step_name=step_eval.name, property_file=eval_report,
                 json_path="metrics.auc.value"),
    right=auc_threshold,
)
step_cond = ConditionStep(name="AUCThreshold", conditions=[cond],
                          if_steps=[step_register], else_steps=[step_fail])
 
pipeline = Pipeline(
    name="churn-pipeline",
    parameters=[input_data, auc_threshold],
    steps=[step_process, step_train, step_eval, step_cond],
)
pipeline.upsert(role_arn=role)
pipeline.start()
조건 클래스검사 내용
ConditionGreaterThanOrEqualTo / ConditionLessThanOrEqualTo지표가 임계값 이상/이하인가
ConditionEquals / ConditionIn값이 일치하는가 / 허용 목록 안에 있는가
ConditionNot / ConditionOr조건 부정 / 여러 조건 결합
  • 파라미터화: ParameterString·ParameterInteger·ParameterFloat로 입력 경로·임계값·인스턴스 타입을 실행 시점에 주입한다. 코드 수정 없이 재실행할 수 있다.
  • 캐싱: CacheConfig(enable_caching=True, expire_after="30d")를 Step에 붙이면 동일 입력의 Step을 재실행하지 않아 시간·비용을 아낀다.
  • 평가 지표 전달: 평가 Step이 쓴 JSON을 PropertyFile로 선언하고 JsonGet으로 특정 경로를 읽어 조건에 넣는다.

ConditionStep은 MLOps 품질 게이트의 심장이다. "평가 AUC가 0.80 미만이면 등록하지 않는다"처럼, 나쁜 모델이 자동으로 프로덕션에 흘러드는 것을 막는다. 시험에서 "기준 미달 모델의 배포를 자동으로 차단하라" 는 지문은 ConditionStep + Model Registry 승인 게이트 조합으로 매핑된다.

Model Registry: 버전과 승인 거버넌스

학습된 모델은 Model Package Group 안에 버전(Model Package) 단위로 등록된다.

from sagemaker.workflow.step_collections import RegisterModel
 
step_register = RegisterModel(
    name="RegisterModel",
    estimator=xgb,
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    content_types=["text/csv"], response_types=["text/csv"],
    inference_instances=["ml.m5.large"],
    transform_instances=["ml.m5.large"],
    model_package_group_name="churn-models",
    approval_status="PendingManualApproval",   # 승인 게이트
    model_metrics=model_metrics,               # 평가 지표를 버전에 첨부
)
churn-models (Model Package Group)
├── v1  Approved                (운영 중)
├── v2  Rejected                (평가 기준 미달)
└── v3  PendingManualApproval   (검토 대기)

승인 상태 전이

전이계기결과
(신규 등록) → PendingManualApprovalRegisterModel의 기본 설정배포 대상이 아님. 검토 대기
PendingManualApproval → Approved담당자 승인 또는 자동 규칙Model Package State Change 이벤트 발생 → 배포 파이프라인 트리거
PendingManualApproval → Rejected지표 미달·리스크 판단배포되지 않고 기록만 남음
Approved → Rejected운영 중 문제 발견신규 배포 차단. 이전 Approved 버전으로 롤백
Rejected → Approved재검토·이슈 해소다시 배포 가능 상태
  • 상태는 UpdateModelPackage API(또는 Studio UI)로 바꾼다. 상태 변경 자체가 이벤트가 되므로 승인이 곧 배포 트리거다.
  • 파이프라인에서 approval_status="Approved"로 바로 등록할 수도 있지만, 사람 검토를 없애는 선택이라 규제 환경에서는 권장되지 않는다.

계보(Lineage)와 롤백

[데이터셋 S3] ─▶ [Processing Job] ─▶ [Training Job] ─▶ [Model Package v3]
   Artifact          Action             Action            Artifact
      └──────── Association(연결 관계)로 전 구간 추적 ────────┘
 
롤백: v3 → Rejected , v1 → Approved  ─▶ ModelDeploy가 v1을 재배포
  • Lineage Tracking은 데이터·처리·학습·모델을 Artifact/Action/Context와 Association으로 자동 연결한다. 덕분에 "이 예측을 낸 모델은 어떤 데이터로, 누가 승인해 배포됐나"에 답할 수 있다.

Model Registry는 "어떤 모델 아티팩트가 어떤 학습 Job·지표·데이터에서 왔는가"를 묶는 계보의 중심이다. 승인 상태(Approved/Rejected/Pending)는 사람 또는 자동화가 거버넌스를 강제하는 스위치이며, 롤백은 새 배포가 아니라 이전 Approved 버전의 재배포로 이뤄진다.

SageMaker Projects와 CI/CD

SageMaker Projects는 MLOps 템플릿으로 2개 리포지토리와 파이프라인을 자동 프로비저닝한다.

┌──── ModelBuild 리포 (pipelines/ , tests/) ────┐
│ git push ─▶ CodePipeline ─▶ CodeBuild         │
│                └─▶ SageMaker Pipeline 실행     │
│                       └─▶ Model Registry 등록  │
└───────────────────────────────────────────────┘
                 │ 승인(Approved) 이벤트
                 ▼
┌──── ModelDeploy 리포 (CloudFormation 템플릿) ──┐
│ EventBridge ─▶ CodePipeline                   │
│     ├─▶ Staging 엔드포인트 배포                │
│     ├─▶ 수동 승인 단계                         │
│     └─▶ Production 엔드포인트 배포             │
└───────────────────────────────────────────────┘
서비스역할이 흐름에서 하는 일
CodeCommit / Git소스 저장소파이프라인 정의·배포 템플릿의 버전 관리
CodeBuild빌드·테스트 실행파이프라인 정의 실행, 단위·데이터 검증 테스트
CodePipeline오케스트레이션소스→빌드→배포 단계 연결, 수동 승인 단계 삽입
CloudFormationIaC 배포엔드포인트·엔드포인트 설정을 코드로 생성·갱신
EventBridge이벤트 라우팅모델 승인 이벤트를 받아 ModelDeploy 파이프라인 시작
Model Registry거버넌스승인 상태로 배포 여부를 통제
# buildspec.yml 발췌 (CodeBuild)
phases:
  build:
    commands:
      - python pipelines/run_pipeline.py --module-name pipelines.churn.pipeline
      - python -m pytest tests/    # 코드·데이터 검증 테스트

⚠️ 함정: CI/CD를 붙였다고 게이트가 생기는 게 아니다. ConditionStep(모델 품질)과 Model Registry 승인(사람·정책), 그리고 Staging 검증 — 세 겹의 게이트가 서 있어야 자동화가 안전해진다.

배포 전략 비교

새 모델을 전체 트래픽에 한 번에 보내지 않는다. SageMaker 엔드포인트는 점진 배포를 지원한다.

전략트래픽 흐름롤백 속도사용자 영향언제 쓰나
Blue/Green (All-at-once)새 플릿 준비 후 100% 한 번에 전환빠름(구 플릿을 베이킹 기간 유지)문제 시 전체 사용자기본 안전 배포. 변경이 검증된 경우
Canary소량(예: 10%)만 새 플릿 → 검증 후 전환매우 빠름(소수만 되돌림)소수 사용자만위험 최소화가 최우선일 때
Linear정해진 비율만큼 여러 단계로 점증빠름(단계 중단 후 되돌림)단계별로 점진 증가단계마다 지표를 보며 넘어갈 때
Rolling인스턴스를 배치 단위로 순차 교체중간(진행분 되돌림)교체된 배치의 사용자대규모 플릿을 비용 효율적으로 교체
Shadow운영 트래픽을 복제해 보내고 응답은 버림즉시(실사용 아님)없음실제 트래픽으로 사전 검증만 할 때
A/B (Production Variant)한 엔드포인트의 variant에 가중치로 분배가중치 조정으로 즉시그룹별로 다른 모델두 모델 성능을 실측 비교할 때
  • Blue/Green·Canary·Linear·Rolling은 엔드포인트 업데이트 방식, A/B와 Shadow는 동시 운영·비교 방식이다. 목적이 다르다.
  • 배포 설정에 CloudWatch 경보를 연결해 자동 롤백을 건다. 오류율·지연이 임계값을 넘으면 이전 구성으로 되돌린다.

지문 단서 → 정답 매핑

지문 단서고를 답이유
"평가 지표가 기준 미달이면 등록하지 말고 중단"ConditionStep(+FailStep)지표를 임계값과 비교해 분기하는 품질 게이트
"어떤 모델이 어떤 데이터로 학습됐는지 추적, 빠른 롤백"Model Registry(+Lineage)버전·승인 상태·계보를 관리
"새로 등록된 모델의 기본 승인 상태는?"PendingManualApproval검토 전까지 배포 대상이 아님
"승인되면 자동으로 배포 파이프라인이 돌아야 한다"EventBridge → CodePipeline모델 패키지 상태 변경 이벤트를 라우팅
"빌드·배포 리포와 CI/CD를 템플릿으로 한 번에"SageMaker ProjectsModelBuild/ModelDeploy 자동 프로비저닝 + IaC 배포
"소량 트래픽으로 먼저 검증 후 확대"Canary노출 범위를 최소화한 점진 전환
"두 모델의 성능을 실제 트래픽으로 비교"A/B(Production Variant) 가중치 분배한 엔드포인트에서 동시 서빙·비교
"사용자에게 영향 없이 실제 트래픽으로 사전 검증"Shadow 배포트래픽을 복제하고 응답은 반환하지 않음
"같은 전처리 Step을 매번 다시 돌리기 아깝다"CacheConfig로 Step 캐싱동일 입력 Step 재실행 생략
"입력 경로·임계값을 실행마다 바꿔 재사용"Pipeline Parameters정의 수정 없이 실행 시점 주입
"노트북에서 수동 배포로 충분"오답 보기재현성·거버넌스가 무너짐

파이프라인 점검 체크리스트

  • 평가 Step의 지표가 PropertyFile·JsonGet으로 조건에 연결되어 있는가
  • ConditionStep의 else_steps가 비어 있지 않고 실패를 명시하는가
  • 등록 시 승인 상태가 조직 정책(수동/자동)과 일치하는가
  • 배포 전략에 자동 롤백용 CloudWatch 경보가 연결되어 있는가

다음 글에서는 이 모든 파이프라인을 떠받치는 ML 보안 — IAM 실행 역할, VPC 격리, KMS 암호화를 다룬다.

📖 용어

  • MLOps : 데이터 처리·학습·평가·등록·배포를 코드와 자동화로 묶어 반복 가능하고 추적 가능하게 만드는 운영 방식.
  • DAG(방향성 비순환 그래프) : Step들이 화살표로 연결되고 순환하지 않는 구조. 무엇이 무엇보다 먼저 실행되는지가 정의된다.
  • Step : 파이프라인을 이루는 최소 실행 단위. 처리·학습·튜닝·조건·등록 등 종류가 정해져 있다.
  • ConditionStep : 평가 지표 같은 값을 조건과 비교해 실행 경로를 나누는 Step. 품질 게이트의 핵심이다.
  • PropertyFile / JsonGet : 평가 Step이 남긴 JSON 결과에서 특정 지표 값을 꺼내 조건에 넣는 장치.
  • Model Package Group : 같은 목적의 모델 버전들을 모아 두는 상자. 그 안에 v1, v2… 버전이 쌓인다.
  • PendingManualApproval : 새 모델 버전의 기본 승인 상태. 검토를 통과해 Approved가 되기 전에는 배포 대상이 아니다.
  • 계보(lineage) : 데이터→처리→학습→모델로 이어지는 연결 기록. 감사·재현·롤백의 근거가 된다.
  • SageMaker Projects : ModelBuild/ModelDeploy 리포와 CI/CD 파이프라인을 한 번에 만들어 주는 MLOps 템플릿.
  • Production Variant / Shadow 배포 : Production Variant 는 하나의 엔드포인트 안에서 가중치를 나눠 여러 모델을 동시에 서빙하는 단위. A/B 비교에 쓴다. Shadow 배포는 실제 트래픽을 복제해 새 모델에 흘려보내되 응답은 사용자에게 주지 않는 검증 방식.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

SageMaker Pipeline에서 학습된 모델의 검증 AUC가 0.75 미만이면 Model Registry에 등록하지 않고 파이프라인을 중단하고 싶다. 사용해야 할 구성 요소는?

문제 2

운영 모델에 문제가 생겨 이전 버전으로 빠르게 되돌리고, "현재 어떤 모델이 어떤 데이터로 학습됐는지" 추적하려 한다. 가장 적합한 SageMaker 기능은?

문제 3

새 모델을 프로덕션에 출시하되 처음에는 소량의 실제 트래픽만 보내 문제가 없는지 확인한 뒤 점차 비중을 늘리려 한다. 가장 적합한 배포 전략은?

문제 4

SageMaker Projects가 제공하는 MLOps 템플릿의 핵심 가치로 가장 정확한 것은?

문제 5

Model Registry에 새로 등록된 모델 버전의 기본 승인 상태는 일반적으로 무엇이며, 그 의미는?

이전모델 모니터링: SageMaker Model Monitor와 드리프트 대응Week 11 · Day 1다음 ML 보안: IAM 실행 역할·VPC 격리·KMS 암호화Week 11 · Day 3

참고 공식 자료

  • MLS-C01 공식 시험 안내(새 탭에서 열림)
  • Amazon SageMaker AI 공식 문서(새 탭에서 열림)
  • AWS CodePipeline 공식 문서(새 탭에서 열림)
  • Amazon EventBridge 공식 문서(새 탭에서 열림)

이 페이지

  • MLOps가 푸는 3가지 문제
  • SageMaker Pipelines: ML 워크플로를 DAG로
  • 주요 Step 종류
  • 파이프라인 DAG
  • 정의 코드
  • Model Registry: 버전과 승인 거버넌스
  • 승인 상태 전이
  • 계보(Lineage)와 롤백
  • SageMaker Projects와 CI/CD
  • 배포 전략 비교
  • 지문 단서 → 정답 매핑
  • 파이프라인 점검 체크리스트
  • 용어
  • 연습 문제