Module 10

MLflow로 모델 실험 관리

MLOps 과정 | 실험 추적 + 모델 버전 관리 + Champion/Challenger

Section 1

왜 MLflow인가?

지금까지의 문제점

python retrain.py를 실행하면...

  • 터미널에 정확도가 출력되지만 → 터미널 닫으면 사라짐
  • 하이퍼파라미터를 바꿔가며 실험하지만 → 어떤 조합이 좋았는지 기억 안 남
  • 모델 파일을 덮어쓰지만 → 이전 버전으로 되돌릴 수 없음
  • "이 모델이 저번 것보다 좋은가?" → 수동으로 숫자 비교

코드는 Git으로 관리하는데, 모델은 관리 도구가 없다?

MLflow = 모델의 Git

지금까지 우리가 한 것MLflow가 해주는 것
print(f"정확도: {accuracy}")모든 실험 자동 기록 & 웹 UI에서 비교
joblib.dump() → S3 업로드Model Registry (v1, v2, v3...)
if new > old: deployChampion/Challenger 별칭
터미널 출력만 보고 판단웹 UI에서 그래프로 비교

공식 사이트: mlflow.org
GitHub: github.com/mlflow/mlflow (19,000+ Stars)
공식 문서: mlflow.org/docs

Git과 비교하면 쉽습니다

Git (코드 관리)MLflow (모델 관리)
RepositoryExperiment (실험 저장소)
CommitRun (학습 실행 기록)
git logMLflow UI (실험 히스토리)
git diffCompare (실험 비교)
Release Tag (v1.0)Registered Model (Version 1)
main branchChampion alias (운영 모델)

전체 흐름에서의 위치

Module 9
Evidently
드리프트 감지
Module 10
MLflow
실험 관리
S3 → Lambda
→ ECS
자동 배포

Evidently로 드리프트 감지 → retrain.py로 재학습 → MLflow로 기록 & 관리

Section 2

설치 & 핵심 개념

설치 & 서버 실행

pip install mlflow

mlflow --version
# mlflow, version 3.x.x

# 터미널 1: MLflow 서버 실행 (닫지 마세요!)
cd 01-loan-api-server
mlflow server --host 0.0.0.0 --port 5000

브라우저에서 http://localhost:5000 → MLflow UI

핵심 개념 3가지

Experiment
실험 묶음
"대출 심사 모델"
(Git의 Repository)
Run
한 번의 학습 기록
파라미터 + 메트릭 + 모델
(Git의 Commit)
Registered Model
배포용 모델
Version 1, 2, 3...
(Git의 Release Tag)

Experiment 안에 여러 Run이 쌓이고,
좋은 Run의 모델을 Registry에 등록합니다.

Section 3

retrain.py에 MLflow 연동

가장 간단한 방법: autolog()

# retrain.py 상단에 3줄만 추가
import mlflow

mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("loan-approval-retrain")
mlflow.autolog()

# ... 기존 retrain.py 코드 그대로 ...
# pipeline.fit(X_train, y_train) 실행 시 자동 기록!

autolog()가 자동으로 기록하는 것:
- Parameters: n_estimators=100, max_depth=6, learning_rate=0.1
- Metrics: accuracy, f1-score
- Model: 학습된 파이프라인 (StandardScaler + XGBClassifier)
- Tags: 라이브러리 버전, 실행 환경

수동 로깅 (더 세밀한 제어)

with mlflow.start_run():
    # 파라미터 기록
    mlflow.log_params({
        "n_estimators": 100,
        "max_depth": 6,
        "learning_rate": 0.1,
    })

    # 모델 학습
    pipeline.fit(X_train, y_train)
    y_pred = pipeline.predict(X_test)

    # 메트릭 기록
    mlflow.log_metrics({
        "accuracy": accuracy_score(y_test, y_pred),
        "f1_score": f1_score(y_test, y_pred),
        "train_size": len(X_train),
    })

    # 태그 (검색/필터링용)
    mlflow.set_tag("trigger", "drift_detected")

    # 모델 아티팩트 저장
    mlflow.sklearn.log_model(pipeline, artifact_path="model")

실행해보기

# 터미널 2: (MLflow 서버는 터미널 1에서 실행 중)
cd 01-loan-api-server
python retrain.py

  [STEP 4] 모델 학습 (XGBoost)
  새 모델 정확도: 0.8400
  F1 Score: 0.8215
  MLflow Run ID: a1b2c3d4e5f6...

http://localhost:5000 새로고침 →
loan-approval-retrain 실험에 Run이 기록되어 있습니다!

Section 4

MLflow UI에서 실험 비교

여러 번 학습해보기

# 1차: 기본 설정
python retrain.py

# 2차: n_estimators=200으로 변경 후
python retrain.py

# 3차: max_depth=4로 변경 후
python retrain.py

MLflow 없이
터미널 출력 확인 → 닫으면 사라짐
"아까 정확도가 몇이었지?"
MLflow 사용
모든 실행이 자동 저장
언제든 비교 가능!

