基于 Azure 机器学习事件触发应用程序、进程或 CI/CD 工作流

本文介绍如何基于 Azure 机器学习事件设置事件驱动的应用程序、进程或 CI/CD 工作流。 例如,当通过Azure 事件网格检测到某些条件时,您可以设置故障通知邮件或 ML 管道运行作业。

Azure 机器学习管理机器学习过程的整个生命周期,包括模型训练、模型部署和监视。 通过使用事件网格,可以使用新式无服务器体系结构对Azure 机器学习事件做出反应,例如训练运行完成和模型注册和部署。 然后,可以在工作区中订阅和使用事件,例如运行状态已更改、运行完成、模型注册和模型部署。

将事件网格用于事件驱动操作:

  • 在运行失败和运行完成时发送电子邮件
  • 注册模型后使用 Azure 函数
  • 将事件从Azure 机器学习流式传输到各种终结点

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 该预览版在提供时没有附带服务级别协议,建议不要将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

先决条件

要使用事件网格,你需要对要为其创建事件的 Azure 机器学习工作区具有“参与者”或“所有者”访问权限。

  • 在您的 Azure 订阅中注册 Microsoft.EventGrid 资源提供程序。 必须先进行此注册,然后才能创建事件订阅。

    az provider register --namespace Microsoft.EventGrid --wait
    
  • 如果计划使用逻辑应用示例,也请注册 Microsoft.Logic 提供程序。

    az provider register --namespace Microsoft.Logic --wait
    
  • 如果计划按照 CLI 示例进行操作,请安装eventgridAzure CLI扩展。

    az extension add --name eventgrid
    
  • 如果打算按照 CLI 示例,将事件中心作为目标,则需要现有的事件中心命名空间和中心。 如果需要创建 事件中心 ,请参阅“创建事件中心”。

事件模型和类型

Azure 事件网格从 Azure 机器学习和其他 Azure 服务等源中读取事件。 它将这些事件发送到事件处理程序,例如Azure 事件中心、Azure Functions、逻辑应用等。 下图显示了事件网格如何连接源和处理程序,但它不是受支持的集成的完整列表。

显示Azure 事件网格如何将源(如Azure 机器学习)连接到事件处理程序(如Azure Functions和逻辑应用)的关系图。

有关事件源和事件处理程序的详细信息,请参阅什么是事件网格?

Azure 机器学习的事件类型

Azure 机器学习在机器学习生命周期的各个点提供事件:

事件类型 DESCRIPTION
Microsoft.MachineLearningServices.RunCompleted 机器学习实验运行完成时触发
Microsoft.MachineLearningServices.ModelRegistered 当成功注册新模型或模型版本时触发
Microsoft.MachineLearningServices.ModelDeployed 成功将一个或多个模型部署到终结点时引发
Microsoft.MachineLearningServices.RunStatusChanged 当运行状态更改时触发

筛选并订阅事件

Azure 事件网格发布这些事件。 在 Azure门户、PowerShell 或 Azure CLI 中,可以通过指定一种或多种事件类型并筛选条件来轻松地订阅事件。

设置事件时,应用筛选条件,使其仅在特定事件数据时触发。 在以下示例中,对于运行状态更改的事件,可以按运行类型进行筛选。 该事件仅在满足条件时才会触发。 有关可以筛选的事件数据的详细信息,请参阅 Azure 机器学习事件网格架构

Azure基于角色的访问控制(Azure RBAC)保护Azure 机器学习事件的订阅。 只有工作区参与者或所有者可以创建、更新和删除事件订阅。 可以在 创建 事件订阅期间或稍后将筛选器应用于事件订阅。

  1. 转到 Azure 门户,选择新订阅或现有订阅。

  2. 从左窗格中选择 “事件 ”条目,然后选择“ + 事件订阅”。

  3. 选择 “筛选器 ”选项卡并向下滚动到 “高级”筛选器。 对于“键”和“值”,提供要作为筛选依据的属性类型 。 在这里,您可以看到当运行类型为管道运行或管道步骤运行时对应的事件触发器。

    筛选事件

  • 按事件类型筛选: 事件订阅可以指定一个或多个 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.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 数据工厂管道
  • 可在 Azure 平台或其他位置托管的通用 Webhook

在 Azure 门户中设置

  1. 打开 Azure 门户,然后转到 Azure 机器学习工作区。

  2. 在左侧栏中选择“事件”,然后选择“事件订阅”。

    显示“事件订阅”选项的屏幕截图。

  3. 选择要使用的事件类型。

    “创建事件订阅”窗体的屏幕截图。

  4. 选择要将事件发布到的终结点。 以下屏幕截图中选择的终结点是“事件中心”:

    屏幕截图显示了“创建事件订阅”窗格,其中的“选择事件中心”处于打开状态。

确认选择时,请选择“ 创建”。 配置后,这些事件将被推送到您的端点。

若要确认订阅已创建,请在工作区中选择 “事件>事件订阅 ”,并验证新订阅是否显示在列表中。

使用 CLI 进行设置

可以安装最新的Azure CLI。 请确保安装 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"

若要确认订阅已成功创建,请运行:

az eventgrid event-subscription show \
  --name {eventGridFilterName} \
  --source-resource-id /subscriptions/{subId}/resourceGroups/{RG}/providers/Microsoft.MachineLearningServices/workspaces/{wsName}

例子

示例:发送电子邮件警报

使用 Azure 逻辑应用为所有事件配置电子邮件。 根据条件进行自定义,并指定收件人,以实现跨协作团队的协作和意识。

  1. 在 Azure 门户中转到 Azure 机器学习工作区,并从左侧栏中选择“事件”选项卡。 在此处选择“逻辑应用”。

    显示“逻辑应用”选项的屏幕截图。

  2. 登录到逻辑应用 UI,并选择机器学习服务作为主题类型。

    屏幕截图显示了“当资源事件发生时”对话框,其中的机器学习被选为资源类型。

  3. 选择您希望接收通知的事件。 例如,以下屏幕截图显示了 RunCompleted

    显示选择机器学习服务作为资源类型的屏幕截图。

  4. 接下来,添加一个步骤来使用此事件并搜索电子邮件。 可以使用多个不同的电子邮件帐户来接收事件。 还可以配置发送电子邮件警报的时间。

    屏幕截图显示了“选择操作”对话框,在搜索行中输入了电子邮件。

  5. 选择“发送电子邮件”并填写参数。 在主题中,包括事件类型和主题,以帮助筛选事件。 还可以在消息正文中添加运行对应的工作区页面链接。

    若要保存此操作,请选择页面左上角的“另存为”。

    屏幕截图显示了“发送电子邮件”对话框,其中的“主题”和“事件类型”已添加到右侧列表的主题行。

  6. 若要验证警报是否正常工作,请触发限定事件(例如,完成训练运行)并确认电子邮件到达指定的收件人。

后续步骤

若要详细了解事件网格并尝试Azure 机器学习事件,请参阅: