管理模型生命周期

本文描述如何使用MLflow Model Registry作为机器学习工作流的一部分来管理ML模型的完整生命周期。Databricks提供了MLflow模型注册表的托管版本。模型注册表提供:

  • 时序模型沿袭(MLflow实验和运行在给定时间产生模型)。

  • 模型服务于无服务器实时推理经典MLflow模型服务

  • 模型版本。

  • 阶段转换(例如,从登台到生产或存档)。

  • 人则因此,您可以根据注册表事件自动触发操作。

  • 模型事件的电子邮件通知。

您还可以创建和查看模型描述并留下评论。

本文包括模型注册中心UI和模型注册中心API的说明。

有关模型注册中心概念的概述,请参见MLflow指南

创建或注册一个模型

您可以使用UI创建或注册模型使用API注册一个模型

使用UI创建或注册一个模型

在model Registry中注册模型有两种方法。您可以注册一个已记录到MLflow的现有模型,也可以创建并注册一个新的空模型,然后将先前记录的模型分配给它。

从笔记本中注册一个现有的日志模型

  1. 在工作区中,识别包含您想要注册的模型的MLflow运行。

    1. 单击实验图标实验的图标在笔记本的右边栏。

      笔记本电脑工具栏
    2. 在“实验运行”侧栏中,单击外部链接运行日期旁边的图标。将显示MLflow Run页面。此页面显示了运行的详细信息,包括参数、度量、标记和工件列表。

  2. 在Artifacts部分中,单击指定的目录xxx-model

    注册模式
  3. 单击注册模式按钮在最右边。

  4. 在对话框中,单击模型装箱并做以下其中一项:

    • 选择创建新模型从下拉菜单中。的模型名称字段出现。例如,输入一个模型名称scikit-learn-power-forecasting

    • 从下拉菜单中选择已存在的型号。

    创建新模型
  5. 点击注册

    • 如果你选择了创建新模型,这将注册一个名为scikit-learn-power-forecasting,将模型复制到由MLflow model Registry管理的安全位置,并创建模型的新版本。

    • 如果您选择了一个现有的模型,这将注册所选模型的一个新版本。

    过了一会儿,注册模式按钮更改为到新注册模型版本的链接。

    选择新创建的模型
  6. 单击链接在model Registry UI中打开新模型版本。您还可以通过单击在model Registry中找到模型模型图标模型在侧栏中。

创建一个新的注册模型,并将一个日志模型分配给它

您可以使用注册模型页面上的Create Model按钮来创建一个新的空模型,然后将一个已记录的模型分配给它。遵循以下步骤:

  1. 在已注册型号页面,单击创建模型.输入模型的名称并单击创建

  2. 按照步骤1到步骤3进行从笔记本中注册一个现有的日志模型

  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,并返回一个ModelVersionMLflow对象。如果已经存在该名称的注册模型,该方法将创建一个新的模型版本并返回版本对象。

    mlflowstart_runrun_name= <运行-的名字>作为运行...mlflow.<模型-味道>。log_model<模型-味道> = <模型>artifact_path“< model-path >”registered_model_name“<模型名称>”
  • 在所有实验运行完成并决定最适合添加到注册中心的模型后,要使用指定的名称注册模型,请使用mlflow.register_model ()方法。方法的运行IDmlruns: URI论点。如果具有该名称的已注册模型不存在,该方法将注册一个新模型,创建Version 1,并返回一个ModelVersionMLflow对象。如果已经存在该名称的注册模型,该方法将创建一个新的模型版本并返回版本对象。

    结果mlflowregister_model”:< model-path >”“<模型名称>”
  • 要创建具有指定名称的新注册模型,请使用MLflow客户端APIcreate_registered_model ()方法。如果模型名称存在,此方法将抛出MLflowException

    客户端MlflowClient()结果客户端create_registered_model“<模型名称>”

方法注册模型Databricks Terraform提供商而且databricks_mlflow_model

控制对模型的访问

要了解如何控制对模型注册表中注册的模型的访问,请参见模型权限

转换模型阶段

