模型統一目錄的例子

預覽

這個特性是在公共預覽

這個例子演示了如何使用模型統一目錄建立一個機器學習應用程序預測每日風電場的輸出功率。這個例子展示了如何:

  • 跟蹤和日誌與MLflow模型

  • 注冊模型來統一目錄

  • 描述模型和部署它們使用別名進行推理

  • 注冊模型與生產應用程序集成

  • 搜索和發現模型統一目錄

  • 存檔和刪除模型

這篇文章描述如何執行這些步驟使用MLflow跟蹤和模型統一目錄ui和api。

這篇文章包括一個筆記本說明所有這些步驟使用MLflow跟蹤和注冊表api。

需求

確保你滿足所有的要求需求。此外,本文中的代碼示例假設您有以下特權:

  • 使用目錄上的特權主要目錄。

  • 創建模型使用模式特權的main.default模式。

安裝MLflow Python客戶機

這個例子需要MLflow 2.5.0以上和TensorFlow Python客戶機版本。你的筆記本的頂部添加以下命令安裝這些依賴項。

%皮普安裝- - -升級“mlflow-skinny(磚)> = 2.5.0”tensorflowdbutils圖書館restartPython()

加載數據集,訓練模型,並注冊統一目錄

本節展示如何加載風電場數據集,訓練模型,並注冊模型統一目錄。模型訓練和指標的跟蹤實驗運行

加載數據集

下麵的代碼加載數據集包含天氣數據和風電場功率輸出信息在美國。數據集包含方向,速度,空氣溫度功能(一次采樣每六小時00:00一旦在喂飼,一旦在16:00時),以及每日總輸出功率(權力),在未來幾年內。

