基于 Azure 机器学习事件触发应用程序、进程或 CI/CD 工作流
本文介绍如何基于 Azure 机器学习事件设置事件驱动的应用程序、进程或 CI/CD 工作流。 例如,当使用 Azure 事件网格检测到某些条件时,故障通知电子邮件或 ML 管道会运行。
Azure 机器学习管理机器学习进程的整个生命周期,包括模型训练、模型部署和监视。 可以借助现代无服务器体系结构,使用事件网格对 Azure 机器学习事件做出反应,例如完成训练运行、注册和部署模型以及检测数据偏移。 然后,可以订阅和使用事件,例如运行状态更改、运行完成、模型注册、模型部署以及工作区中的数据偏移检测。
何时将事件网格用于事件驱动的操作:
- 在运行失败和运行完成时发送电子邮件
- 注册模型后使用 Azure 函数
- 将事件从 Azure 机器学习流式传输到各种终结点
- 检测到偏移时触发 ML 管道
重要
本文中标记了“(预览版)”的项目目前为公共预览版。 该预览版在提供时没有附带服务级别协议,建议不要将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款。
先决条件
要使用事件网格,需要以参与者或所有者身份访问将为其创建事件的 Azure 机器学习工作区。
事件模型与类型
Azure 事件网格从 Azure 机器学习和其他 Azure 服务等源中读取事件。 然后,会将这些事件发送到事件处理程序,例如,Azure 事件中心、Azure Functions、逻辑应用,等等。 下图显示了事件网格如何连接源和处理程序,但未完整列出受支持的集成。
有关事件源和事件处理程序的详细信息,请参阅什么是事件网格?
Azure 机器学习的事件类型
Azure 机器学习在机器学习生命周期的各个点提供事件:
事件类型 | 说明 |
---|---|
Microsoft.MachineLearningServices.RunCompleted |
在机器学习试验运行完成时引发 |
Microsoft.MachineLearningServices.ModelRegistered (预览版) |
在工作区中注册机器学习模型时引发 |
Microsoft.MachineLearningServices.ModelDeployed (预览版) |
当具有一个或多个模型的推理服务完成部署时引发 |
Microsoft.MachineLearningServices.DatasetDriftDetected (预览版) |
在两个数据集的数据偏移检测作业完成时引发 |
Microsoft.MachineLearningServices.RunStatusChanged |
在运行状态更改时引发 |
筛选并订阅事件
这些事件通过 Azure 事件网格发布。 在 Azure门户、PowerShell 或 Azure CLI 中,可以通过指定一种或多种事件类型并筛选条件来轻松地订阅事件。
设置事件时,可以应用筛选器,以仅在特定事件数据上触发。 在以下示例中,对于运行状态更改的事件,可以按运行类型进行筛选。 仅在满足条件时触发事件。 有关可以筛选的事件数据的详细信息,请参阅 Azure 机器学习事件网格架构。
Azure 机器学习事件的订阅由 Azure 基于角色的访问控制 (Azure RBAC) 进行保护。 只有工作区参与者或所有者可以创建、更新和删除事件订阅。 可在创建事件订阅期间或以后将筛选器应用于事件订阅。
转到 Azure 门户,选择新订阅或现有订阅。
从左侧导航区域选择“事件”条目,然后选择“+ 事件”订阅。
选择“筛选器”选项卡,然后向下滚动到“高级筛选器”。 对于“键”和“值”,提供要作为筛选依据的属性类型 。 可以在下面看到事件在运行类型为管道运行或管道步骤运行时触发。
按事件类型筛选: 事件订阅可以指定一个或多个 Azure 机器学习事件类型。
按事件主题筛选: Azure 事件网格支持根据“开头为”和“结尾为”的匹配筛选主题,以便将具有匹配主题的事件传递给订阅者 。 不同的机器学习事件具有不同的主题格式。
事件类型 使用者格式 示例主题 Microsoft.MachineLearningServices.RunCompleted
experiments/{ExperimentId}/runs/{RunId}
experiments/b1d7966c-f73a-4c68-b846-992ace89551f/runs/my_exp1_1554835758_38dbaa94
Microsoft.MachineLearningServices.ModelRegistered
(预览版)models/{modelName}:{modelVersion}
models/sklearn_regression_model:3
Microsoft.MachineLearningServices.ModelDeployed
(预览版)endpoints/{serviceId}
endpoints/my_sklearn_aks
Microsoft.MachineLearningServices.DatasetDriftDetected
(预览版)datadrift/{data.DataDriftId}/run/{data.RunId}
datadrift/4e694bf5-712e-4e40-b06a-d2a2755212d4/run/my_driftrun1_1550564444_fbbcdc0f
Microsoft.MachineLearningServices.RunStatusChanged
experiments/{ExperimentId}/runs/{RunId}
experiments/b1d7966c-f73a-4c68-b846-992ace89551f/runs/my_exp1_1554835758_38dbaa94
高级筛选:Azure 事件网格还支持基于已发布事件架构的高级筛选。 有关 Azure 机器学习事件架构的详细信息,请参阅 Azure 机器学习的 Azure 事件网格事件架构。 对于
Microsoft.MachineLearningServices.ModelRegistered
事件,要筛选模型的标记值:--advanced-filter data.ModelTags.key1 StringIn ('value1')
要了解有关如何应用筛选器的详细信息,请参阅事件网格的筛选事件。
使用机器学习事件
处理机器学习事件的应用程序应遵循以下建议的做法:
- 由于可将多个订阅配置为将事件路由至相同的事件处理程序,因此请勿假定事件来自特定的源,而是应检查消息的主题,确保它来自所期望的机器学习工作区。
- 同样,检查 eventType 是否为准备处理的项,并且不假定所接收的全部事件都是期望的类型。
- 消息在一段延迟时间后会无序到达,请使用 etag 字段来了解对象的相关信息是否是最新的。 此外,还可使用 sequencer 字段来了解任何特定对象的事件顺序。
- 忽略不了解的字段。 此做法有助于适应将来可能添加的新功能。
- 失败或取消的 Azure 机器学习操作不会触发事件。 例如,如果模型部署失败,则不会触发 Microsoft.MachineLearningServices.ModelDeployed。 设计应用程序时,请考虑此类失败模式。 始终可以使用 Azure 机器学习 SDK、CLI 或门户来检查操作状态并了解详细的失败原因。
使用 Azure 事件网格,客户可以构建解耦的消息处理程序,该消息处理程序可以由 Azure 机器学习事件触发。 消息处理程序的一些值得注意的示例如下:
- Azure Functions
- Azure 逻辑应用
- Azure 事件中心
- Azure 数据工厂管道
- 通用 Webhook,可能在 Azure 平台或其他平台上托管
在 Azure 门户中设置
打开 Azure 门户,然后转到 Azure 机器学习工作区。
在左侧栏中选择“事件”,然后选择“事件订阅”。
选择要使用的事件类型。
选择要将事件发布到的终结点。 以下屏幕截图中选择的终结点是“事件中心”:
确认所选内容后,选择“创建”。 配置后,这些事件将被推送到终结点。
使用 CLI 进行设置
可以安装最新版的 Azure CLI。
若要安装事件网格扩展,请在 CLI 中使用以下命令:
az extension add --name eventgrid
下面的示例演示如何选择 Azure 订阅以及为 Azure 机器学习创建新的事件订阅:
# Select the Azure subscription that contains the workspace
az account set --subscription "<name or ID of the subscription>"
# Subscribe to the machine learning workspace. This example uses EventHub as a destination.
az eventgrid event-subscription create --name {eventGridFilterName} \
--source-resource-id /subscriptions/{subId}/resourceGroups/{RG}/providers/Microsoft.MachineLearningServices/workspaces/{wsName} \
--endpoint-type eventhub \
--endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/n1/eventhubs/EH1 \
--included-event-types Microsoft.MachineLearningServices.ModelRegistered \
--subject-begins-with "models/mymodelname"
示例
示例:发送电子邮件警报
使用 Azure 逻辑应用为所有事件配置电子邮件。 根据条件进行自定义,并指定收件人,以实现跨协作团队的协作和意识。
在 Azure 门户中转到 Azure 机器学习工作区,并从左侧栏中选择“事件”选项卡。 在此处选择“逻辑应用”。
登录到逻辑应用 UI,并选择机器学习服务作为主题类型。
选择要通知的事件。 例如,以下屏幕截图中选择的是“RunCompleted”。
接下来添加一个使用此事件的步骤并搜索电子邮件。 可以使用多个不同的电子邮件帐户来接收事件。 还可以配置发送电子邮件警报的时间。
选择“发送电子邮件”并填写参数。 可以在主题中包含“事件类型”和“主题”来帮助筛选事件 。 还可以在邮件正文中包含指向工作区页面的链接。
若要保存此操作,请选择页面左上角的“另存为”。
示例:重新训练数据偏移触发器
重要
此示例依赖于一项功能(数据偏移),此功能仅在使用适用于 Azure 机器学习的 Azure 机器学习 SDK v1 或 Azure CLI 扩展 v1 时可用。 有关详细信息,请参阅什么是 Azure 机器学习 CLI & SDK v2。
随着时间的推移,模型会过时,并且在其运行上下文中也不再有用。 要判断是否应重新训练某个模型,一种方法是检测数据偏移。
本示例说明如何结合使用事件网格和 Azure 逻辑应用来触发重新训练。 当模型的训练和服务数据集之间发生数据偏移时,此示例将触发 Azure 数据工厂管道。
在开始之前,请执行以下操作:
- 设置数据集监视器,在工作区中检测数据偏移 (SDK/CLI v1)
- 创建已发布的 Azure 数据工厂管道。
此示例中使用的是简单的数据工厂管道,用于将文件复制到 blob 存储区,并运行已发布的机器学习管道。 有关此方案的详细信息,请参阅如何在 Azure 数据工厂中设置机器学习步骤。
首先,创建逻辑应用。 转到 Azure 门户,搜索逻辑应用并选择“创建”。
填写所需信息。 若要简化此过程,请使用与 Azure 数据工厂管道和 Azure 机器学习工作区相同的订阅和资源组。
创建逻辑应用后,选择“事件网格资源事件发生时”。
登录并填写事件的详细信息。 将“资源名称”设为工作区名称。 将“事件类型”设为 DatasetDriftDetected 。
添加新步骤并搜索“Azure 数据工厂”。 选择“创建管道运行”。
登录并指定要运行的已发布的 Azure 数据工厂管道。
使用页面左上角的“保存”按钮保存并创建逻辑应用。 要查看应用,请转到 Azure 门户中的工作区,然后选择“事件”。
现在,只要发生偏移,就会触发数据工厂管道。 在 Azure 机器学习工作室中查看有关数据偏移运行和机器学习管道的详细信息。
后续步骤
详细了解事件网格并尝试使用 Azure 机器学习事件: