What you will be able to do
- Use MLflow 3 logging conventions (name=, models:/<model_id>) when preparing a model for Unity Catalog
- Log a GenAI chain as a LoggedModel and find its parameters and metrics on the Unity Catalog model version page
- Register a logged model from the experiment run page in the UI
- Use aliases, rather than the catalog name, to mark which model version is deployed
1.MLflow 3 logging conventions that registration depends on
Registering a model in Unity Catalog means giving MLflow a reference to a logged model, so how you log affects how you register. MLflow 3 kept experiments, runs, parameters, tags, and metrics the way they were, but it made models first-class objects. Moving from 2.x is mostly straightforward, but a few changes show up directly in registration code. In MLflow 3, log_model() takes name instead of artifact_path. It no longer needs an active run. It stores artifacts under the model rather than the run, and it returns a URI of the form models:/<model_id>. Databricks recommends loading the model with that returned URI.
mlflow.pyfunc.log_model(
name="model",
python_model=python_model,
...
)| Aspect | MLflow 2.x | MLflow 3 |
|---|---|---|
| log_model() parameter for the model's path or name | artifact_path | name (artifact_path still works but is deprecated) |
| Active run required to log | Yes | No |
| URI passed to mlflow.register_model | runs:/<run_id>/<model-path> | models:/<model_id> |
| Where model artifacts are stored | Under the run's artifacts | Under models/<model_id>/artifacts |
| Default registry URI | Depends on the workspace default catalog | databricks-uc |
Compatibility only goes one way. MLflow 3 clients can load runs, models, and traces logged with 2.x, but models logged with MLflow 3 may not load in older 2.x clients. If a downstream job still pins an older client, upgrade it before you register MLflow 3 models it needs to read.
Checkpoint 1 of 5· Match them up
Match each identifier to the MLflow version and role it belongs to
Tap a term, then the definition that fits it.
MLflow 3 swaps artifact_path for name and run-relative URIs for model-ID URIs. The 2.x forms still exist, but they're the old convention.
“This model URI is of the format models:/<model_id> (rather than runs:/<run_id>/<artifact_path> as in MLflow 2.x)”Source: docs.databricks.com
Sources1
2.Registering a GenAI chain as a LoggedModel
MLflow 3 introduced the LoggedModel: a log_model() call creates an object with a unique ID that links the model to its metadata, parameters, metrics, and code. For AI applications, a LoggedModel can capture a git commit or a set of parameters, which can then be linked to traces and evaluation metrics. A LangChain chain is logged with the langchain flavor's log_model(). In the example below, the generation parameters and prompt template are recorded on the LoggedModel, and the input example gives MLflow what it needs to infer a signature.
model_info = mlflow.langchain.log_model(
lc_model=chain,
name="basic_chain",
params={
"temperature": 0.1,
"max_tokens": 2000,
"prompt_template": str(prompt)
},
model_type="agent",
input_example={"messages": "What is MLflow?"},
)Registration works the same way for other model types. The Qwen3-4B fine-tuning tutorial logs its model and tokenizer with mlflow.transformers.log_model, setting task="llm/v1/chat" and passing registered_model_name=full_model_name, where the name is built from catalog, schema, and model variables. That single call logs the model to MLflow and registers it in Unity Catalog. The tutorial notes that this gives you governance, automatic versioning, and a path to model serving endpoints.
Registering a LoggedModel also makes its data visible in Unity Catalog. The model version page in Catalog Explorer shows its parameters, metrics, and traces across workspaces, endpoints, and experiments. By contrast, the Models tab on an experiment page compares logged models within that one experiment, which helps you choose which ones to register.
Use the Models tab, with its Charts tab, to compare logged models from a single experiment and pick which to register. Use the Catalog Explorer model version page after registration. It gathers parameters, metrics, and traces from every linked workspace, endpoint, and experiment, which is what monitoring and deployment approvers need.
Checkpoint 2 of 5· Check yourself
You logged a LangChain chain with params, evaluated it in two workspaces, and registered it to Unity Catalog. Where can a reviewer see its parameters, metrics, and traces from all those environments together?
When an MLflow 3 LoggedModel is registered, the Unity Catalog model version page gathers its parameters, metrics, and traces across all linked environments.
“This page shows model parameters, metrics, and traces across all linked environments including different workspaces, endpoints, and experiments.”Source: docs.databricks.com
3.Registering from the UI, and marking deployment with aliases
You can also register without writing code. On the experiment run page, click Register model in the upper-right corner. In the dialog, choose Unity Catalog, pick a destination model from the dropdown, and click Register. Registration can take a while, so check progress by opening the destination model in Unity Catalog and refreshing it.
Checkpoint 3 of 5· Put it in order
Put the steps for registering a logged model to Unity Catalog from the UI in order
- 1.Open the destination model in Unity Catalog and refresh it to check progress
- 2.Open the experiment run page and click Register model in the upper-right corner
- 3.In the dialog, select Unity Catalog
- 4.Click Register
- 5.Select a destination model from the dropdown list
Registration starts from the run page, then you pick the registry and the destination. Because it isn't instant, you confirm it in Unity Catalog afterwards.
“From the experiment run page, click Register model in the upper-right corner of the UI.”Source: docs.databricks.com
A model version's catalog, schema, and registered model describe its environment and governance. For example, privileges might be set so that only admins can delete from prod. To record which version is actually in use, you use an alias: a named, mutable pointer to one version, such as Champion. Workloads refer to the alias, and promoting a new version just means pointing the alias at it. Setting or changing an alias requires owning the registered model, plus USE SCHEMA and USE CATALOG.
from mlflow import MlflowClient
client = MlflowClient()
# create "Champion" alias for version 1 of model "prod.ml_team.iris_model"
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 1)
# reassign the "Champion" alias to version 2
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 2)To load a version by alias, use the models:/<name>@<alias> URI. This needs EXECUTE on the registered model, plus USE SCHEMA and USE CATALOG. A job that loads @Champion picks up whatever version the alias points to the next time it runs, so the job doesn't need to change when you promote a new version.
import mlflow.pyfunc
model_version_uri = "models:/prod.ml_team.iris_model@Champion"
champion_version = mlflow.pyfunc.load_model(model_version_uri)
champion_version.predict(test_x)Checkpoint 4 of 5· Check yourself
A nightly job loads models:/prod.ml_team.iris_model@Champion. You move Champion from version 1 to version 2. What does the job do on its next run?
Aliases decouple deployment from consumers. Whatever version the alias points to when the job runs is the one it loads.
“the batch inference workload automatically picks it up on its next execution”Source: docs.databricks.com
Checkpoint 5 of 5· Exam question
An engineer runs `GRANT CREATE MODEL ON SCHEMA prod.rag_apps TO `data-scientists`` but a data scientist in that group still cannot register a new model version to `prod.rag_apps.support_bot`, receiving a permissions error. Which additional privilege is most likely missing?
Correct answer: A — `USE CATALOG` on `prod` and `USE SCHEMA` on `prod.rag_apps` for the group
- A. Correct: registering a model in Unity Catalog requires traversing the namespace, so the principal also needs `USE CATALOG` on the catalog and `USE SCHEMA` on the schema in addition to `CREATE MODEL`; without these, access to the containing objects is blocked even with create rights.
- B. Incorrect: there is no workspace-level MLflow tracking server privilege that governs Unity Catalog model registration; access is controlled through Unity Catalog grants on the catalog, schema, and model objects, not tracking-server permissions.
- C. Incorrect: table-level `SELECT` privileges govern reading Delta table data and are unrelated to registering a model object, which is a distinct securable type in Unity Catalog.
- D. Incorrect: granting full workspace admin to every user is unnecessarily broad and violates least-privilege practice; the specific missing grants are the catalog and schema `USE` privileges, not admin rights.
Sources5
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.Registering a version under a catalog named prod means that version is now serving production traffic.Why is that wrong?
The catalog and schema express environment and governance. Which version is deployed is tracked with model aliases such as Champion.
Covered in Registering from the UI, and marking deployment with aliases
2.In MLflow 3 you should keep building runs:/<run_id>/<artifact_path> URIs and passing artifact_path to log_model().Why is that wrong?
MLflow 3 uses name= (artifact_path is deprecated) and returns a models:/<model_id> URI, which Databricks recommends using for loading and registering the model.
Covered in MLflow 3 logging conventions that registration depends on
Practise it for real
Log a model with an input example, register it to Unity Catalog in the same call, and load it back through an alias.
1.In a notebook on Dedicated access mode compute, run %pip install --upgrade "mlflow-skinny[databricks]" and then dbutils.library.restartPython().
Why: Models in Unity Catalog and inferred signatures need a recent MLflow client and Unity Catalog-capable compute.
You should see: Python restarts with the upgraded MLflow client.
2.If your workspace's default catalog is not in Unity Catalog, run mlflow.set_registry_uri("databricks-uc").
Why: Otherwise the client may register to the legacy workspace model registry.
You should see: No output. Later registrations go to Unity Catalog.
3.Call your flavor's log_model() with name, input_example, and registered_model_name set to a three-level name in a schema where you have CREATE MODEL.
Why: The input example lets MLflow infer the signature that Unity Catalog requires, and registered_model_name registers the model in the same call.
You should see: Version 1 of the registered model appears in Catalog Explorer, possibly after a refresh.
4.Run MlflowClient().set_registered_model_alias("<catalog>.<schema>.<model>", "Champion", 1).
Why: The alias, not the catalog name, records which version is deployed.
You should see: The Champion alias shows on version 1 in Catalog Explorer.
5.Load mlflow.pyfunc.load_model("models:/<catalog>.<schema>.<model>@Champion") and call predict on your input example.
Why: This confirms that consumers can resolve the model through the alias.
You should see: A prediction is returned from the version that currently holds Champion.
Stuck? Get a nudge
If registration fails with an authorization error even though your privileges look right, set MLFLOW_USE_DATABRICKS_SDK_MODEL_ARTIFACTS_REPO_FOR_UC to True and try again.
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“MLflow no longer requires a run to be active when logging a model”
↩︎ MLflow 3 logging conventions that registration depends on“models and traces logged with MLflow 3 clients may not be able to be loaded with older 2.x client versions.”
↩︎ MLflow 3 logging conventions that registration depends on“The artifact_path parameter is still supported but has been deprecated.”
↩︎ Exam trap 2“This model URI is of the format models:/<model_id> (rather than runs:/<run_id>/<artifact_path> as in MLflow 2.x)”
↩︎ Checkpoint - 2.
“LoggedModels can be created to capture git commits or sets of parameters as dedicated objects that can then be linked to traces and metrics”
↩︎ Registering a GenAI chain as a LoggedModel - 3.
“all of its metrics and parameters are available in the model registry UI and from the API”
↩︎ Registering a GenAI chain as a LoggedModel - 4.https://docs.databricks.com/aws/en/machine-learning/ai-runtime/examples/tutorials/sgc-finetune-qwen3-4bOfficial docs
“Register in Unity Catalog: Logs to MLflow and registers in Unity Catalog”
↩︎ Registering a GenAI chain as a LoggedModel - 5.
“Model aliases allow you to assign a mutable, named reference to a particular version of a registered model.”
↩︎ Registering from the UI, and marking deployment with aliases“Permissions required: EXECUTE privilege on the registered model, plus USE SCHEMA and USE CATALOG privileges”
↩︎ Registering from the UI, and marking deployment with aliases“To manage the deployment status, use model aliases.”
↩︎ Exam trap 1“From the experiment run page, click Register model in the upper-right corner of the UI.”
↩︎ Checkpoint“Using the prod catalog doesn't necessarily mean that the model version serves production traffic.”
↩︎ Prediction“the batch inference workload automatically picks it up on its next execution”
↩︎ Checkpoint
Also cited
“This page shows model parameters, metrics, and traces across all linked environments including different workspaces, endpoints, and experiments.”
↩︎ Checkpoint