ОБЛАСТЬ ПРИМЕНЕНИЯ:
ML-расширение Azure CLI версии 2 (текущая версия)
Python SDK azure-ai-ml версии 2 (текущая версия)
В этой статье описано, как управлять использованием ресурсов в развертывании путем настройки автомасштабирования на основе метрик и расписаний. Процесс автомасштабирования позволяет автоматически запускать нужный объем ресурсов для обработки нагрузки в приложении.
Онлайн конечные точки в Azure Machine Learning поддерживают автомасштабирование благодаря интеграции с функцией автомасштабирования в Azure Monitor. Дополнительные сведения о параметрах автомасштабирования из Azure Monitor см. в Microsoft.Insights autoscalesettings.
Автомасштабирование Azure Monitor позволяет задавать правила, которые активируют одно или несколько действий автомасштабирования при выполнении условий правил. Масштабирование можно использовать для таких метрик, как использование ЦП, расписание, например пиковые рабочие часы или сочетание двух. Дополнительные сведения см. в разделе Общие сведения об автомасштабировании в Microsoft Azure.
Автоматическое масштабирование можно управлять с помощью REST API, Azure Resource Manager, Azure CLI версии 2, пакета SDK Python версии 2 или портала Azure с помощью Студии машинного обучения Azure.
Предварительные требования
Определите профиль автомасштабирования
Чтобы реализовать автомасштабирование для онлайн-конечной точки, включите параметры автомасштабирования, а затем определите профиль автомасштабирования по умолчанию, указывающий минимальную, максимальную и стандартную емкость масштабируемого набора. Следующая процедура включает автомасштабирование и задает количество экземпляров виртуальной машины для минимальной, максимальной и масштабируемой емкости по умолчанию.
Если вы еще не установили значения по умолчанию для 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 Resource Manager для развертывания и конечной точки:
# 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
Для получения дополнительной информации см. справочник az monitor по автомасштабированию.
Импортируйте необходимые модули:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
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 Machine Learning и Azure Monitor:
try:
credential = DefaultAzureCredential()
credential.get_token("https://management.azure.com/.default")
except Exception:
credential = InteractiveBrowserCredential()
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
)
Создайте параметры автомасштабирования и профиль с именем my_scale_settings:
# 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 выберите конечные точки в меню слева.
Выберите конечную точку для настройки из списка доступных конечных точек.
На вкладке "Сведения " для выбранной конечной точки прокрутите вниз и выберите ссылку "Настройка автоматического масштабирования " в разделе "Масштабирование".
Откроется страница масштабирования портала Azure для развертывания. На этой странице выберите “Настраиваемый автомасштаб” под “Выбор масштабирования ресурсов”.
В области профилей по умолчанию выберите "Масштаб" на основе метрики.
В разделе "Ограничения экземпляра" установите минимальное значение 2, максимальное значение 5 и значение по умолчанию2.
Выберите Сохранить в верхней части страницы.
Создание правила горизонтального масштабирования на основе метрик развертывания
Обычное правило горизонтального масштабирования увеличивает количество экземпляров виртуальных машин при высокой средней нагрузке ЦП. В следующем примере показано, как выделить два дополнительных узла до максимального значения, если средняя загрузка ЦП превышает 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 указывает, что правило активирует, когда среднее потребление ЦП среди экземпляров виртуальной машины превышает 70% в течение пяти минут. Автоматическое масштабирование выделяет два дополнительных экземпляра виртуальных машин при выполнении условия.
Для получения дополнительной информации см. справочник синтаксиса az monitor autoscale в Azure CLI.
Создайте определение правила:
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)
)
)
Это правило относится к последнему 5-минутному среднему значению CPUUtilizationpercentage из аргументов metric_name, time_window, и time_aggregation. Если значение метрики больше threshold 70, развертывание выделяет два дополнительных экземпляра виртуальной машины.
Обновите профиль 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
]
)
]
}
)
На странице масштабирования профиля по умолчанию выберите ссылку "Добавить правило " в разделе "Правила ".
На странице правила масштабирования настройте следующие значения:
-
Имя метрик: выберите процент использования ЦП.
-
Оператор: выберите "Больше чем".
-
Пороговое значение метрики: задайте значение 70.
-
Длительность (минуты): задайте значение 5.
-
Статистика по временным интервалам: выберите Среднее.
-
Операция: выберите "Увеличить число на".
-
Число экземпляров: установлено значение 2.
Нажмите кнопку "Добавить".
На странице масштабирования нажмите кнопку "Сохранить".
Создание правила масштабирования на основе метрик развертывания
Правило уменьшения масштаба может уменьшить число виртуальных машин, когда средняя загрузка ЦП низкая. В следующем примере показано, как освободить один узел до минимума двух, если загрузка ЦП меньше 30% в течение пяти минут.
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage < 25 avg 5m" \
--scale in 1
Создайте определение правила.
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 = "Decrease",
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
]
)
]
}
)
Ниже описана настройка конфигурации правил для поддержки масштабирования правила.
На странице Масштабирования портала Azure с выбранным параметром "Настраиваемое автомасштабирование" выберите "Масштабирование на основе метрики" и выберите ссылку "Добавить правило".
На странице правила масштабирования настройте следующие значения:
-
Имя метрик: выберите процент использования ЦП.
-
Оператор: задано значение "Меньше".
-
Пороговое значение метрики: заданозначение 30.
-
Длительность (минуты): задайте значение 5.
-
Статистика по интервалу времени: выберите среднее.
-
Операция: выберите Уменьшить количество на.
-
Число экземпляров: заданозначение 1.
Нажмите кнопку "Добавить".
На странице масштабирования нажмите кнопку "Сохранить".
Если вы настраиваете правила масштабирования наружу и внутрь, ваши правила для профиля по умолчанию выглядят примерно так, как на следующем снимке экрана. Правила указывают, что если средняя загрузка ЦП превышает 70% в течение 5 минут, необходимо выделить еще два узла до пяти. Если загрузка ЦП составляет менее 30 % в течение 5 минут, один узел должен быть освобожден до минимума двух.
Создание правила масштабирования на основе метрик конечных точек
В предыдущих разделах вы создали правила для масштабирования в зависимости от метрик развертывания. Вы также можете создавать правила, которые применяются к метрикам конечной точки развертывания. Например, можно выделить другой узел, если задержка запроса больше 70 миллисекунда в течение пяти минут.
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "RequestLatency > 70 avg 5m" \
--scale out 1 \
--resource $ENDPOINT_RESOURCE_ID
Создайте определение правила:
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
]
)
]
}
)
В нижней части страницы масштабирования портала Azure с выбранным настраиваемым автомасштабированием выберите ссылку "Добавить условие масштабирования ".
В разделе "Профиль" выберите "Масштаб" на основе метрики и выберите ссылку "Добавить правило ".
На странице правила масштабирования настройте следующие значения:
-
Источник метрик: выбор другого ресурса.
-
Тип ресурса: выберите онлайн конечные точки машинного обучения.
-
Ресурс. Выберите конечную точку.
-
Имя метрики: выбор задержки запроса.
-
Оператор: задано значение "Больше".
-
Пороговое значение метрики: задайте значение 70.
-
Длительность (минуты): задайте значение 5.
-
Статистика по интервалу времени: выберите среднее.
-
Операция: выберите "Увеличить число на".
-
Число экземпляров: задано значение 1.
Нажмите кнопку "Добавить".
На странице масштабирования нажмите кнопку "Сохранить".
Поиск других поддерживаемых метрик
При настройке правил автомасштабирования можно использовать другие метрики.
Создание правила масштабирования на основе расписания
Вы можете создавать правила автомасштабирования, которые применяются только в определенные дни или в определенное время. Например, можно создать правило, которое задает количество узлов равным двум в выходные дни.
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"
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
},
rules=[],
recurrence = Recurrence(
frequency = "Week",
schedule = RecurrentSchedule(
time_zone = "Pacific Standard Time",
days = ["Saturday", "Sunday"],
hours = ["0"],
minutes = ["0"]
)
)
)
]
}
)
В нижней части страницы масштабирования портала Azure с выбранным параметром "Настраиваемое автомасштабирование " выберите "Добавить условие масштабирования".
В разделе "Профиль" выберите "Масштабировать до определенного числа экземпляров".
Установите число экземпляров на 2.
Для расписания выберите "Повторять определенные дни".
Для повтора каждый, выберите субботу и воскресенье.
Нажмите кнопку "Сохранить " в верхней части страницы масштабирования .
Включение или отключение автомасштабирования
Вы можете включить или отключить определенный профиль автомасштабирования.
az monitor autoscale update \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--enabled false
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"enabled" : False
}
)
На странице масштабирования портала Azure:
- Чтобы отключить профили автомасштабирования, выберите "Вручную масштабировать" и нажмите кнопку "Сохранить".
- Чтобы вновь включить профили автомасштабирования, выберите Настраиваемое автомасштабирование и нажмите кнопку Сохранить.
Удаление ресурсов
Следующие команды удаляют профиль автомасштабирования и конечную точку.
# 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
mon_client.autoscale_settings.delete(
resource_group,
autoscale_settings_name
)
ml_client.online_endpoints.begin_delete(endpoint_name)
Связанный контент