UI에서 비교하기

  1. Experiments 탭 → loan-approval-retrain
  2. 비교할 Run들을 체크박스 선택
  3. "Compare" 클릭
  4. 파라미터 vs 메트릭 그래프로 확인

볼 수 있는 것들:
- Parameters: n_estimators, max_depth, learning_rate
- Metrics: accuracy, f1_score
- Artifacts: 저장된 모델 파일
- 비교 차트: 파라미터별 성능 그래프

Section 5

Model Registry

Model Registry = 모델 버전 관리

"이 모델이 좋다!" → Registry에 등록
자동으로 버전이 부여됩니다.

Version 1
acc: 0.82
Version 2
acc: 0.84
Version 3
acc: 0.89
champion
Version 4
acc: 0.87
challenger

모델 등록하기

방법 1: UI에서

  1. Run 클릭 → Artifacts 탭
  2. model 폴더 클릭
  3. "Register Model" 클릭
  4. 이름: loan-approval

방법 2: 코드에서

# 한 줄만 추가!
mlflow.sklearn.log_model(
    pipeline,
    artifact_path="model",
    registered_model_name="loan-approval"
)

Champion / Challenger

Champion (챔피언)
현재 운영 중인 모델
실제 서비스에서 사용 중
Challenger (챌린저)
새로 학습한 후보 모델
더 좋으면 Champion으로 승격

from mlflow import MlflowClient

client = MlflowClient("http://localhost:5000")

# 별칭 설정
client.set_registered_model_alias("loan-approval", "champion", version=3)
client.set_registered_model_alias("loan-approval", "challenger", version=4)

# 별칭으로 모델 로드
model = mlflow.pyfunc.load_model("models:/loan-approval@champion")

Stage는 더 이상 사용 안 합니다

이전 MLflow (deprecated)
Staging → Production → Archived
고정된 3단계
MLflow 3.x (현재)
Alias(별칭) 자유롭게 설정
champion, challenger, canary 등

인터넷에서 transition_model_version_stage() 관련 자료를 보면
구버전입니다. 무시하세요! Alias를 사용하세요.

Section 6

자동 승격 + S3 배포

자동화 흐름

retrain.py
모델 학습
MLflow
기록 & 등록
Champion과
성능 비교
더 좋으면
Champion 승격
S3 → ECS
자동 배포

자동 승격 코드

# 기존 Champion과 비교
try:
    champ = client.get_model_version_by_alias("loan-approval", "champion")
    champ_run = client.get_run(champ.run_id)
    champ_acc = float(champ_run.data.metrics["accuracy"])
except Exception:
    champ_acc = 0.0  # 첫 등록

# 비교 후 승격
if new_accuracy > champ_acc:
    client.set_registered_model_alias("loan-approval", "champion", new_version)
    print(f"Champion 승격! Version {new_version}")
    upload_to_s3()  # → Lambda → ECS 자동 재배포
else:
    client.set_registered_model_alias("loan-approval", "challenger", new_version)
    print(f"기존 Champion 유지. v{new_version}은 Challenger.")

실행 결과

  [STEP 1] 데이터 로드 및 병합
  합친 데이터: 2000건

  [STEP 4] 모델 학습 (XGBoost)
  새 모델 정확도: 0.8400
  MLflow Run ID: a1b2c3d4e5f6...

  [STEP 5] MLflow Champion 비교
  현재 Champion (v1) 정확도: 0.8200
  새 모델 정확도: 0.8400

  Champion 승격! Version 2
  S3 업로드 완료!
  → Lambda → ECS 자동 재배포 시작

Section 7

전체 정리

완성된 MLOps 파이프라인

Evidently
드리프트 감지
retrain.py
+ MLflow
Champion
비교 & 승격
S3 → Lambda
→ ECS

cd 01-loan-api-server

# 1. 드리프트 감지 (Module 9)
python detect_drift_evidently.py

# 2. 재학습 + MLflow 기록 + Champion 비교 + S3 배포
python retrain.py

# 3. MLflow UI에서 확인
# http://localhost:5000

Module 10 정리

항목MLflow 없이MLflow 적용
실험 기록터미널 → 사라짐영구 저장 & 검색
성능 비교수동 숫자 비교웹 UI 그래프
모델 버전파일명으로 구분v1, v2, v3...
배포 관리if문 비교Champion/Challenger
재현성파라미터 기억 필요자동 기록

Module 9: Evidently로 드리프트 감지 자동화
Module 10: MLflow로 실험 & 모델 관리 자동화

이것이 현업에서 사용하는 MLOps 표준 도구입니다.

실습

# 1. MLflow 설치 & 서버 실행
pip install mlflow
mlflow server --host 0.0.0.0 --port 5000

# 2. retrain.py에 MLflow 연동 후 실행
python retrain.py

# 3. 하이퍼파라미터 바꿔가며 3번 실행

# 4. MLflow UI에서 비교 & 모델 등록

# 5. Champion/Challenger 별칭 설정

확인 포인트:
- MLflow UI에서 3개 Run이 보이는가?
- 파라미터별 성능 차이를 그래프로 비교했는가?
- Model Registry에 모델을 등록했는가?
- Champion 별칭을 설정했는가?