🤖 AI/ML

모델 레지스트리

Model Registry

ML 모델 버전 관리 저장소. 배포, 롤백 관리.

📖 상세 설명

모델 레지스트리(Model Registry)는 머신러닝 모델의 전체 생명주기를 관리하는 중앙 저장소입니다. 모델 아티팩트, 메타데이터, 버전 히스토리, 배포 상태를 체계적으로 추적하여 ML 운영(MLOps)의 핵심 인프라 역할을 합니다.

모델 레지스트리의 핵심 기능은 버전 관리입니다. 각 모델은 고유한 버전으로 등록되며, 학습 코드, 데이터셋 버전, 하이퍼파라미터, 성능 메트릭이 함께 기록됩니다. 이를 통해 특정 시점의 모델을 정확하게 재현하고, 문제 발생 시 이전 버전으로 롤백할 수 있습니다.

배포 관리 측면에서 모델 레지스트리는 스테이지(Stage) 개념을 제공합니다. 일반적으로 'Staging', 'Production', 'Archived' 등의 스테이지로 모델의 배포 상태를 관리합니다. 새 모델이 테스트를 통과하면 Staging에서 Production으로 승격되고, 구버전은 자동으로 Archived로 이동합니다.

대표적인 도구로는 MLflow Model Registry, AWS SageMaker Model Registry, Azure ML Model Registry, Weights & Biases 등이 있습니다. 조직의 규모와 클라우드 환경에 따라 적합한 도구를 선택하되, 팀 협업과 자동화 파이프라인과의 통합을 고려해야 합니다.

💻 코드 예제

MLflow를 사용한 모델 레지스트리 관리 예제입니다:

import mlflow
from mlflow.tracking import MlflowClient
import sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# MLflow 서버 설정
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("iris-classification")

# 1. 모델 학습 및 등록
with mlflow.start_run() as run:
    # 데이터 준비
    X, y = load_iris(return_X_y=True)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

    # 모델 학습
    params = {"n_estimators": 100, "max_depth": 5}
    model = RandomForestClassifier(**params)
    model.fit(X_train, y_train)

    # 메트릭 기록
    accuracy = model.score(X_test, y_test)
    mlflow.log_params(params)
    mlflow.log_metric("accuracy", accuracy)

    # 모델 레지스트리에 등록
    model_info = mlflow.sklearn.log_model(
        model,
        "model",
        registered_model_name="iris-classifier"
    )
    print(f"모델 버전: {model_info.registered_model_version}")

# 2. 모델 스테이지 관리
client = MlflowClient()

# Staging으로 승격
client.transition_model_version_stage(
    name="iris-classifier",
    version=1,
    stage="Staging"
)

# Production으로 배포
client.transition_model_version_stage(
    name="iris-classifier",
    version=1,
    stage="Production",
    archive_existing_versions=True  # 기존 Production 버전 자동 아카이브
)

# 3. Production 모델 로드 및 추론
model_uri = "models:/iris-classifier/Production"
loaded_model = mlflow.sklearn.load_model(model_uri)

prediction = loaded_model.predict([[5.1, 3.5, 1.4, 0.2]])
print(f"예측 결과: {prediction}")

# 4. 모델 버전 히스토리 조회
for mv in client.search_model_versions("name='iris-classifier'"):
    print(f"버전 {mv.version}: {mv.current_stage} (생성: {mv.creation_timestamp})")

📊 성능 & 비용

솔루션 비용 특징 적합 규모
MLflow (OSS) 무료 (인프라 비용만) 유연성, 커뮤니티 스타트업~대기업
AWS SageMaker 모델당 ~$0.05/GB/월 AWS 생태계 통합 AWS 사용 기업
Azure ML 워크스페이스 기반 엔터프라이즈 보안 기업 고객
Weights & Biases $50/user/월 (팀) 실험 추적 통합 연구팀~스타트업
DVC + Git 무료 Git 기반 버전관리 소규모 팀

🗣️ 실무에서 이렇게 말하세요

"이 모델 레지스트리에 등록해두고, CI/CD 파이프라인에서 자동 배포되게 설정할게요."
자동화된 ML 배포 워크플로우를 구축할 때 사용합니다.

"어제 배포한 v3에서 문제가 있어서 v2로 롤백했습니다. 레지스트리에서 바로 됐어요."
장애 대응 상황에서 빠른 복구를 보고할 때 씁니다.

"모델 리니지 추적을 위해 학습 데이터셋 버전도 메타데이터에 기록해주세요."
모델 거버넌스와 재현성 확보를 위한 요청입니다.

⚠️ 흔한 실수 & 주의사항

1. 메타데이터 누락: 모델만 저장하고 학습 설정, 데이터 버전, 의존성을 기록하지 않으면 재현이 불가능합니다. 최소한 requirements.txt와 함께 저장하세요.

2. 무분별한 버전 생성: 모든 실험을 레지스트리에 등록하면 관리가 어려워집니다. 실험 추적(Experiment Tracking)과 분리하여 검증된 모델만 등록하세요.

3. 접근 권한 미설정: Production 모델을 아무나 수정할 수 있으면 위험합니다. 스테이지별 권한을 설정하고 승인 프로세스를 도입하세요.

4. 대용량 모델 저장 비용: LLM 등 대형 모델은 저장 비용이 급증합니다. 델타 스토리지나 모델 압축을 고려하세요.

🔗 관련 용어

  • MLOps: 머신러닝 시스템의 개발과 운영을 자동화하는 방법론
  • 모델 모니터링: 배포된 모델의 성능을 지속적으로 감시
  • 피처 스토어: ML 피처를 중앙에서 관리하는 저장소
  • CI/CD: 지속적 통합/배포로 모델 배포 자동화
  • 모델 리니지: 모델의 출처와 변환 과정을 추적

📚 더 배우기