The MLflow Model Registry is the Databricks core feature that centralizes trained-model version management, promotion flows (Challenger → Champion), permission management, and deployment to Model Serving. Since 2024 Databricks has been pushing the migration from the Workspace Model Registry to the Unity Catalog (UC) Model Registry. The UC version adds enhancements such as aliases and cross-workspace sharing.
This article walks through the big picture of the Model Registry, the differences between the Workspace and UC versions, how to implement model registration and alias workflows, and how to design promotion flows.
The Model Registry is the 'model catalog' component of the MLflow ecosystem. Once you register a model artifact from an MLflow Tracking experiment Run, the following management capabilities become available.
| Item | Legacy Workspace version | UC version (recommended) |
|---|---|---|
| Namespace | Flat (model name only) | Three-level (catalog.schema.model_name) |
| Model state management | Stages (Staging / Production / Archived) | Aliases (Champion / Challenger / freely defined) |
| Permission management | Workspace ACLs | Unity Catalog GRANT / DENY |
| Cross-workspace | Not supported (scoped to a single workspace) | Supported (within the same UC metastore) |
| Lineage tracking | Limited | Automatic tracking down to the training data tables |
| Audit logs | Workspace logs | UC System Tables (audit_logs) |
| Webhooks | Supported | Supported |
| Future support | Deprecated (scheduled to be retired) | Recommended and actively developed |
Here is the basic flow for registering a model in the Model Registry.
import mlflow
from mlflow import MlflowClient
# 1. Point the Registry URI at UC
mlflow.set_registry_uri("databricks-uc")
# 2. Train and record with Tracking
with mlflow.start_run() as run:
mlflow.autolog()
model = train_model(X_train, y_train) # training logic
mlflow.sklearn.log_model(
model,
artifact_path="model",
input_example=X_train[:5],
signature=mlflow.models.infer_signature(X_train, y_pred)
)
# 3. Register in the 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"Registered: version {mv.version}")
# 4. Attach an alias
client = MlflowClient()
client.set_registered_model_alias(
name="prod_catalog.ml_schema.churn_predictor",
alias="Challenger",
version=mv.version
)| Capability | Legacy stages (Workspace) | Aliases (UC) |
|---|---|---|
| Definition | Fixed set (None / Staging / Production / Archived) | Freely defined (any string label) |
| Concurrent assignment | Only one stage per version | Multiple aliases can be attached to a single version |
| Same stage across versions | Not allowed (Production always belongs to a single version) | Each alias points to exactly one version (pointer-like behavior) |
| Reference format | models:/model_name/Production | models:/catalog.schema.model_name@Champion |
| A/B testing support | Difficult (only one Production exists) | Easy (run Champion and Challenger aliases side by side) |
| Transition history | Recorded as stage transition events | Recorded as alias change events |
Here is the end-to-end promotion flow recommended for real-world use.
[Step 1: Train & Experiment]
| mlflow.start_run() -> autolog() -> log_model()
| => Recorded into an MLflow Tracking Run
|
v
[Step 2: Register]
| mlflow.register_model("runs:/{id}/model", "catalog.schema.model")
| => Version N is created in the Model Registry
|
v
[Step 3: Attach Challenger alias]
| client.set_registered_model_alias(..., "Challenger", N)
| => Marked as a production candidate
|
v
[Step 4: Validation (automated)]
| |- Accuracy tests (AUC >= 0.85 / RMSE <= threshold)
| |- Data drift detection (PSI / KS statistics)
| |- Latency test (p99 < 100ms)
| \- Fairness test (prediction gap across protected attributes)
|
v
[Step 5: Approval (manual or automated)]
| |- All tests pass -> ML lead approves
| \- Tests fail -> rejected with feedback
|
v
[Step 6: Champion promotion]
| client.set_registered_model_alias(..., "Champion", N)
| => Model Serving automatically switches to the new version
|
v
[Step 7: Previous Champion -> Archived]
client.delete_registered_model_alias(..., "Champion") # old version
=> Kept for reference, removed from inferenceModels in the UC Model Registry deploy directly to Databricks Model Serving. If you specify an alias when creating the endpoint, simply reassigning that alias updates the inference model end-to-end.
| Deployment style | Configuration | Update procedure |
|---|---|---|
| Version-pinned | Specify the model version number explicitly | Create a new version and update the endpoint configuration manually |
| Alias-based (recommended) | Reference the @Champion alias | Reassign the alias to a new version and the update happens automatically |
# Load the model via its alias (inference time)
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
An ML engineer has registered a model in the UC Model Registry and wants to run an A/B test. Which design best keeps the current production model (Version 3) live while routing some traffic to a new model (Version 5)?
正解: B
The UC Model Registry manages model state with aliases, not stages. The standard design is to run Champion and Challenger aliases side by side and split traffic in Model Serving to run the A/B test. Option A's 'Staging/Production' belongs to the legacy Workspace Model Registry and does not exist in the UC version. Deletion is risky, and registering under two separate model names complicates operations.
How do I migrate from the Workspace Model Registry to the UC Model Registry?
Yes. Databricks provides mlflow.copy_model_version() and an Upgrade API that let you migrate models registered in the Workspace Model Registry to the UC Model Registry. During migration you specify the model's three-level namespace (catalog.schema.model_name). After the migration you must update references to the old Workspace-version models, so adjust your inference pipelines and Model Serving endpoint configurations as well. A staged migration (new models go directly to UC, existing ones are migrated incrementally) is recommended.
What is the difference between mlflow.register_model() and mlflow.log_model()?
mlflow.log_model() saves a trained model as an artifact inside an MLflow Tracking Run. mlflow.register_model() then 'registers' that artifact into the Model Registry, bringing it under version management, alias management, and permission management. log_model() alone does not register anything in the Model Registry, so you cannot version it or attach aliases. The standard flow is to save with log_model() first and then register with register_model().
Is there any downtime when updating a model on a Model Serving endpoint?
Usually there is none. When the Databricks Model Serving endpoint is configured with an alias (for example, pointing at the Champion alias), reassigning the alias to a new version causes Model Serving to automatically spin up a container for the new version and shift traffic away from the old one (effectively blue-green). Both versions run in parallel during the cutover, so no requests are dropped.
Practice with certification-focused question sets
無料で問題を解いてみるNicheeLab Editorial Team
NicheeLab editorial team focused on data engineering and cloud certification learning. Content is structured around practical study needs and official exam domains.
Databricks Certifications: All 7 Exams, Difficulty & Study Plan (2026)
Complete guide to all 7 Databricks certifications — Data Eng...
Databricks Exam Difficulty Ranking: All 7 Certs Compared (2026)
Every Databricks certification ranked by difficulty, with st...
Databricks Study Guide: Fastest Pass Route & Time Estimates (2026)
How to pass Databricks certifications efficiently. Official ...
Databricks Data Engineer Associate: Complete Guide (2026)
Domain-by-domain breakdown of the Databricks Certified Data ...
Databricks Data Engineer Professional: Complete Guide (2026)
Tactics for the Databricks Certified Data Engineer Professio...