模型版本有以下阶段之一:没有一个暂存生产,或存档.的暂存阶段用于模型测试和验证,而生产Stage用于已经完成测试或审查流程并已部署到应用程序进行实时评分的模型版本。假定存档模型版本是不活动的,此时您可以考虑删除它.模型的不同版本可能处于不同的阶段。

适当的用户许可可以在阶段之间转换模型版本。如果您拥有将模型版本转换到特定阶段的权限,则可以直接进行转换。如果您没有权限,您可以请求阶段转换,而具有转换模型版本权限的用户可以批准、拒绝或取消请求

您可以使用UI或转换模型阶段使用API

使用UI转换模型阶段

遵循以下说明来转换模型的阶段。

  1. 要显示可用模型阶段和可用选项的列表,在模型版本页面中,单击旁边的下拉列表阶段:并请求或选择过渡到另一个阶段。

    阶段转换选项
  2. 输入可选的注释并单击好吧

将模型版本转换到生产阶段

在测试和验证之后,您可以转换或请求转换到生产阶段。

Model Registry在每个阶段中允许注册模型的多个版本。如果您希望在生产中只有一个版本,您可以通过检查将当前在生产中的模型的所有版本转换为存档将现有的生产模型版本转换为存档版本

批准、拒绝或取消模型版本阶段转换请求

没有过渡阶段权限的用户可以申请过渡阶段。请求出现在挂起的请求模型版本页中的部分:

向生产过渡

要批准、拒绝或取消阶段转换请求,请单击批准拒绝,或取消链接。

转换请求的创建者还可以取消该请求。

查看模型版本活动

要查看请求的、批准的、待处理的以及应用到模型版本的所有转换,请转到Activities部分。活动的记录为审计或检查提供了模型生命周期的谱系。

使用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文件夹中包含模型名称的文件夹。你可以根据需要编辑笔记本。

  1. 单击批推理选项卡。

  2. 模型版本下拉菜单,选择要使用的模型版本。下拉菜单中的前两项是模型的当前Production和Staging版本(如果存在的话)。当选择其中一个选项时,笔记本在运行时自动使用“生产”或“登台”版本。当您继续开发模型时,您不需要更新笔记本。

  3. 单击浏览旁边的按钮输入表.的选择输入数据对话框出现了。中更改集群计算下拉。

    请注意

    对于支持Unity Catalog的工作空间,使用选择输入数据对话框允许你从三个关卡中进行选择,< catalog_name >, < database_name >。< table_name >

  4. 选择包含模型输入数据的表,然后单击选择.生成的笔记本会自动导入这些数据并将其发送给模型。如果数据在输入到模型之前需要任何转换,您可以编辑生成的notebook。

  5. 预测被保存在目录中的一个文件夹中dbfs: / FileStore / batch-inference.默认情况下,预测将保存在与模型同名的文件夹中。生成的notebook的每次运行都将一个新文件写入该目录,并将时间戳附加到名称后。您还可以选择不包含时间戳,并使用后续运行的笔记本覆盖该文件;生成的笔记本中提供了说明。

    的文件夹中输入新的文件夹名称,可以更改保存预测的文件夹输出表位置字段或单击文件夹图标浏览目录并选择不同的文件夹。

    要将预测保存到Unity Catalog中的某个位置,您必须编辑笔记本。有关演示如何训练使用Unity Catalog中的数据并将结果写回Unity Catalog的机器学习模型的示例笔记本,请参见使用Unity Catalog数据进行Python ML模型训练

使用Delta Live表配置流推断