進口熊貓作為pdwind_farm_data=pdread_csv(“https://github.com/dbczumar/model-registry-demo-notebook/raw/master/dataset/windfarm_data.csv”,index_col=0)defget_training_data():training_data=pdDataFrame(wind_farm_data(“2014-01-01”:“2018-01-01”])X=training_data下降(=“權力”)y=training_data(“權力”]返回X,ydefget_validation_data():validation_data=pdDataFrame(wind_farm_data(“2018-01-01”:“2019-01-01”])X=validation_data下降(=“權力”)y=validation_data(“權力”]返回X,ydefget_weather_and_forecast():format_date=λpd_date:pd_date日期()strftime(“% Y - % m% d)今天=pd時間戳(“今天”)正常化()week_ago=今天- - - - - -pdTimedelta(=5)week_later=今天+pdTimedelta(=5)past_power_output=pdDataFrame(wind_farm_data)[format_date(week_ago):format_date(今天)]weather_and_forecast=pdDataFrame(wind_farm_data)[format_date(week_ago):format_date(week_later)]如果len(weather_and_forecast)<10:past_power_output=pdDataFrame(wind_farm_data)iloc(- - - - - -10:- - - - - -5]weather_and_forecast=pdDataFrame(wind_farm_data)iloc(- - - - - -10:]返回weather_and_forecast下降(=“權力”),past_power_output(“權力”]

統一目錄中的配置MLflow客戶機訪問模型

默認情況下,MLflow Python客戶機在工作區中創建模型模型注冊磚。升級到模型統一目錄,統一目錄配置客戶端訪問模型:

進口mlflowmlflowset_registry_uri(“databricks-uc”)

培訓和注冊模型

下麵的代碼訓練一個神經網絡使用TensorFlow Keras根據天氣預測功率輸出特性的數據集,並使用MLflow api來擬合模型來統一目錄登記。

tensorflow.keras.models進口順序tensorflow.keras.layers進口密集的MODEL_NAME=“main.default.wind_forecasting”deftrain_and_register_keras_model(X,y):mlflowstart_run():模型=順序()模型添加(密集的(One hundred.,input_shape=(X形狀(- - - - - -1),),激活=“relu”,的名字=“hidden_layer”))模型添加(密集的(1))模型編譯(損失=“mse”,優化器=“亞當”)模型適合(X,y,時代=One hundred.,batch_size=64年,validation_split=。2)example_input=X[:10]to_numpy()mlflowtensorflowlog_model(模型,artifact_path=“模型”,input_example=example_input,registered_model_name=MODEL_NAME)返回模型X_train,y_train=get_training_data()模型=train_and_register_keras_model(X_train,y_train)

視圖模型在UI中

你可以查看和管理注冊模型和模型版本統一目錄使用數據瀏覽。找下您剛才創建的模型主要目錄和默認的模式。

注冊頁麵模型”src=

部署一個推理模型版本

模型統一目錄支持別名對模型的部署。別名提供可變的,名叫引用(examplem“冠軍”或“挑戰者”)一個特定版本的注冊模型。你可以參考和目標模型版本使用這些別名在下遊推理工作流。

一旦你注冊模型在數據瀏覽器導航,點擊下別名列分配別名到模型的最新版本“冠軍”,並按“繼續”保存更改。

設置注冊模型別名”src=

負荷模型使用API版本

MLflow模型組件定義函數加載模型從幾個機器學習框架。例如,mlflow.tensorflow.load_model ()是用於加載TensorFlow模型保存在MLflow格式,然後呢mlflow.sklearn.load_model ()是用於加載scikit-learn模型保存在MLflow格式。

這些函數可以從模型統一目錄加載模型。

進口mlflow.pyfuncmodel_version_uri=“模型:/{model_name}/ 1”格式(model_name=MODEL_NAME)打印(“從URI加載注冊模型版本:{model_uri}’”格式(model_uri=model_version_uri))model_version_1=mlflowpyfuncload_model(model_version_uri)model_champion_uri=“模型:/{model_name}@Champion”格式(model_name=MODEL_NAME)打印(“從URI加載注冊模型版本:{model_uri}’”格式(model_uri=model_champion_uri))champion_model=mlflowpyfuncload_model(model_champion_uri)

與冠軍模型預測輸出功率

在本節中,冠軍模型用於評估風電場的天氣預報數據。的forecast_power ()應用程序加載指定的預測模型的最新版本階段,用它來預測電力生產在未來5天。

mlflow.tracking進口MlflowClientdef情節(model_name,model_alias,model_version,power_predictions,past_power_output):進口matplotlib.dates作為mdatmatplotlib進口pyplot作為plt指數=power_predictions指數無花果=plt(figsize=(11,7))斧頭=無花果add_subplot(111年)斧頭set_xlabel(“日期”,大小=20.,labelpad=20.)斧頭set_ylabel(“權力\ n輸出\ n(MW)”,大小=20.,labelpad=60,旋轉=0)斧頭tick_params(=“兩個”,哪一個=“主要的”,labelsize=17)斧頭xaxisset_major_formatter(mdatdateformat(' % m /% d))斧頭情節(指數[:len(past_power_output)),past_power_output,標簽=“真正的”,顏色=“紅色”,α=0.5,線寬=4)斧頭情節(指數,power_predictions擠壓(),”——“,標簽=“預測”% s\ n的別名% s”(版本% d)”%(model_name,model_alias,model_version),顏色=“藍色”,線寬=3)斧頭set_ylim(ymin=0,ymax=馬克斯(3500年,int(馬克斯(power_predictions)*1.3)))斧頭傳說(字形大小=14)plt標題(“風電場輸出功率預測”,大小=24,=20.)plttight_layout()顯示(plt顯示())defforecast_power(model_name,model_alias):進口熊貓作為pd客戶端=MlflowClient()model_version=客戶端get_model_version_by_alias(model_name,model_alias)版本model_uri=“模型:/{model_name}@{model_alias}格式(model_name=MODEL_NAME,model_alias=model_alias)模型=mlflowpyfuncload_model(model_uri)weather_data,past_power_output=get_weather_and_forecast()power_predictions=pdDataFrame(模型預測(weather_data))power_predictions指數=pdto_datetime(weather_data指數)打印(power_predictions)情節(model_name,model_alias,int(model_version),power_predictions,past_power_output)forecast_power(MODEL_NAME,“冠軍”)

添加模型和模型使用API版本的描述

本節中的代碼展示了如何添加模型和模型描述使用MLflow API版本。

客戶端=MlflowClient()客戶端update_registered_model(的名字=MODEL_NAME,描述=“這個模型預測風電場的功率輸出基於氣象數據。天氣數據包括三個特點:風速、風向、氣溫。”)客戶端update_model_version(的名字=MODEL_NAME,版本=1,描述=“這個模型版本使用TensorFlow Keras。這是一個與一個隱藏層前饋神經網絡。”)

創建一個新的模型版本

經典的機器學習技術也對權力的有效預測。下麵的代碼使用scikit-learn訓練隨機森林模型並統一目錄使用寄存器mlflow.sklearn.log_model ()函數。

進口mlflow.sklearnsklearn.ensemble進口RandomForestRegressorsklearn.metrics進口mean_squared_errormlflowstart_run():n_estimators=300年mlflowlog_param(“n_estimators”,n_estimators)rand_forest=RandomForestRegressor(n_estimators=n_estimators)rand_forest適合(X_train,y_train)val_x,val_y=get_validation_data()均方誤差=mean_squared_error(rand_forest預測(val_x),val_y)打印(“驗證MSE:% d%均方誤差)mlflowlog_metric(“mse”,均方誤差)example_input=val_xiloc[[0]]#指定的“registered_model_name”參數“mlflow.sklearn.log_model ()”# <大學>函數注冊模型。這個自動#創建一個新的模型版本mlflowsklearnlog_model(sk_model=rand_forest,artifact_path=“sklearn-model”,input_example=example_input,registered_model_name=MODEL_NAME)

獲取新模型版本號

下麵的代碼顯示了如何檢索最新的模型型號名稱版本號。

客戶端=MlflowClient()model_version_infos=客戶端search_model_versions(“name = '% s’”%MODEL_NAME)new_model_version=馬克斯([model_version_info版本model_version_infomodel_version_infos])

添加一個新模型版本描述

客戶端update_model_version(的名字=MODEL_NAME,版本=new_model_version,描述=“這版本是一個隨機森林模型包含100決策樹在scikit-learn訓練。”)

新的模型版本標記為挑戰者和測試模型

為生產流量之前部署模型,這是一個最佳實踐測試樣品的生產數據。以前,你用“冠軍”別名來表示模型版本提供大部分的生產工作負載。下麵的代碼分配新模式的“挑戰者”別名版本,並評價其性能。

客戶端set_registered_model_alias(的名字=MODEL_NAME,別名=“挑戰者”,版本=new_model_version)forecast_power(MODEL_NAME,“挑戰者”)

部署新版本冠軍模型模型

後驗證新模型的版本在測試中表現良好,下麵的代碼分配新模式的“冠軍”別名版本和使用的相同的應用程序代碼與冠軍模型預測輸出功率部分生產能力預測。

客戶端set_registered_model_alias(的名字=MODEL_NAME,別名=“冠軍”,版本=new_model_version)forecast_power(MODEL_NAME,“冠軍”)

現在有兩個版本的模型預測模型:該模型版本培訓Keras scikit-learn訓練模型和版本。注意“挑戰者”別名是分配給新的scikit-learn模型版本,所以任何下遊負載目標“挑戰者”模型版本繼續成功運行:

產品型號版本”src=

存檔和刪除模型

當一個模型版本不再使用,你可以刪除它。您還可以刪除整個注冊模型;這個刪除所有相關的模型版本。注意,刪除模型版本清除任何別名分配給模型版本。

刪除版本1使用MLflow API

客戶端delete_model_version(的名字=MODEL_NAME,版本=1,)

刪除模型使用MLflow API

客戶端=MlflowClient()客戶端delete_registered_model(的名字=MODEL_NAME)

筆記本

下麵的筆記本將本文中的代碼片段組合成一個可運行的筆記本。

筆記本電腦模型統一目錄中的示例