Azure 机器学习中的自动缩放在线端点

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

本文介绍如何根据指标和计划配置自动缩放来管理部署中的资源使用情况。 自动缩放过程可以自动运行正确的资源量来处理应用程序上的负载。

Azure 机器学习中的联机终结点通过与 Azure Monitor 中的自动缩放功能集成来支持自动缩放。 有关 Azure Monitor 中的自动缩放设置的详细信息,请参阅 Microsoft.Insights 自动缩放设置

Azure Monitor 自动缩放允许设置规则,以在满足规则条件时触发一个或多个自动缩放操作。 可以根据指标(如 CPU 使用率、计划(如高峰时段)或两者的组合进行缩放。 有关详细信息,请参阅 Azure 中的自动缩放概述

显示自动缩放如何根据需要添加和删除实例的示意图。

可以通过 Azure 机器学习工作室使用 REST API、Azure 资源管理器、Azure CLI v2、Python SDK v2 或 Azure 门户来管理自动缩放。

先决条件

  • 具有已部署终结点的 Azure 机器学习工作区。 有关详细信息,请参阅使用在线终结点部署机器学习模型并为其评分
  • 使用 azure-mgmt-monitor 安装的 Python SDK pip install azure-mgmt-monitor 包。
  • 允许进行此操作的任何内置或自定义角色为管理自动缩放的标识分配的microsoft.insights/autoscalesettings/write权限。 有关详细信息,请参阅管理用户和角色

定义自动缩放配置文件

若要为联机终结点实现自动缩放,请启用自动缩放设置,然后定义指定最小、最大值和默认规模集容量的默认自动缩放配置文件。 以下过程启用自动缩放,并设置最小、最大和默认缩放容量的虚拟机(VM)实例数。

  1. 如果尚未为 Azure CLI 设置默认值,请运行以下命令以避免为订阅、工作区和资源组重复指定值。

    az account set --subscription <subscription ID>
    az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
    
  2. 设置终结点和部署名称:

# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
  1. 获取部署和终结点的 Azure 资源管理器 ID:
# ARM id of the deployment
DEPLOYMENT_RESOURCE_ID=$(az ml online-deployment show -e $ENDPOINT_NAME -n $DEPLOYMENT_NAME -o tsv --query "id")
# ARM id of the deployment. todo: change to --query "id"
ENDPOINT_RESOURCE_ID=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query "properties.\"azureml.onlineendpointid\"")
# set a unique name for autoscale settings for this deployment. The below will append a random number to make the name unique.
AUTOSCALE_SETTINGS_NAME=autoscale-$ENDPOINT_NAME-$DEPLOYMENT_NAME-`echo $RANDOM 
  1. 创建自动扩缩配置文件:
az monitor autoscale create --name $AUTOSCALE_SETTINGS_NAME --resource $DEPLOYMENT_RESOURCE_ID --min-count 2 --max-count 5 --count 2

有关详细信息,请参阅 az 显示器自动缩放参考。

基于部署指标创建横向扩展规则

常见的横向扩展规则会在平均 CPU 负载较高时增加 VM 实例数。 以下示例演示如果 CPU 的平均负载在五分钟内超过 70%,如何最多分配两个额外节点。

az monitor autoscale rule create --autoscale-name $AUTOSCALE_SETTINGS_NAME --condition "CpuUtilizationPercentage > 70 avg 5m" --scale out 2

该规则是 my-scale-settings 配置文件的一部分,其中 autoscale-name 与配置文件的 name 部分匹配。 参数的值 condition 指示当 VM 实例的平均 CPU 消耗量超过 70% 5 分钟时,规则将触发。 满足条件时,自动缩放会再分配两个 VM 实例。

有关详细信息,请参阅 az 显示器自动缩放 Azure CLI 语法参考。

基于部署指标创建缩容规则

当平均 CPU 负载较轻时,横向扩展规则可以减少 VM 实例数。 以下示例演示如何在 CPU 负载持续小于 30% 达到 5 分钟时释放一个节点,将节点数减少到至少两个。

az monitor autoscale rule create --autoscale-name $AUTOSCALE_SETTINGS_NAME --condition "CpuUtilizationPercentage < 25 avg 5m" --scale in 1

基于终结点指标创建缩放规则

在前面的部分中,你创建了根据部署指标进行缩减或扩展的规则。 还可以创建适用于部署终结点指标的规则。 例如,当请求延迟大于 5 分钟的平均 70 毫秒时,可以分配另一个节点。

az monitor autoscale rule create --autoscale-name $AUTOSCALE_SETTINGS_NAME --condition "RequestLatency > 70 avg 5m" --scale out 1 --resource $ENDPOINT_RESOURCE_ID

查找其他支持的指标

设置自动缩放规则时,可以使用其他指标。

  • 有关在代码中使用的终结点指标的名称,请参阅 Microsoft.MachineLearningServices/workspaces/onlineEndpoints 支持的指标表中的“REST API 中的名称”列中的值。

  • 有关在代码中使用的部署指标的名称,请参阅 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/deployments 支持的指标表中的“REST API 中的名称”列中的值。

  • 若要在 Azure 门户 缩放规则 屏幕上选择其他指标,请在 “指标源”下选择指标源,然后从 “指标名称”下的可用指标中进行选择。

根据时间表创建刻度规则

可以创建仅在特定日期或特定时间应用的自动缩放规则。 例如,可以创建一个规则,将节点计数设置为周末的两个。

az monitor autoscale profile create --name weekend-profile --autoscale-name $AUTOSCALE_SETTINGS_NAME --min-count 2 --count 2 --max-count 2 --recurrence week sat sun --timezone "Pacific Standard Time"

启用或禁用自动缩放

可以启用或禁用特定的自动缩放配置文件。

az monitor autoscale update --autoscale-name $AUTOSCALE_SETTINGS_NAME --enabled false

删除资源

以下命令同时删除自动缩放配置文件和终结点。

# delete the autoscaling profile
az monitor autoscale delete -n "$AUTOSCALE_SETTINGS_NAME"

# delete the endpoint
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait