이 문서에서는 메트릭 및 일정에 따라 자동 크기 조정을 구성하여 배포에서 리소스 사용량을 관리하는 방법을 알아봅니다. 자동 크기 조정 프로세스를 사용하면 적절한 양의 리소스를 자동으로 실행하여 애플리케이션의 부하를 처리할 수 있습니다. Azure Machine Learning의 Online 엔드포인트는 Azure Monitor의 자동 크기 조정 기능과의 통합을 통해 자동 크기 조정을 지원합니다.
Azure Monitor 자동 크기 조정을 사용하면 규칙 조건이 충족될 때 하나 이상의 자동 크기 조정 작업을 트리거하는 규칙을 설정할 수 있습니다. 메트릭 기반 크기 조정(예: CPU 사용률이 70% 초과), 일정 기반 크기 조정(예: 최대 업무 시간에 대한 크기 조정 규칙) 또는 둘의 조합을 구성할 수 있습니다. 자세한 내용은 Microsoft Azure의 자동 크기 조정 개요를 참조하세요.
현재 Azure CLI, REST API, Azure Resource Manager, Python SDK 또는 브라우저 기반 Azure Portal을 사용하여 자동 크기 조정을 관리할 수 있습니다.
자동 크기 조정을 사용하려면 자동 크기 조정을 관리하는 ID에 microsoft.insights/autoscalesettings/write 역할을 할당해야 합니다. 이 작업을 허용하는 기본 제공 또는 사용자 지정 역할을 사용할 수 있습니다. Azure Machine Learning의 역할 관리에 대한 일반적인 지침은 사용자 및 역할 관리를 참조하세요. Azure Monitor의 자동 크기 조정 설정에 대한 자세한 내용은 Microsoft.Insights 자동 크기 조정을 참조하세요.
Python SDK를 사용하여 Azure Monitor 서비스를 관리하려면 다음 명령을 사용하여 azure-mgmt-monitor 패키지를 설치합니다.
pip install azure-mgmt-monitor
자동 크기 조정 프로필 정의
온라인 엔드포인트에 대해 자동 크기 조정을 사용하도록 설정하려면 먼저 자동 크기 조정 프로필을 정의합니다. 프로필은 기본, 최소 및 최대 확장 집합 용량을 지정합니다. 다음 예제에서는 기본, 최소 및 최대 크기 조정 용량에 대한 VM(가상 머신) 인스턴스 수를 설정하는 방법을 보여 줍니다.
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 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`
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
# 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 = []
)
]
}
)
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage > 70 avg 5m" \
--scale out 2
규칙은 autoscale-name 프로필의 name 부분과 일치하는 my-scale-settings 프로필의 일부입니다. 규칙 condition 인수의 값은 "VM 인스턴스 간의 평균 CPU 사용량이 5분 동안 70%를 초과할 때" 규칙이 트리거되는 것을 나타냅니다. 조건이 충족되면 두 개의 VM 인스턴스가 더 할당됩니다.
이 규칙은 인수 metric_name , time_window 및 time_aggregation(으)로부터 CPUUtilizationpercentage 값의 마지막 5분 평균을 나타냅니다. 메트릭 값이 70의 threshold 보다 크면 배포에서 두 개의 VM 인스턴스를 더 할당합니다.
스케일 아웃 규칙과 스케일 인 규칙을 모두 구성하는 경우 규칙은 다음 스크린샷과 유사합니다. 규칙은 평균 CPU 로드가 5분 동안 70%를 초과하는 경우 최대 5개까지 두 개의 노드를 더 할당해야 한다고 지정합니다. CPU 로드가 5분 동안 30% 미만인 경우 단일 노드를 최소 2개까지 해제해야 합니다.
구성 창을 열어 둡니다. 다음 섹션에서는 다른 크기 조정 설정을 지정합니다.
엔드포인트 메트릭을 기반으로 크기 조정 규칙 만들기
이전 섹션에서는 배포 메트릭에 따라 규모 감축 또는 축소하는 규칙을 만들었습니다. 배포 엔드포인트에 적용되는 규칙을 만들 수도 있습니다. 이 섹션에서는 요청 대기 시간이 5분 동안 평균 70밀리초보다 큰 경우 다른 노드를 할당하는 방법을 알아봅니다.
# 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