{"id":49012,"date":"2025-04-06T15:30:59","date_gmt":"2025-04-06T15:30:59","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49012"},"modified":"2025-04-06T16:09:29","modified_gmt":"2025-04-06T16:09:29","slug":"mlflow-lab-end-to-end-workflow-on-databricks","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/mlflow-lab-end-to-end-workflow-on-databricks\/","title":{"rendered":"MLflow Lab: End-to-End Workflow on Databricks"},"content":{"rendered":"\n<p>Absolutely! Let\u2019s walk through a <strong>complete, step-by-step tutorial<\/strong> to help you understand <strong>MLflow on Databricks<\/strong> from <strong>start to finish<\/strong>, using <strong>revised and working code<\/strong>.<\/p>\n\n\n\n<p>We&#8217;ll cover all key components of MLflow: \u2705 Tracking<br>\u2705 Models<br>\u2705 Model Registry<br>\u2705 Signature + Input Example<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 <strong>Objective:<\/strong><\/h2>\n\n\n\n<p>Train a classification model on the <strong>Iris dataset<\/strong>, log everything with MLflow, and register the model.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 <strong>Step-by-Step MLflow Lab on Databricks<\/strong><\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 1: Setup (Install Required Libraries)<\/strong><\/h3>\n\n\n\n<p>Run this in a cell:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">%pip install scikit-learn pandas mlflow\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 2: Import Libraries and Load Data<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> pandas <span class=\"hljs-keyword\">as<\/span> pd\n<span class=\"hljs-keyword\">from<\/span> sklearn <span class=\"hljs-keyword\">import<\/span> datasets\n<span class=\"hljs-keyword\">from<\/span> sklearn.ensemble <span class=\"hljs-keyword\">import<\/span> RandomForestClassifier\n<span class=\"hljs-keyword\">from<\/span> sklearn.model_selection <span class=\"hljs-keyword\">import<\/span> train_test_split\n<span class=\"hljs-keyword\">from<\/span> sklearn.metrics <span class=\"hljs-keyword\">import<\/span> accuracy_score\n<span class=\"hljs-keyword\">import<\/span> mlflow\n<span class=\"hljs-keyword\">import<\/span> mlflow.sklearn\n<span class=\"hljs-keyword\">from<\/span> mlflow.models.signature <span class=\"hljs-keyword\">import<\/span> infer_signature\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 3: Prepare the Data<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Load Iris dataset<\/span>\niris = datasets.load_iris()\nX = iris.data\ny = iris.target\n\n<span class=\"hljs-comment\"># Split into training and testing<\/span>\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=<span class=\"hljs-number\">0.3<\/span>, random_state=<span class=\"hljs-number\">42<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 4: Start MLflow Run and Train Model<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Start MLflow experiment run<\/span>\nwith mlflow.start_run() <span class=\"hljs-keyword\">as<\/span> run:\n\n    <span class=\"hljs-comment\"># Train the model<\/span>\n    model = RandomForestClassifier(n_estimators=<span class=\"hljs-number\">100<\/span>, max_depth=<span class=\"hljs-number\">5<\/span>, random_state=<span class=\"hljs-number\">42<\/span>)\n    model.fit(X_train, y_train)\n\n    <span class=\"hljs-comment\"># Make predictions and calculate accuracy<\/span>\n    predictions = model.predict(X_test)\n    acc = accuracy_score(y_test, predictions)\n\n    <span class=\"hljs-comment\"># Log parameters and metric<\/span>\n    mlflow.log_param(<span class=\"hljs-string\">\"n_estimators\"<\/span>, <span class=\"hljs-number\">100<\/span>)\n    mlflow.log_param(<span class=\"hljs-string\">\"max_depth\"<\/span>, <span class=\"hljs-number\">5<\/span>)\n    mlflow.log_metric(<span class=\"hljs-string\">\"accuracy\"<\/span>, acc)\n\n    <span class=\"hljs-comment\"># Create sample input and signature<\/span>\n    input_example = X_test&#91;:<span class=\"hljs-number\">5<\/span>]\n    signature = infer_signature(X_train, model.predict(X_train))\n\n    <span class=\"hljs-comment\"># Log model with signature and input example<\/span>\n    mlflow.sklearn.log_model(\n        sk_model=model,\n        artifact_path=<span class=\"hljs-string\">\"iris_rf_model\"<\/span>,\n        input_example=input_example,\n        signature=signature\n    )\n\n    <span class=\"hljs-comment\"># Save run_id for model registration<\/span>\n    run_id = run.info.run_id\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Run ID: {run_id}\"<\/span>)\n    <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"Accuracy: {acc}\"<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 5: Register the Model<\/strong><\/h3>\n\n\n\n<p>Paste this in a new cell:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">model_uri = f<span class=\"hljs-string\">\"runs:\/{run_id}\/iris_rf_model\"<\/span>\n\n<span class=\"hljs-comment\"># Register the model under a name<\/span>\nmodel_details = mlflow.register_model(\n    model_uri=model_uri,\n    name=<span class=\"hljs-string\">\"IrisClassifierModel\"<\/span>\n)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u2705 Now go to <strong>&#8220;Models&#8221; tab in Databricks<\/strong>, and you&#8217;ll see <strong><code>IrisClassifierModel<\/code><\/strong> with versioning.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 6: Promote the Model (via UI)<\/strong><\/h3>\n\n\n\n<p>Go to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Models > IrisClassifierModel<\/strong><\/li>\n\n\n\n<li>Click on the version (e.g., Version 1)<\/li>\n\n\n\n<li>Click <code>Stage<\/code> \u2192 Choose <code>Staging<\/code> or <code>Production<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># To Promore Version1 to Production<\/span>\n\nfrom mlflow.tracking import MlflowClient\n\nclient = MlflowClient()\nclient.transition_model_version_stage(\n    name=<span class=\"hljs-string\">\"IrisClassifierModel\"<\/span>,\n    version=<span class=\"hljs-number\">1<\/span>,  <span class=\"hljs-comment\"># or the actual version you created<\/span>\n    stage=<span class=\"hljs-string\">\"Production\"<\/span>  <span class=\"hljs-comment\"># or \"Staging\", \"Archived\"<\/span>\n)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>OR<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Assign an alias (like @production) to the version<\/span>\nfrom mlflow.tracking import MlflowClient\n\nclient = MlflowClient()\n\nclient.set_registered_model_alias(\n    name=<span class=\"hljs-string\">\"IrisClassifierModel\"<\/span>,\n    alias=<span class=\"hljs-string\">\"production\"<\/span>,\n    version=<span class=\"hljs-number\">1<\/span>\n)\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Run this to list your registered models:<\/span>\nclient = MlflowClient()\nmodels = client.list_registered_models()\n<span class=\"hljs-keyword\">for<\/span> m in models:\n    <span class=\"hljs-keyword\">print<\/span>(m.name)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Step 7: Load Model from Registry and Predict<\/strong><\/h3>\n\n\n\n<p><strong>Option A: If your model is in &#8220;Production&#8221; stage<\/strong> (via UI):<\/p>\n\n\n\n<p>Now that the model is registered and staged, let\u2019s load it and use it:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from mlflow.pyfunc import load_model\n\n<span class=\"hljs-comment\"># Load model from registry using stage name<\/span>\nmodel = load_model(<span class=\"hljs-string\">\"models:\/IrisClassifierModel\/Production\"<\/span>)\n\n<span class=\"hljs-comment\"># Predict<\/span>\npreds = model.predict(X_test)\n<span class=\"hljs-keyword\">print<\/span>(preds)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Option B: If you used an alias<\/strong> (e.g., <code>production<\/code>) instead of a stage:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from mlflow.pyfunc import load_model\n\n<span class=\"hljs-comment\"># Load model using alias<\/span>\nmodel = load_model(<span class=\"hljs-string\">\"models:\/IrisClassifierModel@production\"<\/span>)\n\n<span class=\"hljs-comment\"># Predict<\/span>\npreds = model.predict(X_test)\n<span class=\"hljs-keyword\">print<\/span>(preds)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf89 You Did It!<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>MLflow Component<\/th><th>Covered \u2705<\/th><\/tr><\/thead><tbody><tr><td><strong>Tracking<\/strong><\/td><td>Yes (log params, metrics, artifacts)<\/td><\/tr><tr><td><strong>Models<\/strong><\/td><td>Yes (logged with signature + input example)<\/td><\/tr><tr><td><strong>Model Registry<\/strong><\/td><td>Yes (registered and promoted via UI)<\/td><\/tr><tr><td><strong>Serving\/Loading<\/strong><\/td><td>Yes (loaded from registry and used for predictions)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Bonus Tips:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Want to <strong>serve the model as REST API<\/strong>? MLflow on Databricks supports model serving.<\/li>\n\n\n\n<li>Want to run this as a <strong>Project<\/strong>? We can convert this into an MLflow Project next.<\/li>\n<\/ul>\n\n\n\n<p>Let me know if you want this exported as a <code>.dbc<\/code> Databricks Notebook or want to integrate with CI\/CD!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Objective: Serve Your MLflow Model via REST API on Databricks<\/h2>\n\n\n\n<p>Absolutely! Since you&#8217;ve already registered the model and assigned an alias like <code>production<\/code>, you\u2019re ready to <strong>serve the model<\/strong> using Databricks <strong>Model Serving<\/strong>.<\/p>\n\n\n\n<p>Let\u2019s go through this <strong>step-by-step<\/strong>, assuming you&#8217;re using a <strong>Databricks Trial or Paid workspace (not Community Edition)<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 <strong>Objective: Serve Your MLflow Model via REST API on Databricks<\/strong><\/h2>\n\n\n\n<p>We\u2019ll go from <strong>registered model with alias<\/strong> \u279c to <strong>real-time REST endpoint<\/strong> \u279c to <strong>making predictions from code<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 <strong>Step 1: Confirm Model Registration &amp; Alias<\/strong><\/h2>\n\n\n\n<p>You&#8217;ve already done this, but here\u2019s a quick reference for future:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from mlflow.tracking import MlflowClient\n\nclient = MlflowClient()\n\n<span class=\"hljs-comment\"># Register model (already done)<\/span>\nmodel_uri = f<span class=\"hljs-string\">\"runs:\/{run_id}\/iris_rf_model\"<\/span>\nclient.register_model(model_uri=model_uri, name=<span class=\"hljs-string\">\"IrisClassifierModel\"<\/span>)\n\n<span class=\"hljs-comment\"># Set alias<\/span>\nclient.set_registered_model_alias(\n    name=<span class=\"hljs-string\">\"IrisClassifierModel\"<\/span>,\n    alias=<span class=\"hljs-string\">\"production\"<\/span>,\n    version=<span class=\"hljs-number\">1<\/span>\n)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 <strong>Step 2: Enable Model Serving from Databricks UI<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Databricks Workspace<\/strong>.<\/li>\n\n\n\n<li>In the left sidebar, click <strong>&#8220;Models&#8221;<\/strong>.<\/li>\n\n\n\n<li>Click on <strong><code>IrisClassifierModel<\/code><\/strong>.<\/li>\n\n\n\n<li>Click on <strong>Version 1<\/strong> (or the version you aliased).<\/li>\n\n\n\n<li>You should see a <strong>\u201cServing\u201d<\/strong> or <strong>\u201cEnable Serving\u201d<\/strong> button.<\/li>\n\n\n\n<li>Click it, then:\n<ul class=\"wp-block-list\">\n<li>Choose <strong>Real-time serving<\/strong><\/li>\n\n\n\n<li>Click <strong>Start serving<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u2705 Once serving is enabled, you\u2019ll see the <strong>endpoint URL<\/strong> (copy it!).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 <strong>Step 3: Use the REST Endpoint for Predictions<\/strong><\/h2>\n\n\n\n<p>Here\u2019s a full Python example to send test data and get predictions:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import requests\nimport json\n\n<span class=\"hljs-comment\"># Replace with your actual endpoint from Databricks<\/span>\nurl = <span class=\"hljs-string\">\"https:\/\/&lt;your-databricks-instance&gt;\/serving-endpoints\/IrisClassifierModel\/invocations\"<\/span>\n\n<span class=\"hljs-comment\"># If needed, generate a Personal Access Token from Databricks User Settings<\/span>\ntoken = <span class=\"hljs-string\">\"dapiXXXXXXXXXXXXXXXXXXXX\"<\/span>\n\n<span class=\"hljs-comment\"># Headers<\/span>\nheaders = {\n    <span class=\"hljs-string\">\"Authorization\"<\/span>: f<span class=\"hljs-string\">\"Bearer {token}\"<\/span>,\n    <span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"application\/json\"<\/span>\n}\n\n<span class=\"hljs-comment\"># Input payload (match your model\u2019s input structure)<\/span>\ndata = {\n    <span class=\"hljs-string\">\"dataframe_split\"<\/span>: {\n        <span class=\"hljs-string\">\"columns\"<\/span>: &#91;<span class=\"hljs-string\">\"sepal length (cm)\"<\/span>, <span class=\"hljs-string\">\"sepal width (cm)\"<\/span>, <span class=\"hljs-string\">\"petal length (cm)\"<\/span>, <span class=\"hljs-string\">\"petal width (cm)\"<\/span>],\n        <span class=\"hljs-string\">\"data\"<\/span>: &#91;&#91;<span class=\"hljs-number\">5.1<\/span>, <span class=\"hljs-number\">3.5<\/span>, <span class=\"hljs-number\">1.4<\/span>, <span class=\"hljs-number\">0.2<\/span>]]\n    }\n}\n\n<span class=\"hljs-comment\"># Send request<\/span>\nresponse = requests.post(url, headers=headers, json=data)\n\n<span class=\"hljs-comment\"># Print response<\/span>\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"Prediction:\"<\/span>, response.json())\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 <strong>Step 4: Test It!<\/strong><\/h2>\n\n\n\n<p>Run the above Python code in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Databricks notebook<\/li>\n\n\n\n<li>Jupyter notebook<\/li>\n\n\n\n<li>Any Python script<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 <strong>Generate a Personal Access Token (If Needed)<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click on your profile icon in the top-right corner of Databricks.<\/li>\n\n\n\n<li>Go to <strong>&#8220;User Settings&#8221; > &#8220;Access Tokens&#8221;<\/strong><\/li>\n\n\n\n<li>Click <strong>Generate New Token<\/strong><\/li>\n\n\n\n<li>Copy it and use it in your <code>token<\/code> variable<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea <strong>Example Output:<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Prediction<\/span>: <span class=\"hljs-selector-attr\">&#91;0]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This means it predicted class <code>0<\/code> (e.g., Setosa for Iris dataset).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Summary of Steps:<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Action<\/th><\/tr><\/thead><tbody><tr><td>\u2705 1<\/td><td>Register model and set alias (<code>production<\/code>)<\/td><\/tr><tr><td>\u2705 2<\/td><td>Enable model serving in Databricks UI<\/td><\/tr><tr><td>\u2705 3<\/td><td>Copy REST endpoint URL<\/td><\/tr><tr><td>\u2705 4<\/td><td>Send test prediction via Python using <code>requests<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Would you like me to generate a ready-to-run notebook (.dbc) with this entire process? Or help you test it directly with your live Databricks instance?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Absolutely! Let\u2019s walk through a complete, step-by-step tutorial to help you understand MLflow on Databricks from start to finish, using revised and working code. We&#8217;ll cover all key components of&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49012","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49012","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49012"}],"version-history":[{"count":9,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49012\/revisions"}],"predecessor-version":[{"id":49021,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49012\/revisions\/49021"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}