命令下的用户文件夹中保存一个流推理笔记本DLT-Inference文件夹中包含模型名称的文件夹。你可以根据需要编辑笔记本。

  1. 单击流媒体(Delta Live Tables)选项卡。

  2. 模型版本下拉菜单,选择要使用的模型版本。下拉菜单中的前两项是模型的当前Production和Staging版本(如果存在的话)。当选择其中一个选项时,笔记本在运行时自动使用“生产”或“登台”版本。当您继续开发模型时,您不需要更新笔记本。

  3. 单击浏览旁边的按钮输入表.的选择输入数据对话框出现了。中更改集群计算下拉。

    请注意

    对于支持Unity Catalog的工作空间,使用选择输入数据对话框允许你从三个关卡中进行选择,< catalog_name >, < database_name >。< table_name >

  4. 选择包含模型输入数据的表,然后单击选择.生成的notebook将创建一个数据转换,该转换使用输入表作为源并集成MLflowPySpark推断UDF进行模型预测。如果数据需要在应用模型之前或之后进行任何额外的转换,您可以编辑生成的笔记本。

  5. 提供输出Delta Live表名称。笔记本使用给定的名称创建一个活动表,并使用它存储模型预测。您可以根据需要修改生成的记事本以自定义目标数据集—例如:定义一个流直播表作为输出,添加模式信息或数据质量约束。

  6. 你可以选择创建一个新的Delta Live Tables管道与这个笔记本或添加它添加到现有管道中作为附加的笔记本库。

配置实时推断

  1. 在配置模型推断对话框中,单击实时选项卡。

  2. 如果模型未启用服务,则单击支持服务.的服务选项卡注册模型页面出现,状态显示为Pending。几分钟后,状态更改为“就绪”。

    如果已启用服务,请单击查看现有实时推理显示服务选项卡

提供反馈

这个功能是预览版,我们希望得到您的反馈。如需反馈信息,请单击提供反馈在配置模型推断对话框中。

比较模型版本

您可以在模型注册表中比较模型版本。

  1. 注册模型页面,在模型版本左侧的复选框中选择两个或两个以上的模型版本。

  2. 点击比较

  3. 的比较< N >将出现版本屏幕,显示一个比较所选模型版本的参数、模式和度量的表。在屏幕底部,您可以选择绘图类型(散点、等高线或平行坐标)以及要绘制的参数或度量。

控制通知首选项

您可以配置Model Registry,以通过电子邮件通知您所指定的已注册模型和模型版本上的活动。

在已注册的模型页面上,通知我菜单显示三个选项:

邮件通知菜单
  • 所有新活动:发送关于此模型的所有模型版本上的所有活动的电子邮件通知。如果您创建了注册模型,则此设置为默认设置。

  • 我所遵循的版本的活动:只发送有关您所关注的型号的电子邮件通知。有了这个选择,你会收到所有模型版本的通知,你遵循;您无法关闭特定型号版本的通知。

  • 沉默的通知:不发送关于此已注册型号上的活动的电子邮件通知。

以下事件触发电子邮件通知:

  • 创建一个新的模型版本

  • 请求阶段转换

  • 阶段过渡

  • 新评论

当您执行以下任何操作时,您将自动订阅模型通知:

  • 评论那个模型版本

  • 过渡一个模型版本的阶段

  • 为模型的阶段提出转换请求

控件上的Follow Status字段,以查看是否遵循模型版本模型版本页面,或在表的模型版本上注册模型页面

关闭所有邮件通知

您可以在“用户设置”菜单的“模型注册表设置”选项卡中关闭电子邮件通知:

  1. 点击用户设置图标设置在Databricks工作区的左下角。

  2. 点击用户设置

  3. 电子邮件首选项选项卡。

  4. 关掉注册处电子邮件通知模型

中,管理员可以关闭整个组织的电子邮件通知管理控制台

发送邮件的最大数量

Model Registry限制每天每个活动发送给每个用户的电子邮件数量。例如,如果您在一天内收到20封关于为已注册模型创建的新模型版本的电子邮件,model Registry将发送一封电子邮件,指出已达到每日限制,并且直到第二天才会发送关于该事件的其他电子邮件。

若要增加所允许的电子邮件数量的限制,请与Databricks代表联系。

人则

预览

此功能已在公共预览

人则允许您监听Model Registry事件,以便您的集成可以自动触发操作。您可以使用webhooks自动化并将您的机器学习管道与现有的CI/CD工具和工作流集成在一起。例如,您可以在创建新模型版本时触发CI构建,或者在每次请求模型转换到生产时通过Slack通知您的团队成员。

注释模型或模型版本

您可以通过注释提供关于模型或模型版本的信息。例如,您可能希望包括对问题的概述或关于所使用的方法和算法的信息。

