開始
加載和管理數據
處理數據
政府
引用和資源
2023年8月3日更新
給我們反饋
預覽
這個特性是在公共預覽。
這個例子演示了如何使用模型統一目錄建立一個機器學習應用程序預測每日風電場的輸出功率。這個例子展示了如何:
跟蹤和日誌與MLflow模型
注冊模型來統一目錄
描述模型和部署它們使用別名進行推理
注冊模型與生產應用程序集成
搜索和發現模型統一目錄
存檔和刪除模型
這篇文章描述如何執行這些步驟使用MLflow跟蹤和模型統一目錄ui和api。
這篇文章包括一個筆記本說明所有這些步驟使用MLflow跟蹤和注冊表api。
確保你滿足所有的要求需求。此外,本文中的代碼示例假設您有以下特權:
使用目錄上的特權主要目錄。
使用目錄
主要
創建模型和使用模式特權的main.default模式。
創建模型
使用模式
main.default
這個例子需要MLflow 2.5.0以上和TensorFlow Python客戶機版本。你的筆記本的頂部添加以下命令安裝這些依賴項。
%皮普安裝- - -升級“mlflow-skinny(磚)> = 2.5.0”tensorflowdbutils。圖書館。restartPython()
本節展示如何加載風電場數據集,訓練模型,並注冊模型統一目錄。模型訓練和指標的跟蹤實驗運行。
下麵的代碼加載數據集包含天氣數據和風電場功率輸出信息在美國。數據集包含風方向,風速度,空氣溫度功能(一次采樣每六小時00:00一旦在喂飼,一旦在16:00時),以及每日總輸出功率(權力),在未來幾年內。
風方向
風速度
空氣溫度
00:00
喂飼
16:00時
權力
進口熊貓作為pdwind_farm_data=pd。read_csv(“https://github.com/dbczumar/model-registry-demo-notebook/raw/master/dataset/windfarm_data.csv”,index_col=0)defget_training_data():training_data=pd。DataFrame(wind_farm_data(“2014-01-01”:“2018-01-01”])X=training_data。下降(列=“權力”)y=training_data(“權力”]返回X,ydefget_validation_data():validation_data=pd。DataFrame(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=今天- - - - - -pd。Timedelta(天=5)week_later=今天+pd。Timedelta(天=5)past_power_output=pd。DataFrame(wind_farm_data)[format_date(week_ago):format_date(今天)]weather_and_forecast=pd。DataFrame(wind_farm_data)[format_date(week_ago):format_date(week_later)]如果len(weather_and_forecast)<10:past_power_output=pd。DataFrame(wind_farm_data)。iloc(- - - - - -10:- - - - - -5]weather_and_forecast=pd。DataFrame(wind_farm_data)。iloc(- - - - - -10:]返回weather_and_forecast。下降(列=“權力”),past_power_output(“權力”]
默認情況下,MLflow Python客戶機在工作區中創建模型模型注冊磚。升級到模型統一目錄,統一目錄配置客戶端訪問模型:
進口mlflowmlflow。set_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):與mlflow。start_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()mlflow。tensorflow。log_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)
你可以查看和管理注冊模型和模型版本統一目錄使用數據瀏覽。找下您剛才創建的模型主要目錄和默認的模式。
默認的
模型統一目錄支持別名對模型的部署。別名提供可變的,名叫引用(examplem“冠軍”或“挑戰者”)一個特定版本的注冊模型。你可以參考和目標模型版本使用這些別名在下遊推理工作流。
一旦你注冊模型在數據瀏覽器導航,點擊下別名列分配別名到模型的最新版本“冠軍”,並按“繼續”保存更改。
MLflow模型組件定義函數加載模型從幾個機器學習框架。例如,mlflow.tensorflow.load_model ()是用於加載TensorFlow模型保存在MLflow格式,然後呢mlflow.sklearn.load_model ()是用於加載scikit-learn模型保存在MLflow格式。
mlflow.tensorflow.load_model ()
mlflow.sklearn.load_model ()
這些函數可以從模型統一目錄加載模型。
進口mlflow.pyfuncmodel_version_uri=“模型:/{model_name}/ 1”。格式(model_name=MODEL_NAME)打印(“從URI加載注冊模型版本:{model_uri}’”。格式(model_uri=model_version_uri))model_version_1=mlflow。pyfunc。load_model(model_version_uri)model_champion_uri=“模型:/{model_name}@Champion”。格式(model_name=MODEL_NAME)打印(“從URI加載注冊模型版本:{model_uri}’”。格式(model_uri=model_champion_uri))champion_model=mlflow。pyfunc。load_model(model_champion_uri)
在本節中,冠軍模型用於評估風電場的天氣預報數據。的forecast_power ()應用程序加載指定的預測模型的最新版本階段,用它來預測電力生產在未來5天。
forecast_power ()
從mlflow.tracking進口MlflowClientdef情節(model_name,model_alias,model_version,power_predictions,past_power_output):進口matplotlib.dates作為mdat從matplotlib進口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)斧頭。xaxis。set_major_formatter(mdat。dateformat(' % 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.)plt。tight_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)模型=mlflow。pyfunc。load_model(model_uri)weather_data,past_power_output=get_weather_and_forecast()power_predictions=pd。DataFrame(模型。預測(weather_data))power_predictions。指數=pd。to_datetime(weather_data。指數)打印(power_predictions)情節(model_name,model_alias,int(model_version),power_predictions,past_power_output)forecast_power(MODEL_NAME,“冠軍”)
本節中的代碼展示了如何添加模型和模型描述使用MLflow API版本。
客戶端=MlflowClient()客戶端。update_registered_model(的名字=MODEL_NAME,描述=“這個模型預測風電場的功率輸出基於氣象數據。天氣數據包括三個特點:風速、風向、氣溫。”)客戶端。update_model_version(的名字=MODEL_NAME,版本=1,描述=“這個模型版本使用TensorFlow Keras。這是一個與一個隱藏層前饋神經網絡。”)
經典的機器學習技術也對權力的有效預測。下麵的代碼使用scikit-learn訓練隨機森林模型並統一目錄使用寄存器mlflow.sklearn.log_model ()函數。
mlflow.sklearn.log_model ()
進口mlflow.sklearn從sklearn.ensemble進口RandomForestRegressor從sklearn.metrics進口mean_squared_error與mlflow。start_run():n_estimators=300年mlflow。log_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”%均方誤差)mlflow。log_metric(“mse”,均方誤差)example_input=val_x。iloc[[0]]#指定的“registered_model_name”參數“mlflow.sklearn.log_model ()”# <大學>函數注冊模型。這個自動#創建一個新的模型版本mlflow。sklearn。log_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_info在model_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模型版本,所以任何下遊負載目標“挑戰者”模型版本繼續成功運行:
當一個模型版本不再使用,你可以刪除它。您還可以刪除整個注冊模型;這個刪除所有相關的模型版本。注意,刪除模型版本清除任何別名分配給模型版本。
版本1
客戶端。delete_model_version(的名字=MODEL_NAME,版本=1,)
客戶端=MlflowClient()客戶端。delete_registered_model(的名字=MODEL_NAME)
下麵的筆記本將本文中的代碼片段組合成一個可運行的筆記本。
在新標簽頁打開筆記本