モデルレジストリ
田中VPoE「実験トラッキングで良いモデルが見つかった後、どうやって本番にデプロイする?」
あなた「今までは pickle で保存して Slack で共有して…」
田中VPoE「その運用はもう終わりだ。モデルレジストリを使えば、モデルのバージョン管理、ステージ管理、承認プロセスをすべて一元管理できる。」
モデルレジストリとは
モデルレジストリは、学習済みモデルのライフサイクル全体を管理するための中央リポジトリです。
従来の方法 vs モデルレジストリ
| 項目 | 従来の方法 | モデルレジストリ |
|---|---|---|
| 保存場所 | ローカル / S3(バラバラ) | 中央リポジトリに一元管理 |
| バージョン管理 | ファイル名に日付を付ける | 自動バージョニング |
| ステージ管理 | なし | Staging → Production の遷移 |
| 承認プロセス | Slackで口頭確認 | 正式な承認フロー |
| メタデータ | README に記述(あれば) | 自動で紐付け |
| ロールバック | 手動で前のファイルを探す | ワンクリック |
MLflow Model Registry
モデルの登録
import mlflow
# 方法1: 実験Run内でモデルを登録
with mlflow.start_run():
model = train_model(X_train, y_train)
mlflow.sklearn.log_model(
model, "model",
registered_model_name="churn_predictor"
)
# → churn_predictor のVersion 1として登録
# 方法2: 既存のRunからモデルを登録
result = mlflow.register_model(
model_uri="runs:/abc123def456/model",
name="churn_predictor"
)
バージョン管理
モデルレジストリでは、同じモデル名で複数のバージョンを管理できます。
# 新バージョンの登録(自動インクリメント)
with mlflow.start_run():
model_v2 = train_improved_model(X_train, y_train)
mlflow.sklearn.log_model(
model_v2, "model",
registered_model_name="churn_predictor"
)
# → churn_predictor のVersion 2として登録
ステージ管理
MLflow Model Registry では、モデルに以下のステージ(エイリアス)を設定できます。
| ステージ | 説明 | 用途 |
|---|---|---|
| None | 初期状態 | 登録直後 |
| Staging | ステージング環境 | 本番前のテスト |
| Production | 本番環境 | ユーザー向けサービス |
| Archived | アーカイブ済み | 非アクティブ |
from mlflow import MlflowClient
client = MlflowClient()
# ステージの変更(MLflow 2.x ではエイリアスを推奨)
# エイリアスによるステージ管理
client.set_registered_model_alias(
name="churn_predictor",
alias="staging",
version=2
)
# 本番昇格
client.set_registered_model_alias(
name="churn_predictor",
alias="production",
version=2
)
# エイリアスでモデルを取得
model = mlflow.pyfunc.load_model("models:/churn_predictor@production")
モデルの説明とタグ
# モデルの説明を追加
client.update_registered_model(
name="churn_predictor",
description="顧客離脱予測モデル。月次バッチで全顧客のスコアリングに使用。"
)
# バージョンの説明
client.update_model_version(
name="churn_predictor",
version=2,
description="特徴量選択を実施、F1スコア5%向上。XGBoostベース。"
)
# タグの追加
client.set_model_version_tag(
name="churn_predictor",
version=2,
key="approved_by",
value="tanaka_vpoe"
)
client.set_model_version_tag(
name="churn_predictor",
version=2,
key="approval_date",
value="2025-12-15"
)
承認プロセスの設計
NetShop社の承認フロー
1. DS がモデルを学習・評価
↓
2. モデルレジストリに登録(None ステージ)
↓
3. 自動テスト実行(精度閾値、データバリデーション)
↓ テスト通過
4. Staging に昇格
↓
5. ステージング環境でA/Bテスト or シャドーテスト
↓ 問題なし
6. レビュー(田中VPoE承認)
↓ 承認
7. Production に昇格
↓
8. 旧モデルを Archived に変更
承認チェックリスト
def approval_checklist(model_name, version):
"""本番昇格前のチェックリスト"""
checks = {
"accuracy_threshold": check_accuracy(model_name, version) > 0.80,
"f1_threshold": check_f1(model_name, version) > 0.75,
"latency_check": check_latency(model_name, version) < 100, # ms
"data_validation": check_data_quality(model_name, version),
"bias_check": check_fairness(model_name, version),
"staging_test": check_staging_results(model_name, version),
"documentation": check_documentation(model_name, version),
}
all_passed = all(checks.values())
return checks, all_passed
モデルのロードと利用
本番環境でのモデル利用
import mlflow
# エイリアスで本番モデルを取得
model = mlflow.pyfunc.load_model("models:/churn_predictor@production")
# 推論
predictions = model.predict(new_data)
# モデル情報の確認
model_info = mlflow.models.get_model_info("models:/churn_predictor@production")
print(f"Model Version: {model_info.model_version}")
print(f"Run ID: {model_info.run_id}")
ロールバック
# 問題発生時のロールバック
# 前のバージョンをProductionに戻す
client.set_registered_model_alias(
name="churn_predictor",
alias="production",
version=1 # 前のバージョンに戻す
)
print("Rolled back to version 1")
まとめ
| 項目 | ポイント |
|---|---|
| モデルレジストリ | モデルのライフサイクル一元管理 |
| バージョン管理 | 自動インクリメント、全バージョン保持 |
| ステージ管理 | None → Staging → Production → Archived |
| 承認プロセス | 自動テスト + 手動レビューの組み合わせ |
| ロールバック | エイリアスの切り替えで即座に復旧 |
チェックリスト
- モデルレジストリの必要性を説明できる
- MLflow でモデルの登録・バージョン管理ができる
- ステージ管理(エイリアス)の運用方法を理解している
- 承認プロセスを設計できる
次のステップへ
モデルレジストリでモデルの管理方法を学びました。次は、コード・データ・環境のバージョニングによる再現性の確保を学びましょう。
推定読了時間:30分