使用UI注释模型或模型版本

Databricks UI提供了几种注释模型和模型版本的方法。您可以使用描述或注释添加文本信息,并且可以添加可搜索的键值标记.描述和标签可用于模型和模型版本;注释只适用于模型版本。

  • 描述旨在提供关于模型的信息。

  • 注释提供了一种在模型版本上维护关于活动的持续讨论的方法。

  • 标记让您可以自定义模型元数据,从而更容易找到特定的模型。

为模型或模型版本添加或更新描述

  1. 注册模式模型版本页面,点击编辑旁边描述.出现一个编辑窗口。

  2. 在编辑窗口中输入或编辑描述。

  3. 点击保存以保存更改或取消关闭窗口。

    如果您输入了模型版本的描述,则该描述将显示在描述列中的注册模型页面.该列最多显示32个字符或一行文本,以较短者为准。

为模型版本添加注释

  1. 向下滚动模型版本页,单击旁边的向下箭头活动

  2. 在编辑窗口中输入您的评论并单击添加评论

为模型或模型版本添加标记

  1. 注册模式模型版本页面,点击标签图标如果它还没有打开。出现标签表。

    标签表
  2. 请按的名字而且价值字段并键入标记的键和值。

  3. 点击添加

    添加标签

编辑或删除模型或模型版本的标记

控件中的图标可编辑或删除现有标记行动列。

标签的行为

使用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_modelsf“tags. <键值> = ' <标签值>“”):pprintdict),缩进4

您还可以使用MLflow客户端API搜索特定的模型名称并列出其版本详细信息search_model_versions ()方法:

pprint进口pprint客户端MlflowClient()pprintmvmv客户端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阶段。

删除模型版本。

  1. 点击模型图标模型在侧栏中。

  2. 单击模型名称。

  3. 单击模型版本。

  4. 点击删除模型版本在屏幕的右上角,选择删除从下拉菜单中。

删除一个模型:

  1. 点击模型图标模型在侧栏中。

  2. 单击模型名称。

  3. 点击删除模型在屏幕的右上角,选择删除从下拉菜单中。

使用API删除模型版本或模型

警告

您无法撤消此操作。您可以将模型版本转换到存档阶段,而不是从注册表中删除它。当您删除一个模型时,由model Registry存储的所有模型工件以及与已注册模型关联的所有元数据都将被删除。

请注意

您只能在None或Archived阶段删除模型和模型版本。如果已注册的模型在Staging或Production阶段有版本,在删除模型之前,您必须将它们转换到None或Archived阶段。

删除模型版本

要删除模型版本,请使用MLflow客户端APIdelete_model_version ()方法:

#删除模型的版本1、2和3客户端MlflowClient()版本123.版本版本客户端delete_model_version的名字“<模型名称>”版本版本

删除模型

要删除模型,请使用MLflow客户端APIdelete_registered_model ()方法:

客户端MlflowClient()客户端delete_registered_model的名字“<模型名称>”

跨工作空间共享模型

砖支持跨多个工作区共享模型.例如,您可以在自己的工作空间中开发并记录一个模型,然后使用远程模型注册从另一个工作空间访问它。当多个团队共享对模型的访问时,这很有用。您可以创建多个工作区,并跨这些环境使用和管理模型。

在工作空间之间复制MLflow对象

要从Databricks工作区导入或导出MLflow对象,可以使用社区驱动的开源项目bob下载地址MLflow进出口在工作空间之间迁移MLflow实验、模型和运行。

使用这些工具,你可以:

  • 在同一台或另一台跟踪服务器上与其他数据科学家共享和协作。例如,您可以将另一个用户的实验复制到您的工作区中。

  • 将模型从一个工作区复制到另一个工作区,例如从开发工作区复制到生产工作区。

  • 从本地跟踪服务器复制MLflow实验并运行到Databricks工作区。

  • 将关键任务实验和模型备份到另一个Databricks工作空间。

例子

这个例子说明了如何使用模型注册表来构建一个机器学习应用程序:MLflow模型注册表示例