What you will be able to do
- Explain what Models in Unity Catalog adds to the MLflow Model Registry and name a model with its three-level name
- Point the MLflow client at Unity Catalog when the workspace does not already default to it
- List the compute and privileges needed to create a registered model and to add new versions to it
- Register a model with mlflow.register_model() or with registered_model_name in log_model()
- Make sure every new model version has a signature by logging an input example
Key concept
Three-level registered model name — A model in Unity Catalog lives inside a catalog and a schema, just like a table, so MLflow refers to it as <catalog>.<schema>.<model>. Each time you register under that name, you add a new version to the same registered model.
1.Models in Unity Catalog and where MLflow sends them
Once a chain or model works in a notebook, the next step toward serving it is to register it. Registration turns a logged artifact into a governed, versioned object. On Databricks, the recommended place for it is Models in Unity Catalog, a hosted version of the MLflow Model Registry. Because it lives in Unity Catalog, it gets centralized access control, auditing, lineage, and model discovery across workspaces. It also works with the open-source MLflow Python client, so you register models with the same MLflow calls you already use to log them.
A model in Unity Catalog sits inside a catalog and a schema, the same way a table does. That's why MLflow refers to it by a three-level name such as prod.ml_team.iris_model. If you call an API that expects a registered model name, such as mlflow.register_model, you pass that full name. There is one shortcut: if your workspace's default catalog is in Unity Catalog, you can pass just <model> and MLflow fills in the default catalog and schema. If Unity Catalog is enabled but the default catalog is not in Unity Catalog, you must spell out all three levels.
Whether you need to configure anything depends on your setup. If the workspace's default catalog is in Unity Catalog and you're on Databricks Runtime 13.3 LTS or above, or on MLflow 3, models are created in and loaded from that default catalog automatically. In other workspaces, the MLflow client writes to the legacy workspace model registry. To send it to Unity Catalog instead, set the registry URI explicitly:
import mlflow
mlflow.set_registry_uri("databricks-uc")Checkpoint 1 of 6· Fill the gap
Your workspace still registers models in the legacy workspace registry. Which registry URI sends them to Unity Catalog?
import mlflow
mlflow.set_registry_uri(" ? ")databricks-uc is the Unity Catalog registry URI. Plain databricks selects the legacy Workspace Model Registry.
Source: docs.databricks.com2.Compute and privileges you need before registering
Before you register anything, three conditions have to be met. First, Unity Catalog must be enabled in the workspace. Second, the compute must have access to Unity Catalog, which for ML workloads means Dedicated access mode (formerly single user). On Databricks Runtime 15.4 LTS ML and above, dedicated group access mode also works. Third, you need a runtime that supports it: Databricks Runtime 13.2 ML and above includes support. On Databricks Runtime 11.3 LTS and above, you can install the latest client with %pip install --upgrade "mlflow-skinny[databricks]".
Privileges come next, and the exam likes to test the difference between creating a registered model and adding a version to one. To create a registered model, you need CREATE MODEL and USE SCHEMA on the schema, plus USE CATALOG on the catalog. To add versions to an existing registered model, you must either own it or have CREATE MODEL VERSION on it, along with the same USE SCHEMA and USE CATALOG privileges. An admin can grant the schema-level privilege in Catalog Explorer or with SQL:
GRANT CREATE MODEL ON SCHEMA <schema-name> TO <principal>| Action | On the registered model | On the schema | On the catalog |
|---|---|---|---|
| Create a new registered model | Not applicable (it doesn't exist yet) | CREATE MODEL and USE SCHEMA | USE CATALOG |
| Create a new version of an existing model | Owner, or CREATE MODEL VERSION | USE SCHEMA | USE CATALOG |
If registration fails with an authorization error even though the privileges look right, the docs suggest setting the environment variable MLFLOW_USE_DATABRICKS_SDK_MODEL_ARTIFACTS_REPO_FOR_UC to True. On Databricks on AWS GovCloud, this setting is required rather than optional. It can't be used for models shared with OpenSharing that use default storage.
Checkpoint 2 of 6· Check yourself
A data scientist has CREATE MODEL and USE SCHEMA on prod.ml_team and USE CATALOG on prod. A colleague owns the registered model prod.ml_team.rag_chain. What else does the data scientist need to register a new version of rag_chain?
CREATE MODEL lets you create new registered models. Adding a version to an existing one needs ownership or CREATE MODEL VERSION on that model. EXECUTE is the privilege for loading a model, not for registering versions.
“you must be the owner of the registered model, or have the CREATE MODEL VERSION privilege on it”Source: docs.databricks.com
Sources1
3.Two ways to register: register_model() or registered_model_name
MLflow gives you two code paths. The first is to log the model and then register it in a separate step with mlflow.register_model(). It takes a model URI and the three-level name. In MLflow 3, the URI points to the logged model (models:/<model_id>). In MLflow 2.x, it points to a run artifact (runs:/<run_id>/model). If the registered model doesn't exist yet, MLflow creates it, then adds a new version to it.
logged_model = mlflow.last_logged_model()
mlflow.register_model(logged_model.model_uri, "prod.ml_team.iris_model")The second path logs and registers in one call by passing registered_model_name to the flavor's log_model(). This is the same argument you'd pass whether the flavor is sklearn, langchain, or transformers. Because this registers straight into Unity Catalog, the value has to be the full three-level name.
mlflow.sklearn.log_model(
sk_model=clf,
name="model",
# The signature is automatically inferred from the input example and its predicted output.
input_example=input_example,
# Use three-level name to register model in Unity Catalog.
registered_model_name="prod.ml_team.iris_model",
)Checkpoint 3 of 6· Check yourself
You call mlflow.register_model(model_uri, "prod.ml_team.support_bot"), but prod.ml_team.support_bot doesn't exist yet. What happens?
register_model() creates the registered model if it's missing and then adds the version, as long as you have CREATE MODEL on the schema.
“The registered model will be created if it doesn't already exist”Source: docs.databricks.com
Checkpoint 4 of 6· Exam question
A generative AI engineer has trained a RAG chain and wants to register it directly to Unity Catalog as part of the `mlflow.pyfunc.log_model()` call, targeting the catalog `prod`, schema `rag_apps`, and model name `support_bot`. Which configuration correctly registers the model to Unity Catalog under this three-level namespace?
Correct answer: A — Set `mlflow.set_registry_uri("databricks-uc")` and pass `registered_model_name="prod.rag_apps.support_bot"` to `log_model()`
- A. Correct: `mlflow.set_registry_uri("databricks-uc")` points the MLflow client at the Unity Catalog model registry, and supplying the full three-level name as `registered_model_name` registers the version under that catalog and schema in one call.
- B. Incorrect: `set_tracking_uri` only controls where experiment run metadata is logged, not where models are registered, and a bare model name without a catalog and schema is rejected by Unity Catalog's naming requirement.
- C. Incorrect: `artifact_path` names the storage path for model artifacts within the run, not the registry destination, so putting the catalog.schema.model string there does not create a Unity Catalog registration.
- D. Incorrect: `set_experiment` selects which MLflow experiment run history is written to; it has no effect on model registration, and omitting `registered_model_name` (or an explicit `register_model` call) means no registration happens at all.
Sources1
4.Every new version needs a signature
This is the most common reason registration fails. The legacy workspace registry accepted models without signatures, but Unity Catalog does not accept new versions without one. There are two easy ways to get one. Databricks autologging logs signatures automatically for many popular frameworks. With MLflow 2.5.0 and above, you can pass input_example to mlflow.<flavor>.log_model and MLflow infers the signature from that example and the model's prediction on it. That's what the input_example line in the log_model() example above does: it uses one row of training data.
Some older model versions have no signature, and they come with limitations. You can add or update a signature on an existing version through the MLflow documentation's procedure.
| Where the version is used | With a signature | Without a signature |
|---|---|---|
| Inference | Inputs are checked and mismatches raise an error | No automatic input enforcement, so the model must handle unexpected inputs |
| AI functions | Schema comes from the signature | You must provide a schema in the function call |
| Model Serving | Input examples are auto-generated | Input examples aren't auto-generated |
Checkpoint 5 of 6· Check yourself
You're on MLflow 2.5.0 or later and don't want to write a signature by hand for a new Unity Catalog model version. What's the simplest option the docs describe?
With MLflow 2.5.0+, logging with input_example makes MLflow infer the signature automatically. Switching to the legacy registry avoids Unity Catalog altogether, which doesn't meet the goal, and the environment variable is for authorization problems.
“you can specify an input example in your mlflow.<flavor>.log_model call, and the model signature is automatically inferred”Source: docs.databricks.com
Checkpoint 6 of 6· Exam question
A team already has a logged MLflow run containing a trained chain at `runs:/8f2c1a.../model`, and they now want to register that existing run as version 1 of a Unity Catalog model named `analytics.chatbots.faq_agent`, without re-running training. Which approach accomplishes this?
Correct answer: A — Call `mlflow.register_model("runs:/8f2c1a.../model", "analytics.chatbots.faq_agent")` after setting the registry URI to Unity Catalog
- A. Correct: `mlflow.register_model()` takes an existing run's model URI and a target model name, creating a new registered model version from that run without needing to retrain or re-log anything, provided the registry URI is set to Unity Catalog.
- B. Incorrect: re-running training just to attach a `registered_model_name` wastes compute and produces a new run with potentially different artifacts, when the existing run's model URI can be registered directly.
- C. Incorrect: manually copying artifact files bypasses the MLflow Model Registry APIs entirely and does not create a tracked, versioned entry in Unity Catalog with lineage back to the source run.
- D. Incorrect: renaming an experiment only changes a tracking-server label for grouping runs; experiments and registered models are distinct entities, and this action creates no model version in Unity Catalog.
Sources1
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.On MLflow 3 you always have to call mlflow.set_registry_uri("databricks-uc") before registering, or the model goes to the legacy registry.Why is that wrong?
In MLflow 3 the default registry URI is already databricks-uc. You only need set_registry_uri in workspaces that still default to the workspace registry, or if you deliberately want the legacy registry, in which case you set it to databricks.
Covered in Models in Unity Catalog and where MLflow sends them
2.CREATE MODEL on a schema lets you add versions to any registered model in that schema.Why is that wrong?
CREATE MODEL covers creating new registered models. Adding a version to an existing one requires owning it or holding CREATE MODEL VERSION on it, plus USE SCHEMA and USE CATALOG.
Covered in Compute and privileges you need before registering
3.A signature is optional metadata, so a chain logged without one can still be registered as a new Unity Catalog version.Why is that wrong?
Unity Catalog requires a signature on new model versions. Log with an input_example (MLflow 2.5.0+) or use autologging so one is inferred.
Covered in Every new version needs a signature
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“Models in Unity Catalog extends the benefits of Unity Catalog to ML models, including centralized access control, auditing, lineage, and model discovery across workspaces.”
↩︎ Models in Unity Catalog and where MLflow sends them“For other workspaces, the MLflow Python client creates models in the Databricks workspace model registry.”
↩︎ Models in Unity Catalog and where MLflow sends them“the compute's access mode must be Dedicated (formerly single user)”
↩︎ Compute and privileges you need before registering“you need the CREATE MODEL and USE SCHEMA privileges on the enclosing schema, and USE CATALOG privilege on the enclosing catalog.”
↩︎ Compute and privileges you need before registering“Support for models in Unity Catalog is included in Databricks Runtime 13.2 ML and above.”
↩︎ Compute and privileges you need before registering“To register a model, use MLflow Client API register_model() method.”
↩︎ Two ways to register: register_model() or registered_model_name“using registered_model_name in the log_model() call registers the model to Unity Catalog, so you must provide the full three-level name”
↩︎ Two ways to register: register_model() or registered_model_name“Without a signature, there is no automatic input enforcement, and models need to be able to handle unexpected inputs.”
↩︎ Every new version needs a signature“Using a model version with AI functions requires providing a schema in the function call.”
↩︎ Every new version needs a signature“pass the three-level name of the model to MLflow APIs, in the form <catalog>.<schema>.<model>.”
↩︎ Key concept“The default registry URI in MLflow 3 is databricks-uc”
↩︎ Exam trap 1“you must be the owner of the registered model, or have the CREATE MODEL VERSION privilege on it”
↩︎ Exam trap 2“New ML model versions in UC must have a model signature.”
↩︎ Exam trap 3“The default registry URI in MLflow 3 is databricks-uc”
↩︎ Prediction“you must be the owner of the registered model, or have the CREATE MODEL VERSION privilege on it”
↩︎ Checkpoint“The registered model will be created if it doesn't already exist”
↩︎ Checkpoint“New ML model versions in UC must have a model signature.”
↩︎ Prediction“you can specify an input example in your mlflow.<flavor>.log_model call, and the model signature is automatically inferred”
↩︎ Checkpoint - 2.
“you can also use <model> as the name and the default catalog and schema will be inferred”
↩︎ Models in Unity Catalog and where MLflow sends them