모델 레지스트리
Model Registry
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 등 대형 모델은 저장 비용이 급증합니다. 델타 스토리지나 모델 압축을 고려하세요.