<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic E2E MLOps Part 1: How to build and govern models with AutoML, MLflow, and Unity Catalog in Community Articles</title>
    <link>https://community.databricks.com/t5/community-articles/e2e-mlops-part-1-how-to-build-and-govern-models-with-automl/m-p/163184#M1401</link>
    <description>&lt;P&gt;In enterprise environments, the bottleneck of Machine Learning is rarely the algorithms themselves—it is the engineering around them. Data scientists often spend days configuring environments, managing infrastructure, and manually tracking model iterations.&lt;/P&gt;&lt;P&gt;To bridge this gap, Databricks offers a powerful tandem: &lt;STRONG&gt;AutoML&lt;/STRONG&gt; to rapidly accelerate model exploration, and &lt;STRONG&gt;MLflow&lt;/STRONG&gt; integrated with &lt;STRONG&gt;Unity Catalog&lt;/STRONG&gt; to enforce robust corporate governance, lineage, and lifecycle tracking.&lt;/P&gt;&lt;P&gt;This 3-part series will guide you through building a production-ready, End-to-End MLOps pipeline on Databricks.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Part 1:&lt;/STRONG&gt; Rapid baseline generation with AutoML, MLflow tracking, and model registration in Unity Catalog.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Part 2:&lt;/STRONG&gt; Diving deeper—Feature Stores, dataset lineage, and customizing AutoML-generated trial notebooks.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Part 3:&lt;/STRONG&gt; Model Serving—Deploying real-time inference endpoints and setting up Lakehouse monitoring for data drift.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Let's dive into &lt;STRONG&gt;Part 1&lt;/STRONG&gt;.&lt;/P&gt;&lt;H2&gt;The End-to-End MLOps Architecture&lt;/H2&gt;&lt;P&gt;Before writing code, let’s understand the data flow we are building today:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;PRE&gt;[ Delta Lake Table (Unity Catalog) ] 
               │
               ▼
   [ Databricks AutoML Run ]  ──(Automatic Tracking)──► [ MLflow Experiments ]
               │                                                 │
               ▼                                                 ▼
[ Selected Champion Model ] ──────────────────────────► [ Unity Catalog Model Registry ]&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;By keeping all assets under the &lt;STRONG&gt;Unity Catalog&lt;/STRONG&gt; umbrella, we secure full lineage from the raw data features up to the production-registered model binary.&lt;/P&gt;&lt;H2&gt;Step-by-Step Implementation&lt;/H2&gt;&lt;H3&gt;Step 1: Initiating AutoML via Python API&lt;/H3&gt;&lt;P&gt;While Databricks AutoML provides a great UI, executing it programmatically via the Python API allows you to integrate training into your automated CI/CD pipelines or nightly data orchestration jobs.&lt;/P&gt;&lt;P&gt;For this guide, we are assuming a classic Customer Churn dataset registered in Unity Catalog.&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;Python&lt;/SPAN&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; databricks &lt;SPAN class=""&gt;import&lt;/SPAN&gt; automl

&lt;SPAN class=""&gt;# Define the source table in Unity Catalog&lt;/SPAN&gt;
dataset_path = &lt;SPAN class=""&gt;"main.gold_analytics.customer_churn_features"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;# Execute AutoML for a Binary Classification task&lt;/SPAN&gt;
summary = automl.classify(
    dataset=spark.table(dataset_path),
    target_col=&lt;SPAN class=""&gt;"churn_flag"&lt;/SPAN&gt;,
    primary_metric=&lt;SPAN class=""&gt;"f1"&lt;/SPAN&gt;,
    timeout_minutes=&lt;SPAN class=""&gt;15&lt;/SPAN&gt;  &lt;SPAN class=""&gt;# Constraining execution time for demo purposes&lt;/SPAN&gt;
)

