你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
Azure 机器学习中的自动缩放联机终结点
本文内容
适用范围:Azure CLI ml 扩展 v2(最新版) Python SDK azure-ai-ml v2(最新版)
本文介绍如何根据指标和计划配置自动缩放来管理部署中的资源使用情况。 自动缩放过程可以自动运行正确的资源量来处理应用程序上的负载。 Azure 机器学习中的联机终结点 通过与 Azure Monitor 中的自动缩放功能集成来支持自动缩放。
Azure Monitor 自动缩放允许设置规则,以在满足规则条件时触发一个或多个自动缩放操作。 可以配置基于指标的缩放(例如 CPU 利用率大于 70%)、基于计划的缩放(例如高峰时段的缩放规则),或两者的组合。 有关详细信息,请参阅 Microsoft Azure 中的自动缩放概述 。
目前可以使用 Azure CLI、REST API、Azure 资源管理器、Python SDK 或基于浏览器的 Microsoft Azure 门户来管理自动缩放。
先决条件
一个已部署的终结点。 有关详细信息,请参阅使用在线终结点部署机器学习模型并为其评分 。
若要使用自动缩放,必须将角色 microsoft.insights/autoscalesettings/write
分配给管理自动缩放的标识。 你可以使用允许此操作的任何内置或自定义角色。 有关管理 Azure 机器学习角色的一般指南,请参阅管理用户和角色 。 有关 Azure Monitor 自动缩放设置的详细信息,请参阅 Microsoft.Insights autoscalesettings 。
若要使用 Python SDK 管理 Azure Monitor 服务,请使用以下命令安装 azure-mgmt-monitor
包:
pip install azure-mgmt-monitor
定义自动缩放配置文件
若要为联机终结点启用自动缩放,首先要定义自动缩放配置文件。 此配置文件指定默认、最小和最大规模集容量。 以下示例演示如何设置默认、最小和最大缩放容量的虚拟机 (VM) 实例数。
适用于:Azure CLI ml 扩展 v2(当前)
如果尚未为 Azure CLI 指定默认设置,则应保存默认设置。 若要避免多次传入订阅、工作区和资源组的值,请运行此代码:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
设置终结点和部署名称:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
获取部署和终结点的 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`
创建自动缩放配置文件:
az monitor autoscale create \
--name $AUTOSCALE_SETTINGS_NAME \
--resource $DEPLOYMENT_RESOURCE_ID \
--min-count 2 --max-count 5 --count 2
适用范围:Python SDK azure-ai-ml v2(最新版)
导入必要的模块:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.mgmt.monitor import MonitorManagementClient
from azure.mgmt.monitor.models import AutoscaleProfile, ScaleRule, MetricTrigger, ScaleAction, Recurrence, RecurrentSchedule
import random
import datetime
为工作区、终结点和部署定义变量:
subscription_id = "<YOUR-SUBSCRIPTION-ID>"
resource_group = "<YOUR-RESOURCE-GROUP>"
workspace = "<YOUR-WORKSPACE>"
endpoint_name = "<YOUR-ENDPOINT-NAME>"
deployment_name = "blue"
获取 Azure 机器学习和 Azure Monitor 客户端:
credential = DefaultAzureCredential()
ml_client = MLClient(
credential, subscription_id, resource_group, workspace
)
mon_client = MonitorManagementClient(
credential, subscription_id
)
获取终结点和部署对象:
deployment = ml_client.online_deployments.get(
deployment_name, endpoint_name
)
endpoint = ml_client.online_endpoints.get(
endpoint_name
)
创建自动缩放配置文件:
# Set a unique name for autoscale settings for this deployment. The following code appends a random number to create a unique name.
autoscale_settings_name = f"autoscale-{endpoint_name}-{deployment_name}-{random.randint(0,1000)}"
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = []
)
]
}
)
在 Azure 机器学习工作室 中,转到工作区,然后从左侧菜单中选择终结点 。
在可用终结点列表中,选择要配置的终结点:
在所选终结点的“详细信息 ”选项卡上,选择“配置自动缩放 ”:
对于“选择如何缩放资源 ”选项,请选择“自定义自动缩放 ”开始配置。
对于默认 缩放条件选项,请配置以下值:
缩放模式 :选择“基于指标缩放 ”。
实例限制 >最小值 :将值设置为 2。
实例限制 >最大值 :将值设置为 5。
实例限制 >默认值 :将值设置为 2。
使配置窗格保持打开状态。 在下一部分中,配置“规则 ”设置。
基于部署指标创建横向扩展规则
常见的横向扩展规则是在平均 CPU 负载较高时增加 VM 实例数。 以下示例演示如何在 CPU 平均负载超过 70% 5 分钟时分配两个节点(最大节点数):
适用于:Azure CLI ml 扩展 v2(当前)
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 消耗量持续 5 分钟超过 70%”时触发。满足条件后,再分配两个 VM 实例。
适用范围:Python SDK azure-ai-ml v2(最新版)
创建规则定义:
rule_scale_out = ScaleRule(
metric_trigger = MetricTrigger(
metric_name="CpuUtilizationPercentage",
metric_resource_uri = deployment.id,
time_grain = datetime.timedelta(minutes = 1),
statistic = "Average",
operator = "GreaterThan",
time_aggregation = "Last",
time_window = datetime.timedelta(minutes = 5),
threshold = 70
),
scale_action = ScaleAction(
direction = "Increase",
type = "ChangeCount",
value = 2,
cooldown = datetime.timedelta(hours = 1)
)
)
此规则是指参数 metric_name
、time_window
和 time_aggregation
中 CPUUtilizationpercentage
值的最近 5 分钟平均值。 当指标的值大于 70 的 threshold
时,部署将再分配两个 VM 实例。
更新 my-scale-settings
配置文件以包含此规则:
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = [
rule_scale_out
]
)
]
}
)
以下步骤继续执行自动缩放配置。
对于“规则 ”选项,请选择“添加规则 ”链接。 此时会打开“缩放规则 ”页。
在“缩放规则 ”页上,配置以下值:
指标名称 :选择“CPU 使用率百分比 ”。
运算符 :设置为“大于 ”。
指标阈值 :将值设置为 70。
持续时间(分钟) :将值设置为 5。
时间粒度统计信息 :选择“平均 ”。
操作 :选择“计数增量 ”。
实例计数 :将值设置为 2。
选择“添加 ”以创建规则:
使配置窗格保持打开状态。 在下一部分中,调整“规则 ”设置。
基于部署指标创建横向缩减规则
当平均 CPU 负载较轻时,缩减规则可以减少 VM 实例数。 以下示例演示如何将单个节点释放到至少两个节点(如果 CPU 负载持续 5 分钟小于 30%)。
适用于:Azure CLI ml 扩展 v2(当前)
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage < 25 avg 5m" \
--scale in 1
适用范围:Python SDK azure-ai-ml v2(最新版)
创建规则定义:
rule_scale_in = ScaleRule(
metric_trigger = MetricTrigger(
metric_name="CpuUtilizationPercentage",
metric_resource_uri = deployment.id,
time_grain = datetime.timedelta(minutes = 1),
statistic = "Average",
operator = "LessThan",
time_aggregation = "Last",
time_window = datetime.timedelta(minutes = 5),
threshold = 30
),
scale_action = ScaleAction(
direction = "Increase",
type = "ChangeCount",
value = 1,
cooldown = datetime.timedelta(hours = 1)
)
)
更新 my-scale-settings
配置文件以包含此规则:
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = [
rule_scale_out,
rule_scale_in
]
)
]
}
)
以下步骤调整“规则 ”配置以支持缩放规则。
对于“规则 ”选项,请选择“添加规则 ”链接。 此时会打开“缩放规则 ”页。
在“缩放规则 ”页上,配置以下值:
指标名称 :选择“CPU 使用率百分比 ”。
运算符 :设置为“小于 ”。
指标阈值 :将值设置为 30。
持续时间(分钟) :将值设置为 5。
时间粒度统计信息 :选择“平均 ”。
操作 :选择“计数减量 ”。
实例计数 :将值设置为 1。
选择“添加 ”以创建规则:
如果同时配置横向扩展和横向扩展规则,则规则类似于以下屏幕截图。 规则指定,如果平均 CPU 负载持续 5 分钟超过 70%,则应再分配两个节点,最大限制为 5 个。 如果 CPU 负载持续 5 分钟小于 30%,则应释放单个节点,但至少保留两个。
使配置窗格保持打开状态。 在下一部分中,指定其他缩放设置。
基于终结点指标创建缩放规则
在前面的部分中,你创建了根据部署指标进行横向扩展或横向扩展的规则。 还可以创建适用于部署终结点的规则。 在本部分中,你将了解如何在请求延迟持续 5 分钟大于平均值 70 毫秒时分配另一个节点。
适用于:Azure CLI ml 扩展 v2(当前)
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "RequestLatency > 70 avg 5m" \
--scale out 1 \
--resource $ENDPOINT_RESOURCE_ID
适用范围:Python SDK azure-ai-ml v2(最新版)
创建规则定义:
rule_scale_out_endpoint = ScaleRule(
metric_trigger = MetricTrigger(
metric_name="RequestLatency",
metric_resource_uri = endpoint.id,
time_grain = datetime.timedelta(minutes = 1),
statistic = "Average",
operator = "GreaterThan",
time_aggregation = "Last",
time_window = datetime.timedelta(minutes = 5),
threshold = 70
),
scale_action = ScaleAction(
direction = "Increase",
type = "ChangeCount",
value = 1,
cooldown = datetime.timedelta(hours = 1)
)
)
该规则的 metric_resource_uri
字段现在指向的是终结点,而不是部署。
更新 my-scale-settings
配置文件以包含此规则:
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = [
rule_scale_out,
rule_scale_in,
rule_scale_out_endpoint
]
)
]
}
)
以下步骤继续“自定义自动缩放 ”页上的规则配置。
在页面底部,选择“添加缩放条件 ”链接。
在“缩放条件 ”页上,选择“基于指标缩放 ”,然后选择“添加规则 ”链接。 此时会打开“缩放规则 ”页。
在“缩放规则 ”页上,配置以下值:
指标源 :选择“其他资源 ”。
资源类型 :选择“机器学习联机终结点 ”。
资源 :选择终结点。
指标名称 :选择“请求延迟 ”。
运算符 :设置为“大于 ”。
指标阈值 :将值设置为 70。
持续时间(分钟) :将值设置为 5。
时间粒度统计信息 :选择“平均 ”。
操作 :选择“计数增量 ”。
实例计数 :将值设置为 1。
选择“添加 ”以创建规则:
查找支持的指标的 ID
如果要使用代码中的其他指标通过 Azure CLI 或 SDK 设置自动缩放规则,请参阅“可用指标 ”中的表格。
基于计划创建缩放规则
还可以创建仅在特定日期或特定时间应用的规则。 在本部分中,你将创建一个规则,用于将周末的节点计数设置为 2。
适用于:Azure CLI ml 扩展 v2(当前)
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"
适用范围:Python SDK azure-ai-ml v2(最新版)
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="Default",
capacity={
"minimum" : 2,
"maximum" : 2,
"default" : 2
},
recurrence = Recurrence(
frequency = "Week",
schedule = RecurrentSchedule(
time_zone = "Pacific Standard Time",
days = ["Saturday", "Sunday"],
hours = [],
minutes = []
)
)
)
]
}
)
以下步骤使用工作室中“自定义自动缩放 ”页上的选项配置规则。
在页面底部,选择“添加缩放条件 ”链接。
在“缩放条件 ”页上,选择“缩放到特定实例计数 ”,然后选择“添加规则 ”链接。 此时会打开“缩放规则 ”页。
在“缩放规则 ”页上,配置以下值:
实例计数 :将值设置为 2。
计划 :选择“重复特定日期 ”。
设置计划模式:选择“重复频率 ”、“星期六 ”和“星期日 ”。
选择“添加 ”以创建规则:
启用或禁用自动缩放
可以启用或禁用特定的自动缩放配置文件。
适用于:Azure CLI ml 扩展 v2(当前)
az monitor autoscale update \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--enabled false
适用范围:Python SDK azure-ai-ml v2(最新版)
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"enabled" : False
}
)
删除资源
如果不打算使用部署,请按照以下步骤删除资源。
适用于:Azure CLI ml 扩展 v2(当前)
# 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
适用范围:Python SDK azure-ai-ml v2(最新版)
mon_client.autoscale_settings.delete(
resource_group,
autoscale_settings_name
)
ml_client.online_endpoints.begin_delete(endpoint_name)
在 Azure 机器学习工作室 中,转到工作区,然后从左侧菜单中选择“终结点 ”。
在终结点列表中,选择要删除的终结点(勾选模型名称旁边的圆圈)。
选择“删除”。
或者,可以直接在终结点详细信息页 中删除托管联机终结点。
相关内容