管理模型生命周期
本文描述如何使用MLflow Model Registry作为机器学习工作流的一部分来管理ML模型的完整生命周期。Databricks提供了MLflow模型注册表的托管版本。模型注册表提供:
时序模型沿袭(MLflow实验和运行在给定时间产生模型)。
模型服务于无服务器实时推理或经典MLflow模型服务.
模型版本。
阶段转换(例如,从登台到生产或存档)。
人则因此,您可以根据注册表事件自动触发操作。
模型事件的电子邮件通知。
您还可以创建和查看模型描述并留下评论。
本文包括模型注册中心UI和模型注册中心API的说明。
有关模型注册中心概念的概述,请参见MLflow指南.
创建或注册一个模型
您可以使用UI创建或注册模型使用API注册一个模型.
使用UI创建或注册一个模型
在model Registry中注册模型有两种方法。您可以注册一个已记录到MLflow的现有模型,也可以创建并注册一个新的空模型,然后将先前记录的模型分配给它。
从笔记本中注册一个现有的日志模型
在工作区中,识别包含您想要注册的模型的MLflow运行。
单击实验图标在笔记本的右边栏。
在“实验运行”侧栏中,单击运行日期旁边的图标。将显示MLflow Run页面。此页面显示了运行的详细信息,包括参数、度量、标记和工件列表。
在Artifacts部分中,单击指定的目录xxx-model.
单击注册模式按钮在最右边。
在对话框中,单击模型装箱并做以下其中一项:
选择创建新模型从下拉菜单中。的模型名称字段出现。例如,输入一个模型名称
scikit-learn-power-forecasting
.从下拉菜单中选择已存在的型号。
点击注册.
如果你选择了创建新模型,这将注册一个名为
scikit-learn-power-forecasting
,将模型复制到由MLflow model Registry管理的安全位置,并创建模型的新版本。如果您选择了一个现有的模型,这将注册所选模型的一个新版本。
过了一会儿,注册模式按钮更改为到新注册模型版本的链接。
单击链接在model Registry UI中打开新模型版本。您还可以通过单击在model Registry中找到模型模型在侧栏中。
创建一个新的注册模型,并将一个日志模型分配给它
您可以使用注册模型页面上的Create Model按钮来创建一个新的空模型,然后将一个已记录的模型分配给它。遵循以下步骤:
在已注册型号页面,单击创建模型.输入模型的名称并单击创建.
按照步骤1到步骤3进行从笔记本中注册一个现有的日志模型.
在Register Model对话框中,选择您在步骤1中创建的模型的名称并单击注册.这将使用您创建的名称注册一个模型,将模型复制到由MLflow model Registry管理的安全位置,并创建一个模型版本:
版本1
.过了一会儿,MLflow Run UI将注册模型按钮替换为指向新注册模型版本的链接。方法中选择模型模型上的“寄存器模型”对话框中的下拉列表实验运行页面。您还可以通过在API命令中指定模型的名称来注册模型的新版本,例如创建ModelVersion.
使用API注册一个模型
在model Registry中注册模型有三种编程方法。所有方法都将模型复制到由MLflow模型注册中心管理的安全位置。
要在MLflow实验期间记录模型并将其注册为指定的名称,请使用
mlflow。< model-flavor > .log_model(…)
方法。如果具有该名称的已注册模型不存在,该方法将注册一个新模型,创建Version 1,并返回一个ModelVersion
MLflow对象。如果已经存在该名称的注册模型,该方法将创建一个新的模型版本并返回版本对象。与mlflow.start_run(run_name= <运行-的名字>)作为运行:...mlflow.<模型-味道>。log_model(<模型-味道> = <模型>,artifact_path=“< model-path >”,registered_model_name=“<模型名称>”)
在所有实验运行完成并决定最适合添加到注册中心的模型后,要使用指定的名称注册模型,请使用
mlflow.register_model ()
方法。方法的运行IDmlruns: URI
论点。如果具有该名称的已注册模型不存在,该方法将注册一个新模型,创建Version 1,并返回一个ModelVersion
MLflow对象。如果已经存在该名称的注册模型,该方法将创建一个新的模型版本并返回版本对象。结果=mlflow.register_model(”:< model-path >”,“<模型名称>”)
要创建具有指定名称的新注册模型,请使用MLflow客户端API
create_registered_model ()
方法。如果模型名称存在,此方法将抛出MLflowException
.客户端=MlflowClient()结果=客户端.create_registered_model(“<模型名称>”)
控制对模型的访问
要了解如何控制对模型注册表中注册的模型的访问,请参见模型权限.
转换模型阶段
模型版本有以下阶段之一:没有一个,暂存,生产,或存档.的暂存阶段用于模型测试和验证,而生产Stage用于已经完成测试或审查流程并已部署到应用程序进行实时评分的模型版本。假定存档模型版本是不活动的,此时您可以考虑删除它.模型的不同版本可能处于不同的阶段。
适当的用户许可可以在阶段之间转换模型版本。如果您拥有将模型版本转换到特定阶段的权限,则可以直接进行转换。如果您没有权限,您可以请求阶段转换,而具有转换模型版本权限的用户可以批准、拒绝或取消请求.
您可以使用UI或转换模型阶段使用API.
使用UI转换模型阶段
遵循以下说明来转换模型的阶段。
要显示可用模型阶段和可用选项的列表,在模型版本页面中,单击旁边的下拉列表阶段:并请求或选择过渡到另一个阶段。
输入可选的注释并单击好吧.
将模型版本转换到生产阶段
在测试和验证之后,您可以转换或请求转换到生产阶段。
Model Registry在每个阶段中允许注册模型的多个版本。如果您希望在生产中只有一个版本,您可以通过检查将当前在生产中的模型的所有版本转换为存档将现有的生产模型版本转换为存档版本.
使用API转换模型阶段
使用适当的用户权限可以将模型版本转换到新阶段。
要将模型版本阶段更新到新阶段,请使用MLflow客户端APItransition_model_version_stage ()
方法:
客户端=MlflowClient()客户端.transition_model_version_stage(的名字=“<模型名称>”,版本= <模型-版本>,阶段=“< >阶段”,描述=“<描述>”)
的公认值> <阶段
是:“暂存”|“暂存”
,“存档”|“归档”
,“生产”|“生产”
,“没有”|“没有”
.
使用模型进行推理
预览
此功能已在公共预览.
在model Registry中注册模型后,您可以自动生成一个笔记本,以使用该模型进行批处理或流推断。或者,您可以创建一个端点来使用该模型进行实时服务无服务器实时推理或经典MLflow模型服务于数据库.
的右上角注册模型页面或者是模型版本页面,点击.Configure model inference对话框将出现,允许您配置批量、流或实时推断。
重要的
Anaconda公司更新了他们的服务条款用于anaconda.org频道。根据新的服务条款,如果您依赖Anaconda的包装和分销,您可能需要商业许可证。看到水蟒商业版常见问题解答获取更多信息。您使用任何水蟒频道是受他们的服务条款。
MLflow模型之前记录过v1.18(Databricks Runtime 8.3 ML或更早版本)默认使用conda进行日志记录违约
通道(https://repo.anaconda.com/pkgs/)作为依赖项。由于此许可证变更,Databricks已停止使用违约
通道,用于使用MLflow v1.18及以上版本记录的模型。缺省记录的通道为nowconda-forge
,其中指向社区管理https://conda-forge.org/.
如果您在MLflow v1.18之前记录模型,并且不排除违约
通道从conda环境中获取模型时,该模型可能依赖于违约
你可能不想要的通道。要手动确认模型是否具有此依赖项,您可以进行检查通道
的价值conda.yaml
与日志模型一起打包的文件。例如,一个模型的conda.yaml
与一个违约
通道依赖关系可能是这样的:
渠道:-违约依赖关系:-python = 3.8.8-皮普-皮普:-mlflow-scikit-learn = = 0.23.2-cloudpickle = = 1.6.0的名字:mlflow-env
因为Databricks不能确定在您与Anaconda的关系下,是否允许您使用Anaconda存储库与模型进行交互,因此Databricks不会强迫其客户进行任何更改。如果Anaconda的条款允许您通过使用Databricks使用Anaconda.com回购,则不需要采取任何行动。
如果您想要更改模型环境中使用的通道,您可以使用一个新的模型注册表重新注册模型conda.yaml
.方法中指定通道来实现此功能conda_env
参数的log_model ()
.
有关的更多信息log_model ()
API,请参阅MLflow文档以了解您正在使用的模型风格,例如,Log_model用于scikit-learn.
欲知更多有关conda.yaml
文件,请参阅MLflow文档.
配置批量推理
执行这些步骤创建批量推理笔记本时,笔记本将保存在用户文件夹下的Batch-Inference
文件夹中包含模型名称的文件夹。你可以根据需要编辑笔记本。
单击批推理选项卡。
从模型版本下拉菜单,选择要使用的模型版本。下拉菜单中的前两项是模型的当前Production和Staging版本(如果存在的话)。当选择其中一个选项时,笔记本在运行时自动使用“生产”或“登台”版本。当您继续开发模型时,您不需要更新笔记本。
单击浏览旁边的按钮输入表.的选择输入数据对话框出现了。中更改集群计算下拉。
请注意
对于支持Unity Catalog的工作空间,使用选择输入数据对话框允许你从三个关卡中进行选择,
< catalog_name >, < database_name >。< table_name >
.选择包含模型输入数据的表,然后单击选择.生成的笔记本会自动导入这些数据并将其发送给模型。如果数据在输入到模型之前需要任何转换,您可以编辑生成的notebook。
预测被保存在目录中的一个文件夹中
dbfs: / FileStore / batch-inference
.默认情况下,预测将保存在与模型同名的文件夹中。生成的notebook的每次运行都将一个新文件写入该目录,并将时间戳附加到名称后。您还可以选择不包含时间戳,并使用后续运行的笔记本覆盖该文件;生成的笔记本中提供了说明。的文件夹中输入新的文件夹名称,可以更改保存预测的文件夹输出表位置字段或单击文件夹图标浏览目录并选择不同的文件夹。
要将预测保存到Unity Catalog中的某个位置,您必须编辑笔记本。有关演示如何训练使用Unity Catalog中的数据并将结果写回Unity Catalog的机器学习模型的示例笔记本,请参见使用Unity Catalog数据进行Python ML模型训练.
使用Delta Live表配置流推断
命令下的用户文件夹中保存一个流推理笔记本DLT-Inference
文件夹中包含模型名称的文件夹。你可以根据需要编辑笔记本。
单击流媒体(Delta Live Tables)选项卡。
从模型版本下拉菜单,选择要使用的模型版本。下拉菜单中的前两项是模型的当前Production和Staging版本(如果存在的话)。当选择其中一个选项时,笔记本在运行时自动使用“生产”或“登台”版本。当您继续开发模型时,您不需要更新笔记本。
单击浏览旁边的按钮输入表.的选择输入数据对话框出现了。中更改集群计算下拉。
请注意
对于支持Unity Catalog的工作空间,使用选择输入数据对话框允许你从三个关卡中进行选择,
< catalog_name >, < database_name >。< table_name >
.选择包含模型输入数据的表,然后单击选择.生成的notebook将创建一个数据转换,该转换使用输入表作为源并集成MLflowPySpark推断UDF进行模型预测。如果数据需要在应用模型之前或之后进行任何额外的转换,您可以编辑生成的笔记本。
提供输出Delta Live表名称。笔记本使用给定的名称创建一个活动表,并使用它存储模型预测。您可以根据需要修改生成的记事本以自定义目标数据集—例如:定义一个流直播表作为输出,添加模式信息或数据质量约束。
比较模型版本
您可以在模型注册表中比较模型版本。
在注册模型页面,在模型版本左侧的复选框中选择两个或两个以上的模型版本。
点击比较.
的比较
< N >
将出现版本屏幕,显示一个比较所选模型版本的参数、模式和度量的表。在屏幕底部,您可以选择绘图类型(散点、等高线或平行坐标)以及要绘制的参数或度量。
控制通知首选项
您可以配置Model Registry,以通过电子邮件通知您所指定的已注册模型和模型版本上的活动。
在已注册的模型页面上,通知我菜单显示三个选项:
所有新活动:发送关于此模型的所有模型版本上的所有活动的电子邮件通知。如果您创建了注册模型,则此设置为默认设置。
我所遵循的版本的活动:只发送有关您所关注的型号的电子邮件通知。有了这个选择,你会收到所有模型版本的通知,你遵循;您无法关闭特定型号版本的通知。
沉默的通知:不发送关于此已注册型号上的活动的电子邮件通知。
以下事件触发电子邮件通知:
创建一个新的模型版本
请求阶段转换
阶段过渡
新评论
当您执行以下任何操作时,您将自动订阅模型通知:
评论那个模型版本
过渡一个模型版本的阶段
为模型的阶段提出转换请求
控件上的Follow Status字段,以查看是否遵循模型版本模型版本页面,或在表的模型版本上注册模型页面.
关闭所有邮件通知
您可以在“用户设置”菜单的“模型注册表设置”选项卡中关闭电子邮件通知:
点击设置在Databricks工作区的左下角。
点击用户设置.
去电子邮件首选项选项卡。
关掉注册处电子邮件通知模型.
中,管理员可以关闭整个组织的电子邮件通知管理控制台.
人则
预览
此功能已在公共预览.
人则允许您监听Model Registry事件,以便您的集成可以自动触发操作。您可以使用webhooks自动化并将您的机器学习管道与现有的CI/CD工具和工作流集成在一起。例如,您可以在创建新模型版本时触发CI构建,或者在每次请求模型转换到生产时通过Slack通知您的团队成员。
注释模型或模型版本
您可以通过注释提供关于模型或模型版本的信息。例如,您可能希望包括对问题的概述或关于所使用的方法和算法的信息。
使用UI注释模型或模型版本
Databricks UI提供了几种注释模型和模型版本的方法。您可以使用描述或注释添加文本信息,并且可以添加可搜索的键值标记.描述和标签可用于模型和模型版本;注释只适用于模型版本。
描述旨在提供关于模型的信息。
注释提供了一种在模型版本上维护关于活动的持续讨论的方法。
标记让您可以自定义模型元数据,从而更容易找到特定的模型。
为模型版本添加注释
向下滚动模型版本页,单击旁边的向下箭头活动.
在编辑窗口中输入您的评论并单击添加评论.
使用API注释模型版本
要更新模型版本描述,请使用MLflow客户端APIupdate_model_version ()
方法:
客户端=MlflowClient()客户端.update_model_version(的名字=“<模型名称>”,版本= <模型-版本>,描述=“<描述>”)
要为已注册的模型或模型版本设置或更新标记,请使用MLflow客户端API“set_registered_model_tag()”)或“set_model_version_tag()”方法:
客户端=MlflowClient()客户端.set_registered_model_tag()(的名字=“<模型名称>”,关键=“<键值>”,标签=“<标签值>”)
客户端=MlflowClient()客户端.set_model_version_tag()(的名字=“<模型名称>”,版本= <模型-版本>,关键=“<键值>”,标签=“<标签值>”)
重命名模型(仅限API)
要重命名已注册模型,请使用MLflow客户端APIrename_registered_model ()
方法:
客户端=MlflowClient()客户端.rename_registered_model(“<模型名称>”,“< new-model-name >”)
请注意
只有当注册模型没有版本,或者所有版本都处于None或Archived阶段时,才可以重命名它。
搜索模型
所有已注册的模型都存在MLflow模型注册表中。您可以使用UI或API搜索模型。
请注意
当您搜索一个模型时,只搜索您至少拥有的模型“可读”权限返回。
使用UI搜索模型
单击,显示所有已注册的型号模型在侧栏中。
要搜索特定的模型,请在搜索框中输入文本。您可以输入模型的名称或名称的任何部分:
你也可以在标签上搜索。按如下格式输入标签:标签。<关键> = <值>
.要搜索多个标记,请使用和
操作符。
方法可以在模型名称和标记上进行搜索MLflow搜索语法.例如:
使用API搜索模型
您可以使用MLflow Client API方法在Model Registry中搜索已注册的模型search_registered_models ()
如果你有设置标签在您的模型上,您还可以通过这些标记进行搜索search_registered_models ()
.
打印(f“查找具有特定标记值的已注册模型”)为米在客户端.search_registered_models(f“tags. <键值> = ' <标签值>“”):pprint(dict(米),缩进=4)
您还可以使用MLflow客户端API搜索特定的模型名称并列出其版本详细信息search_model_versions ()
方法:
从pprint进口pprint客户端=MlflowClient()[pprint(mv)为mv在客户端.search_model_versions(“name = <模型名称>”)]
这个输出:
{'creation_timestamp': 1582671933246,“current_stage”:“生产”,“包含100棵决策树的随机森林模型”“受过scikit-learn训练”,“last_updated_timestamp”:1582671960712,“名称”:“sk-learn-random-forest-reg-model”,“run_id”:“ae2cc01346de45f79a44a320aab1797b”,“源”:“。/ mlruns / 0 / ae2cc01346de45f79a44a320aab1797b /工件/ sklearn-model ',“状态”:“准备好了”,“status_message”:没有,“user_id”:没有,'version': 1}{'creation_timestamp': 1582671960628,“current_stage”:“没有”,“描述”:没有,“last_updated_timestamp”:1582671960628,“名称”:“sk-learn-random-forest-reg-model”,“run_id”:“d994f18d09c64c148e62a785052e6723”,“源”:“。/ mlruns / 0 / d994f18d09c64c148e62a785052e6723 /工件/ sklearn-model ',“状态”:“准备好了”,“status_message”:没有,“user_id”:没有,'version': 2}
删除模型或模型版本
您可以使用UI或API删除模型。
使用UI删除模型版本或模型
警告
您无法撤消此操作。您可以将模型版本转换到存档阶段,而不是从注册表中删除它。当您删除一个模型时,由model Registry存储的所有模型工件以及与已注册模型关联的所有元数据都将被删除。
请注意
您只能在None或Archived阶段删除模型和模型版本。如果已注册的模型在Staging或Production阶段有版本,在删除模型之前,您必须将它们转换到None或Archived阶段。
删除模型版本。
点击模型在侧栏中。
单击模型名称。
单击模型版本。
点击在屏幕的右上角,选择删除从下拉菜单中。
删除一个模型:
点击模型在侧栏中。
单击模型名称。
点击在屏幕的右上角,选择删除从下拉菜单中。
使用API删除模型版本或模型
警告
您无法撤消此操作。您可以将模型版本转换到存档阶段,而不是从注册表中删除它。当您删除一个模型时,由model Registry存储的所有模型工件以及与已注册模型关联的所有元数据都将被删除。
请注意
您只能在None或Archived阶段删除模型和模型版本。如果已注册的模型在Staging或Production阶段有版本,在删除模型之前,您必须将它们转换到None或Archived阶段。
在工作空间之间复制MLflow对象
要从Databricks工作区导入或导出MLflow对象,可以使用社区驱动的开源项目bob下载地址MLflow进出口在工作空间之间迁移MLflow实验、模型和运行。
使用这些工具,你可以:
在同一台或另一台跟踪服务器上与其他数据科学家共享和协作。例如,您可以将另一个用户的实验复制到您的工作区中。
将模型从一个工作区复制到另一个工作区,例如从开发工作区复制到生产工作区。
从本地跟踪服务器复制MLflow实验并运行到Databricks工作区。
将关键任务实验和模型备份到另一个Databricks工作空间。
例子
这个例子说明了如何使用模型注册表来构建一个机器学习应用程序:MLflow模型注册表示例.