重要
此功能在 Beta 版中。
注释
部署作业不需要与 MLflow 3.0 客户端或模型跟踪一起使用,并且可以在 Unity 目录中的较旧现有模型上启用。 但是,建议使用 MLflow 3.0。
本文介绍如何使用 MLflow 部署作业作为机器学习工作流的一部分来管理 ML 模型的完整生命周期。
什么是部署作业?
部署作业允许在创建新模型版本时自动执行评估、审批和部署等任务,与 Unity 目录模型和 Databricks 作业无缝集成。 这些作业简化了模型部署管道的设置,包括人工参与审批,并为受控工作流提供每个版本的进度和历史上下文的清晰的可见性。
使用部署作业时,该过程是完全自动化的;每当创建新模型版本时,它们 都会自动触发 ,直接在模型和模型版本页上显示部署作业运行状态。 活动 日志中可方便地跟踪有关每个部署作业运行的历史信息,确保透明度和易于管理。
与 MLflow 3.0 模型跟踪集成
Databricks 建议使用 MLflow 3.0 跟踪来注册模型并在部署作业中执行评估。 新客户端将自动记录部署作业评估部分中的指标,该部分将显示在 Unity 目录模型版本 UI 中。 这将允许用户使用模型版本页上的集中式指标、参数和跟踪,以便就何时在部署作业生命周期中进一步推进模型做出明智的决策。
与 Unity 目录 CREATE MODEL 版本 ACL 集成
部署作业自然与新发布的 Unity 目录创建模型版本 ACL 集成,以完成 MLOps 故事。 具体而言,可以授予用户 CREATE MODEL VERSION ACL 以将新模型版本注册到模型。 一旦用户认为模型足以用于生产,他们将将此版本注册到 Unity 目录模型,这将启动部署作业以自动评估模型。 此时,审批者可以手动批准要部署或拒绝此版本。
重要
部署任务将利用模型所有者的凭据自动触发。 这意味着授予用户 CREATE MODEL VERSION
对 Unity 目录模型的权限允许用户在作业过程中执行任意代码。 因此,Databricks 建议使用具有最小权限的服务主体设置部署作业,以防止特权升级。
部署作业示例
下面是反映常见用例的部署作业的一些示例。 请注意,这些只是示例,可以根据需要进行自定义。
一个简单的示例部署作业由 3 个步骤组成:评估、审批和部署。 用于在输入的模型版本上生成验证指标的评估调用 mlflow.evaluate
。 审批允许特权用户确定这些指标是否令人满意,如果是,请批准模型。 最后,部署将模型版本部署到 Databricks 模型服务终结点。
下图显示了构成此简单部署作业的 Databricks 作业任务,其中包括评估、审批和部署任务。
还可以创建更复杂的部署作业。 例如,你可能想要使用指标收集步骤作为工作流的一部分执行分阶段推出。 若要创建此部署作业,可以在审批任务后添加其他任务,将模型部署到 1%,将模型部署到 10%,收集和检查指标,决定是否继续或回滚,最后将模型部署到 100% 或回滚模型。 下图显示了此更复杂的部署作业的外观:
创建部署任务
部署作业允许管理模型版本的生命周期。 若要使用部署作业,首先需要在已注册的模型中创建模型版本。 有关训练和注册模型的建议方法,请参阅 MLflow 3.0 示例笔记本 。
Databricks 建议将 运行方式 字段设置为具有最小权限的服务主体。
部署作业必须具有两个作业参数: model_name
和 model_version
。 Databricks 还建议将最大并发运行限制设置为 1(默认值),以防止部署争用条件。
可通过两种方法创建部署作业:以编程方式使用部署笔记本或使用 UI。 在这两种情况下,都需要将每个工作任务作为笔记本文件提供。
使用笔记本以编程方式创建部署作业(建议)
建议使用部署笔记本以编程方式创建部署作业,因为它使用了 Databricks SDK,因此可以通过代码为准轻松设置所有配置。 此方法还允许你轻松地跨多个工作区部署多个作业和其他资源。
在以下说明中,将使用一个简单的示例模板来设置部署任务,包含基本的评估、审批和部署步骤。
创建并注册 Unity 目录模型。 例如,请参阅 MLflow 3.0 传统 ML 工作流(Beta) 示例。
创建定义评估任务的笔记本。 例如,导入 评估笔记本 以评估从 传统 ML 示例创建的模型。 根据需要更新所需项。 对于其他模型,请使用此笔记本作为模板,并对其进行自定义,以便根据自己的独特情况评估模型。
创建定义审批任务的笔记本。 例如,将 审批笔记本 导入工作区。 有关此笔记本工作原理的更多详细信息,请参阅 “审批 ”部分。 还可以将此笔记本用作模板,并对其进行更新以满足你的需求。
创建定义部署任务的笔记本。 例如,将下面的 部署笔记本 导入工作区。 还可以将此笔记本用作模板,并对其进行更新以满足你的需求。
创建创建并协调部署作业的笔记本。 例如,将 部署作业笔记本 导入工作区。 此笔记本创建了成为部署作业的 Databricks 作业。 请确保更新笔记本中的必需项,以正确定义您的作业,并使用您的 Unity Catalog 模型和适当的任务。 还可以将此笔记本用作模板,并对其进行更新以满足你的需求。 例如,如果你有更复杂的推出计划,可能需要包含更多任务。
运行部署作业笔记本以创建部署作业。
使用作业 UI 创建部署作业
还可以使用 UI 创建作业,而不是在上面的模板中使用 SDK。 不过,对于每个笔记本任务,仍必须手动创建笔记本,并将其保存在工作区中的某个位置。 对于指令模型,假定使用包含评估、审批和部署任务的简单部署工作流。 如果您的部署工作流较为复杂,可以通过添加更多任务来自定义这些指令。
创建并注册 Unity 目录模型。 例如,请参阅 MLflow 3.0 传统 ML 工作流(Beta) 示例。
创建定义评估任务的笔记本。 例如,导入 评估笔记本 以评估从 传统 ML 示例创建的模型。 根据需要更新所需项。 对于其他模型,请使用此笔记本作为模板,并对其进行自定义,以便根据自己的独特情况评估模型。
创建定义审批任务的笔记本。 例如,将 审批笔记本 导入工作区。 有关此笔记本工作原理的更多详细信息,请参阅 “审批 ”部分。 还可以将此笔记本用作模板,并对其进行更新以满足你的需求。
创建定义部署任务的笔记本。 例如,将下面的 部署笔记本 导入工作区。 还可以将此笔记本用作模板,并对其进行更新以满足你的需求。
在 Databricks 的作业用户界面中创建“部署作业”:
在左侧导航窗格中,单击“ + 新建 > 作业 ”以创建新作业。
配置每个任务。 例如,对于部署任务:
- 任务名称:部署
- 类型:笔记本
- 源:工作区
- 路径:
/Workspace/Users/<user.name@email.com>/deployment
- 群集:选择新作业群集或添加一个现有的 SQL 仓库。
有关配置的详细信息,请参阅 作业的笔记本任务。
创建完每个任务后,添加作业参数。 在右侧面板中,单击“ 编辑参数”。 添加
model_name
和model_version
。
下面是使用 UI 创建上述模板作业的示例:
将部署作业连接到模型
创建 Unity 目录模型和部署作业后,需要将作业作为部署作业连接到模型。 可以使用 UI 或在部署笔记本中以编程方式执行此作。
当部署作业被连接到模型之后,它将在模型页面上显示为链接。
使用 UI 将部署作业连接到模型
在模型的页面上,在“ 概述 ”选项卡的 “部署作业”下,单击“ 连接部署作业”。
从下拉列表中选择部署任务。 还可以使用搜索栏按作业的名称或 ID 搜索作业。 单击“保存更改”。
使用 MLflow 客户端将部署作业连接到模型
以编程方式连接部署作业的主要方法是使用 MLflow 客户端。 通过调用 client.create_registered_model(model_name, deployment_job_id=<your-created-job-id>)
创建已注册的模型,或者通过调用 client.update_registered_model(model_name, deployment_job_id=<your-created-job-id>)
更新已注册的模型时,可以执行此作。
以编程方式断开部署作业连接的主要方式也是使用 MLflow 客户端。 为此,可以指定空字符串 ""
并调用更新(例如, client.update_registered_model(model_name, deployment_job_id="")
)。
在 部署笔记本中使用类似于以下内容的代码:
import mlflow
from mlflow.tracking.client import MlflowClient
client = MlflowClient(registry_uri="databricks-uc")
# model_name specifies the location of a model in Unity Catalog
# model_name should be in the format <catalog>.<schema>.<model>
try:
if client.get_registered_model(model_name):
client.update_registered_model(model_name, deployment_job_id=created_job.job_id)
except mlflow.exceptions.RestException:
client.create_registered_model(model_name, deployment_job_id=created_job.job_id)
所需的权限
连接和触发部署作业需要以下权限:
- 在模型中设为管理员或所有者,以连接部署作业
- 模型所有者需要对部署作业具有 CAN MANAGE RUN 或更高权限才能连接它。
- 注意:此部署作业字段也可以由具有 MANAGE 或更高权限的人员在模型上更新。 在这种情况下, 更新者和模型 所有者都需要对部署作业具有 CAN MANAGE RUN 或更高权限才能连接它。
触发部署作业
部署作业将在创建的任何新模型版本上自动触发,也可以通过单击“ 开始部署作业”,在模型版本页上的现有版本和以前部署的版本上手动触发该作业。
也可以直接从作业 UI 或 API 触发作业。 需要在作业参数中指定适当的模型名称和版本。
所需的权限
触发部署作业需要以下权限:
- 若要使用模型版本 UI 手动触发或修复部署作业,用户必须在部署作业上具有 CAN MANAGE RUN 或更高版本 ACL(使用作业 UI 触发作业所需的相同 ACL)。
- 由于该作业在创建新版本并使用模型所有者的凭据时自动触发,因此模型所有者需要在部署作业上具有 CAN MANAGE RUN 或更高版本的 ACL。
批准部署任务(试验性的)
Databricks 为部署作业提供实验性质的审批机制,为机器学习管道启用人工参与过程。 触发部署作业后,评估运行中的指标将显示在模型版本页上。 查看这些指标后,审批者可以通过单击“ 批准”来批准 UI 中的模型版本。 此功能使用 Unity 目录标记来确定审批任务是应通过还是失败。 审批任务通过以“审批”开头的作业任务名称(不区分大小写)来识别,并将在 Unity 目录标签设置为 Approved
时生效(无论是通过单击 UI 中的 审批 按钮还是手动设置)。
下面是审批流程的工作原理:
- 初始运行:部署作业的第一次运行 将始终 在审批任务上失败,因为模型版本尚未获得批准,因此没有所需的 Unity 目录标记。
- 审批评估:审批者会评审模型版本及其评估指标,这些指标显示在模型版本页上。 这样,审批者就可以评估模型版本的质量和准备情况。
- 审批作:如果审批者认为模型版本令人满意,则单击模型版本页上部署作业边栏部分中的“ 批准 ”按钮。
此操作会自动修复作业运行,并将 Unity Catalog 标记添加到模型版本。
- 标记键与审批任务的名称匹配。 例如,在 示例审批笔记本中,这是
Approval_Check
。 - 标记值设置为
Approved
.
- 作业延续:修复的部署作业任务会自动从审批任务中恢复。 这一次通过是因为现在有了所需的 Unity Catalog 标签。 然后,它会继续执行后续任务,例如部署。
所需的权限
添加 Unity 目录标记和触发部署作业需要以下权限:
- 在 Unity Catalog 模型上应用标签。
- 可以管理部署作业中的运行。
查看部署作业状态和活动日志
在模型版本上触发部署作业后,可以在“ 概述 ”选项卡中的模型页上查看这些部署的当前状态。在状态下方,可以在活动日志中看到历史活动。 活动日志也会显示在模型版本页上。
所需的权限
查看部署作业和活动日志需要以下权限(与查看模型相同):
- 在 Unity 目录模型中执行。
部署作业模板笔记本示例
以下示例笔记本可用作模板,以创建一个由评估、审批和部署任务组成的简单部署作业。 请务必提供 REQUIRED
笔记本中的值,以配置您的模型的部署作业。
评估笔记本
示例评估笔记本
审批记录本
示例审批文档
工作笔记本
示例部署笔记本
创建部署作业笔记本
用于创建部署作业的示例笔记本
后续步骤
若要详细了解 MLflow 3.0 的新功能并开始使用,请参阅以下文章: