开始
加载和管理数据
处理数据
政府
引用和资源
2023年8月1日更新
给我们反馈
预览
这个特性是在公共预览。
这个例子演示了如何使用模型统一目录建立一个机器学习应用程序预测每日风电场的输出功率。这个例子展示了如何:
跟踪和日志与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)
下面的笔记本将本文中的代码片段组合成一个可运行的笔记本。
在新标签页打开笔记本