&lt;SPAN class=""&gt;# Retrieve the Champion Run ID&lt;/SPAN&gt;
best_run_id = summary.best_trial.mlflow_run_id
print(&lt;SPAN class=""&gt;f"Champion Run ID: &lt;SPAN class=""&gt;{best_run_id}&lt;/SPAN&gt;"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3&gt;Step 2: Unlocking the MLflow Autologging Metadata&lt;/H3&gt;&lt;P&gt;Databricks AutoML automatically configures &lt;STRONG&gt;MLflow Autologging&lt;/STRONG&gt;. This means that during the 15-minute search, every single hyperparameter, loss curve, ROC curve, and confusion matrix was captured.&lt;/P&gt;&lt;P&gt;We can query the MLflow Client API to programmatically inspect the winning model's parameters and performance metrics:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;Python&lt;/SPAN&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;import&lt;/SPAN&gt; mlflow

&lt;SPAN class=""&gt;# Fetch run metadata from MLflow&lt;/SPAN&gt;
client = mlflow.tracking.MlflowClient()
run = client.get_run(best_run_id)

metrics = run.data.metrics
params = run.data.params

print(&lt;SPAN class=""&gt;f"Winning Algorithm: &lt;SPAN class=""&gt;{params.get('classifier')}&lt;/SPAN&gt;"&lt;/SPAN&gt;)
print(&lt;SPAN class=""&gt;f"Validation F1-Score: &lt;SPAN class=""&gt;{metrics.get('val_f1_score'):&lt;SPAN class=""&gt;.4&lt;/SPAN&gt;f}&lt;/SPAN&gt;"&lt;/SPAN&gt;)
print(&lt;SPAN class=""&gt;f"Validation Accuracy: &lt;SPAN class=""&gt;{metrics.get('val_accuracy_score'):&lt;SPAN class=""&gt;.4&lt;/SPAN&gt;f}&lt;/SPAN&gt;"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3&gt;Step 3: Registering the Champion Model in Unity Catalog&lt;/H3&gt;&lt;P&gt;Now that we have identified our champion, we need to register it. In modern Databricks architectures, we avoid the legacy workspace model registry and use &lt;STRONG&gt;Unity Catalog Model Registry&lt;/STRONG&gt; for three-tier namespace support (catalog.schema.model).&lt;/P&gt;&lt;P&gt;This ensures our model inherits the same robust security, access controls, and tags as any standard Delta table.&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;Python&lt;/SPAN&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;# Path to the model artifact within MLflow&lt;/SPAN&gt;
model_uri = &lt;SPAN class=""&gt;f"runs:/&lt;SPAN class=""&gt;{best_run_id}&lt;/SPAN&gt;/model"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;# Secure three-level namespace destination&lt;/SPAN&gt;
registered_model_name = &lt;SPAN class=""&gt;"main.gold_analytics.customer_churn_predictor"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;# Register the model to Unity Catalog&lt;/SPAN&gt;
model_details = mlflow.register_model(
    model_uri=model_uri, 
    name=registered_model_name
)

print(&lt;SPAN class=""&gt;f"Model successfully registered in Unity Catalog!"&lt;/SPAN&gt;)
print(&lt;SPAN class=""&gt;f"Active Version: &lt;SPAN class=""&gt;{model_details.version}&lt;/SPAN&gt;"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H2&gt;Key Takeaways for Enterprise Architectures&lt;/H2&gt;&lt;OL&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Zero Black Boxes:&lt;/STRONG&gt; Unlike traditional black-box AutoML tools, Databricks AutoML generates fully documented source-code notebooks for &lt;I&gt;every single trial&lt;/I&gt;. If your team wants to tune the champion model further, you can open the notebook, edit the code, and log it manually.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Unified Governance:&lt;/STRONG&gt; Registering models directly to Unity Catalog bridges the gap between Data Engineering and Data Science. Your ML models now respect the same catalog boundaries and governance policies as your production databases.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;H2&gt;Next Up in Part 2&lt;/H2&gt;&lt;P&gt;In the next article, we will look at how to construct a &lt;STRONG&gt;Databricks Feature Store&lt;/STRONG&gt; to feed this pipeline, prevent training-serving skew, and deep-dive into customizing the PySpark code generated by the AutoML trial notebooks.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What are your thoughts?&lt;/STRONG&gt; Do you trigger your AutoML runs programmatically or do you prefer the UI approach for quick exploration? Let's discuss in the comments below!&lt;/P&gt;</description>
    <pubDate>Thu, 16 Jul 2026 12:27:13 GMT</pubDate>
    <dc:creator>GabFernandes</dc:creator>
    <dc:date>2026-07-16T12:27:13Z</dc:date>
    <item>
      <title>E2E MLOps Part 1: How to build and govern models with AutoML, MLflow, and Unity Catalog</title>
      <link>https://community.databricks.com/t5/community-articles/e2e-mlops-part-1-how-to-build-and-govern-models-with-automl/m-p/163184#M1401</link>
      <description>&lt;P&gt;In enterprise environments, the bottleneck of Machine Learning is rarely the algorithms themselves—it is the engineering around them. Data scientists often spend days configuring environments, managing infrastructure, and manually tracking model iterations.&lt;/P&gt;&lt;P&gt;To bridge this gap, Databricks offers a powerful tandem: &lt;STRONG&gt;AutoML&lt;/STRONG&gt; to rapidly accelerate model exploration, and &lt;STRONG&gt;MLflow&lt;/STRONG&gt; integrated with &lt;STRONG&gt;Unity Catalog&lt;/STRONG&gt; to enforce robust corporate governance, lineage, and lifecycle tracking.&lt;/P&gt;&lt;P&gt;This 3-part series will guide you through building a production-ready, End-to-End MLOps pipeline on Databricks.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Part 1:&lt;/STRONG&gt; Rapid baseline generation with AutoML, MLflow tracking, and model registration in Unity Catalog.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Part 2:&lt;/STRONG&gt; Diving deeper—Feature Stores, dataset lineage, and customizing AutoML-generated trial notebooks.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Part 3:&lt;/STRONG&gt; Model Serving—Deploying real-time inference endpoints and setting up Lakehouse monitoring for data drift.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Let's dive into &lt;STRONG&gt;Part 1&lt;/STRONG&gt;.&lt;/P&gt;&lt;H2&gt;The End-to-End MLOps Architecture&lt;/H2&gt;&lt;P&gt;Before writing code, let’s understand the data flow we are building today:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;PRE&gt;[ Delta Lake Table (Unity Catalog) ] 
               │
               ▼
   [ Databricks AutoML Run ]  ──(Automatic Tracking)──► [ MLflow Experiments ]
               │                                                 │
               ▼                                                 ▼
[ Selected Champion Model ] ──────────────────────────► [ Unity Catalog Model Registry ]&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;By keeping all assets under the &lt;STRONG&gt;Unity Catalog&lt;/STRONG&gt; umbrella, we secure full lineage from the raw data features up to the production-registered model binary.&lt;/P&gt;&lt;H2&gt;Step-by-Step Implementation&lt;/H2&gt;&lt;H3&gt;Step 1: Initiating AutoML via Python API&lt;/H3&gt;&lt;P&gt;While Databricks AutoML provides a great UI, executing it programmatically via the Python API allows you to integrate training into your automated CI/CD pipelines or nightly data orchestration jobs.&lt;/P&gt;&lt;P&gt;For this guide, we are assuming a classic Customer Churn dataset registered in Unity Catalog.&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;Python&lt;/SPAN&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;from&lt;/SPAN&gt; databricks &lt;SPAN class=""&gt;import&lt;/SPAN&gt; automl

&lt;SPAN class=""&gt;# Define the source table in Unity Catalog&lt;/SPAN&gt;
dataset_path = &lt;SPAN class=""&gt;"main.gold_analytics.customer_churn_features"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;# Execute AutoML for a Binary Classification task&lt;/SPAN&gt;
summary = automl.classify(
    dataset=spark.table(dataset_path),
    target_col=&lt;SPAN class=""&gt;"churn_flag"&lt;/SPAN&gt;,
    primary_metric=&lt;SPAN class=""&gt;"f1"&lt;/SPAN&gt;,
    timeout_minutes=&lt;SPAN class=""&gt;15&lt;/SPAN&gt;  &lt;SPAN class=""&gt;# Constraining execution time for demo purposes&lt;/SPAN&gt;
)

&lt;SPAN class=""&gt;# Retrieve the Champion Run ID&lt;/SPAN&gt;
best_run_id = summary.best_trial.mlflow_run_id
print(&lt;SPAN class=""&gt;f"Champion Run ID: &lt;SPAN class=""&gt;{best_run_id}&lt;/SPAN&gt;"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3&gt;Step 2: Unlocking the MLflow Autologging Metadata&lt;/H3&gt;&lt;P&gt;Databricks AutoML automatically configures &lt;STRONG&gt;MLflow Autologging&lt;/STRONG&gt;. This means that during the 15-minute search, every single hyperparameter, loss curve, ROC curve, and confusion matrix was captured.&lt;/P&gt;&lt;P&gt;We can query the MLflow Client API to programmatically inspect the winning model's parameters and performance metrics:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;Python&lt;/SPAN&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;import&lt;/SPAN&gt; mlflow

&lt;SPAN class=""&gt;# Fetch run metadata from MLflow&lt;/SPAN&gt;
client = mlflow.tracking.MlflowClient()
run = client.get_run(best_run_id)

metrics = run.data.metrics
params = run.data.params

print(&lt;SPAN class=""&gt;f"Winning Algorithm: &lt;SPAN class=""&gt;{params.get('classifier')}&lt;/SPAN&gt;"&lt;/SPAN&gt;)
print(&lt;SPAN class=""&gt;f"Validation F1-Score: &lt;SPAN class=""&gt;{metrics.get('val_f1_score'):&lt;SPAN class=""&gt;.4&lt;/SPAN&gt;f}&lt;/SPAN&gt;"&lt;/SPAN&gt;)
print(&lt;SPAN class=""&gt;f"Validation Accuracy: &lt;SPAN class=""&gt;{metrics.get('val_accuracy_score'):&lt;SPAN class=""&gt;.4&lt;/SPAN&gt;f}&lt;/SPAN&gt;"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3&gt;Step 3: Registering the Champion Model in Unity Catalog&lt;/H3&gt;&lt;P&gt;Now that we have identified our champion, we need to register it. In modern Databricks architectures, we avoid the legacy workspace model registry and use &lt;STRONG&gt;Unity Catalog Model Registry&lt;/STRONG&gt; for three-tier namespace support (catalog.schema.model).&lt;/P&gt;&lt;P&gt;This ensures our model inherits the same robust security, access controls, and tags as any standard Delta table.&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;Python&lt;/SPAN&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;# Path to the model artifact within MLflow&lt;/SPAN&gt;
model_uri = &lt;SPAN class=""&gt;f"runs:/&lt;SPAN class=""&gt;{best_run_id}&lt;/SPAN&gt;/model"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;# Secure three-level namespace destination&lt;/SPAN&gt;
registered_model_name = &lt;SPAN class=""&gt;"main.gold_analytics.customer_churn_predictor"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;# Register the model to Unity Catalog&lt;/SPAN&gt;
model_details = mlflow.register_model(
    model_uri=model_uri, 
    name=registered_model_name
)

print(&lt;SPAN class=""&gt;f"Model successfully registered in Unity Catalog!"&lt;/SPAN&gt;)
print(&lt;SPAN class=""&gt;f"Active Version: &lt;SPAN class=""&gt;{model_details.version}&lt;/SPAN&gt;"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H2&gt;Key Takeaways for Enterprise Architectures&lt;/H2&gt;&lt;OL&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Zero Black Boxes:&lt;/STRONG&gt; Unlike traditional black-box AutoML tools, Databricks AutoML generates fully documented source-code notebooks for &lt;I&gt;every single trial&lt;/I&gt;. If your team wants to tune the champion model further, you can open the notebook, edit the code, and log it manually.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;STRONG&gt;Unified Governance:&lt;/STRONG&gt; Registering models directly to Unity Catalog bridges the gap between Data Engineering and Data Science. Your ML models now respect the same catalog boundaries and governance policies as your production databases.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;H2&gt;Next Up in Part 2&lt;/H2&gt;&lt;P&gt;In the next article, we will look at how to construct a &lt;STRONG&gt;Databricks Feature Store&lt;/STRONG&gt; to feed this pipeline, prevent training-serving skew, and deep-dive into customizing the PySpark code generated by the AutoML trial notebooks.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What are your thoughts?&lt;/STRONG&gt; Do you trigger your AutoML runs programmatically or do you prefer the UI approach for quick exploration? Let's discuss in the comments below!&lt;/P&gt;</description>
      <pubDate>Thu, 16 Jul 2026 12:27:13 GMT</pubDate>
      <guid>https://community.databricks.com/t5/community-articles/e2e-mlops-part-1-how-to-build-and-govern-models-with-automl/m-p/163184#M1401</guid>
      <dc:creator>GabFernandes</dc:creator>
      <dc:date>2026-07-16T12:27:13Z</dc:date>
    </item>
  </channel>
</rss>

