LESSON

モデルレジストリ

田中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分