MLflow Model Registryは、学習済みモデルのバージョン管理、昇格フロー(Challenger → Champion)、 権限管理、Model Servingへのデプロイを一元的に管理するDatabricksの中核機能です。 2024年以降、DatabricksはWorkspace版Model Registryから Unity Catalog(UC)版Model Registryへの移行を推進しており、 UC版ではエイリアス機能やクロスワークスペース共有などの強化が行われています。
この記事では、Model Registryの全体像、Workspace版とUC版の違い、 モデル登録・エイリアス運用の実装、昇格フロー設計を解説します。
Model Registryは、MLflowエコシステムの「モデルカタログ」に相当するコンポーネントです。 MLflow Trackingで記録した実験RunのモデルアーティファクトをRegistryに登録すると、 以下の管理機能が使えるようになります。
| 比較項目 | 旧Workspace版 | UC版(推奨) |
|---|---|---|
| 名前空間 | フラット(モデル名のみ) | 3層(catalog.schema.model_name) |
| モデル状態管理 | ステージ(Staging / Production / Archived) | エイリアス(Champion / Challenger / 自由定義) |
| 権限管理 | ワークスペースACL | Unity Catalog GRANT / DENY |
| クロスワークスペース | 不可(ワークスペースに閉じる) | 可能(同一UCメタストア配下) |
| リネージ追跡 | 限定的 | 学習データテーブルまでの自動追跡 |
| 監査ログ | ワークスペースログ | UC System Tables(audit_logs) |
| Webhooks | 対応 | 対応 |
| 今後のサポート | 非推奨(将来的に廃止予定) | 推奨・アクティブ開発中 |
モデルをModel Registryに登録する基本フローは以下の通りです。
import mlflow
from mlflow import MlflowClient
# 1. UC版を使用するためにRegistry URIを設定
mlflow.set_registry_uri("databricks-uc")
# 2. 学習 + Tracking記録
with mlflow.start_run() as run:
mlflow.autolog()
model = train_model(X_train, y_train) # 学習処理
mlflow.sklearn.log_model(
model,
artifact_path="model",
input_example=X_train[:5],
signature=mlflow.models.infer_signature(X_train, y_pred)
)
# 3. Model Registryに登録
model_uri = f"runs:/{run.info.run_id}/model"
mv = mlflow.register_model(
model_uri=model_uri,
name="prod_catalog.ml_schema.churn_predictor"
)
print(f"登録完了: バージョン {mv.version}")
# 4. エイリアスの付与
client = MlflowClient()
client.set_registered_model_alias(
name="prod_catalog.ml_schema.churn_predictor",
alias="Challenger",
version=mv.version
)| 機能 | 旧ステージ(Workspace版) | エイリアス(UC版) |
|---|---|---|
| 定義 | 固定3種(None / Staging / Production / Archived) | 自由定義(文字列を自由に設定可能) |
| 同時付与 | 1バージョンに1ステージのみ | 1バージョンに複数エイリアスを付与可能 |
| 複数バージョンへの同一ステージ | 不可(Productionは常に1バージョンのみ) | 各エイリアスは1バージョンのみ指す(ポインタ的動作) |
| 参照方法 | models:/model_name/Production | models:/catalog.schema.model_name@Champion |
| A/Bテスト対応 | 困難(Productionが1つのため) | 容易(Champion + Challengerの2エイリアスで並行運用) |
| 遷移の記録 | ステージ遷移イベントとして記録 | エイリアス変更イベントとして記録 |
実務で推奨される昇格フローの全体像を以下に示します。
[Step 1: 学習 & 実験]
│ mlflow.start_run() → autolog() → log_model()
│ ⇒ MLflow Tracking Runに記録される
│
▼
[Step 2: Registry登録]
│ mlflow.register_model("runs:/{id}/model", "catalog.schema.model")
│ ⇒ Model Registry に Version N が作成される
│
▼
[Step 3: Challengerエイリアス付与]
│ client.set_registered_model_alias(..., "Challenger", N)
│ ⇒ 本番候補としてマーク
│
▼
[Step 4: バリデーション(自動)]
│ ├─ 精度テスト(AUC ≥ 0.85 / RMSE ≤ 閾値)
│ ├─ データドリフト検出(PSI / KS統計量)
│ ├─ レイテンシテスト(p99 < 100ms)
│ └─ フェアネステスト(保護属性間の予測差)
│
▼
[Step 5: 承認(手動 or 自動)]
│ ├─ 全テスト合格 → MLリードが承認
│ └─ テスト不合格 → 却下・フィードバック
│
▼
[Step 6: Champion昇格]
│ client.set_registered_model_alias(..., "Champion", N)
│ ⇒ Model Servingが自動的に新バージョンに切り替え
│
▼
[Step 7: 旧Champion → Archived]
client.delete_registered_model_alias(..., "Champion") # 旧版
⇒ 参照用に保持、推論からは外れるUC Model RegistryのモデルはDatabricks Model Servingに直接デプロイできます。 エンドポイント作成時にエイリアスを指定すると、エイリアスの付け替えだけで 推論モデルの更新が完了します。
| デプロイ方式 | 設定 | 更新方法 |
|---|---|---|
| バージョン指定 | モデルバージョン番号を明示 | 新バージョンを作成しエンドポイント設定を手動更新 |
| エイリアス指定(推奨) | @Championエイリアスを参照 | エイリアスを新バージョンに付け替えると自動更新 |
# エイリアスベースでのモデル読み込み(推論時)
import mlflow
model = mlflow.pyfunc.load_model(
"models:/prod_catalog.ml_schema.churn_predictor@Champion"
)
predictions = model.predict(new_data)ML Associate / ML Professional
問題 1
MLエンジニアがUC Model Registryにモデルを登録し、A/Bテストを実施したい。現在の本番モデル(Version 3)を維持しながら、新モデル(Version 5)に一部トラフィックを流す設計として最も適切なものはどれか。
正解: B
UC Model Registryではステージではなくエイリアスでモデルの状態を管理します。ChampionとChallengerの2つのエイリアスを並行して運用し、Model Servingのトラフィック分割でA/Bテストを実施するのが標準設計です。選択肢Aの「Staging/Production」は旧Workspace版の概念でUC版には存在しません。削除は危険であり、別モデル名での管理は運用が複雑になります。
Workspace版Model RegistryからUC版に移行する方法はありますか?
はい。Databricksはmlflow.copy_model_version()やUpgrade APIを提供しており、Workspace版に登録済みのモデルをUC版のModel Registryに移行できます。移行時にはモデルの3層名前空間(catalog.schema.model_name)を指定します。移行後は旧Workspace版のモデルへの参照を更新する必要があるため、推論パイプラインやModel Servingエンドポイントの設定も合わせて変更してください。段階的な移行(新規モデルはUC版、既存は順次移行)が推奨されます。
mlflow.register_model()とmlflow.log_model()の違いは何ですか?
mlflow.log_model()は学習済みモデルをMLflow Tracking RunのアーティファクトとしてMLflow Run内に保存する操作です。mlflow.register_model()はそのアーティファクトをModel Registryに「登録」して、バージョン管理・エイリアス管理・権限管理の対象にする操作です。log_modelだけではModel Registryに登録されず、バージョン管理やエイリアス付与はできません。log_model()で保存した後にregister_model()で登録するのが標準フローです。
Model Servingエンドポイントでモデルを更新する際にダウンタイムは発生しますか?
通常は発生しません。Databricks Model Servingでは、エイリアスベースのエンドポイント設定(例:Championエイリアスを参照)を使う場合、エイリアスを新バージョンに付け替えると、Model Servingが自動的に新バージョンのコンテナを起動し、旧バージョンからのトラフィック切り替え(ブルーグリーン相当)を行います。切り替え中は両バージョンが並行稼働するため、リクエストの欠落は発生しません。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...