En este artículo aprenderá a administrar el uso de recursos en una implementación configurando la escalabilidad automática en función de métricas y programaciones. El proceso de escalabilidad automática le permite ejecutar automáticamente la cantidad adecuada de recursos para controlar la carga de su aplicación. Los puntos de conexión en línea de Azure Machine Learning son compatibles con la escalabilidad automática mediante la integración de la característica de escalabilidad automática en Azure Monitor.
La escalabilidad automática de Azure Monitor le permite establecer reglas que desencadenan una o más acciones de escalabilidad automática cuando se cumplen las condiciones de las reglas. Puede configurar un escalado basado en métricas (como una utilización de la CPU superior al 70 %), un escalado basado en programación (como reglas de escalado para las horas punta de trabajo) o una combinación de ambos. Para conocer los detalles, consulte Información general sobre el escalado automático en Microsoft Azure.
Actualmente puede administrar la escalabilidad automática usando la CLI de Azure, las API de REST, Azure Resource Manager, el SDK de Python o Azure Portal basado en explorador.
Para usar el escalado automático, el rol microsoft.insights/autoscalesettings/write debe asignarse a la identidad que administra el escalado automático. Puede usar cualquier rol integrado o personalizado que permita esta acción. Para obtener instrucciones generales sobre cómo administrar roles para Azure Machine Learning, consulte Administración de usuarios y roles. Para más información sobre la configuración de escalado automático de Azure Monitor, consulte Configuración de escalabilidad automática de Microsoft.Insights.
Para usar el SDK de Python para administrar el servicio de Azure Monitor, instale el paquete azure-mgmt-monitor con el siguiente comando:
pip install azure-mgmt-monitor
Definición del perfil de escalabilidad automática
Para habilitar la escalabilidad automática para un punto de conexión en línea, primero debe definir un perfil de escalabilidad automática. El perfil establece la capacidad predeterminada, mínima y máxima del conjunto de escalado. El siguiente ejemplo muestra cómo establecer el número de instancias de máquina virtual (VM) para la capacidad de escalado predeterminada, mínima y máxima.
Si aún no ha establecido los valores predeterminados de la CLI de Azure, guarde la configuración predeterminada. Para evitar pasar los valores de la suscripción, el área de trabajo y el grupo de recursos varias veces, ejecute este código:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Establezca los nombres del punto de conexión y de la implementación:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
Obtenga el id. de Azure Resource Manager de la implementación y del punto de conexión:
# 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
Defina variables para el área de trabajo, el punto de conexión y la implementación:
# 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 = []
)
]
}
)
En la lista de puntos de conexión disponibles, seleccione el punto de conexión que quiere configurar:
En la pestaña Detalles del punto de conexión seleccionado, seleccione Configurar escalabilidad automática:
Para la opción Elegir cómo escalar sus recursos, seleccione Escalabilidad automática personalizada para comenzar la configuración.
Para la opción de condición de escalado Predeterminada, configure los siguientes valores:
Modo de escala: seleccione Escalado basado en una métrica.
Límites de instancia>Mínimo: establezca el valor en 2.
Límites de instancia>Máximo: establezca el valor en 5.
Límites de instancia>Predeterminado: establezca el valor en 2.
Deje abierto el panel de configuración. En la siguiente sección, configurará los ajustes de Reglas.
Creación de una regla de escalabilidad horizontal basada en métricas de implementación
Una regla común de escalabilidad horizontal consiste en aumentar el número de instancias de máquinas virtuales cuando la carga media de la CPU es alta. El siguiente ejemplo muestra cómo asignar dos nodos más (hasta el máximo) si la carga media de la CPU es superior al 70 % durante 5 minutos:
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage > 70 avg 5m" \
--scale out 2
La regla forma parte del perfil my-scale-settings, donde autoscale-name coincide con la parte name del perfil. El valor del argumento de la regla condition indica que la regla se desencadena cuando "El consumo medio de CPU entre las instancias de la máquina virtual supera el 70 % durante 5 minutos." Cuando se cumple esa condición, se asignan dos instancias de máquina virtual más.
Esta regla hace referencia a la media de los últimos 5 minutos del valor CPUUtilizationpercentage de los argumentos metric_name, time_window y time_aggregation. Cuando el valor de la métrica es superior al threshold de 70, la implementación asigna dos instancias más de máquina virtual.
Actualice el perfil my-scale-settings para incluir esta regla:
Los siguientes pasos continúan con la configuración de la escalabilidad automática.
Para la opción Reglas, seleccione el vínculo Agregar una regla. Se abre la página Regla de escalado.
En la página Regla de escalado, configure los siguientes valores:
Nombre de la métrica: seleccione Porcentaje de utilización de la CPU.
Operador: establezca Mayor que.
Umbral de métrica: establezca el valor en 70.
Duración (minutos): establezca el valor en 5.
Estadística de intervalo de tiempo: seleccione Promedio.
Operación: seleccione Aumentar recuento en.
Recuento de instancias: establezca el valor en 2.
Seleccione Agregar para crear la regla:
Deje abierto el panel de configuración. En la siguiente sección, ajustará la configuración de Reglas.
Creación de una regla de escalado basada en las métricas de implementación
Cuando la carga media de la CPU es ligera, una regla de escalado puede reducir el número de instancias de máquinas virtuales. El siguiente ejemplo muestra cómo liberar un único nodo hasta un mínimo de dos, si la carga de la CPU es inferior al 30 % durante 5 minutos.
Los siguientes pasos ajustan la configuración de Reglas para que sea compatible con una regla de escalado.
Para la opción Reglas, seleccione el vínculo Agregar una regla. Se abre la página Regla de escalado.
En la página Regla de escalado, configure los siguientes valores:
Nombre de la métrica: seleccione Porcentaje de utilización de la CPU.
Operador: establézcalo en Menos de.
Umbral de métrica: establezca el valor en 30.
Duración (minutos): establezca el valor en 5.
Estadística de intervalo de tiempo: seleccione Promedio.
Operación: seleccione Reducir recuento en.
Recuento de instancias: establezca el valor en 1.
Seleccione Agregar para crear la regla:
Si configura tanto las reglas de escalabilidad horizontal como las de reducción horizontal, sus reglas tendrán un aspecto similar al siguiente recorte de pantalla. Las reglas especifican que si la carga media de la CPU supera el 70 % durante 5 minutos, deben asignarse dos nodos más, hasta el límite de cinco. Si la carga de CPU es inferior al 30 % durante 5 minutos, se debe liberar un solo nodo, hasta el mínimo de 2.
Deje abierto el panel de configuración. En la sección siguiente, se especifican otras opciones de escalado.
Creación de una regla de escalado basada en métricas de punto de conexión
En las secciones anteriores, creó reglas para escalar o reducir horizontalmente en función de las métricas de implementación. También puede crear una regla que se aplique al punto de conexión de implementación. En esta sección, aprenderá a asignar otro nodo cuando la latencia de la solicitud sea superior a una media de 70 milisegundos durante 5 minutos.
Los siguientes pasos continúan la configuración de reglas en la página Escalabilidad automática personalizada.
En la parte inferior de la página, seleccione el vínculo Agregar una condición de escalado.
En la página Condición de escalado, seleccione Escalado basado en métrica, y después seleccione el vínculo Añadir una regla. Se abre la página Regla de escalado.
En la página Regla de escalado, configure los siguientes valores:
Origen de métrica: seleccione Otro recurso.
Tipo de recurso: seleccione Puntos de conexión en línea de Machine Learning.
Recurso: seleccione el punto de conexión.
Nombre de métrica: seleccione Latencia de solicitud.
Operador: establezca Mayor que.
Umbral de métrica: establezca el valor en 70.
Duración (minutos): establezca el valor en 5.
Estadística de intervalo de tiempo: seleccione Promedio.
Operación: seleccione Aumentar recuento en.
Recuento de instancias: establezca el valor en 1.
Seleccione Agregar para crear la regla:
Búsqueda de identificadores para métricas admitidas
Si quiere usar otras métricas en código para establecer reglas de escalabilidad automática usando la CLI de Azure o el SDK, consulte la tabla en Métricas disponibles.
Creación de una regla de escalado basada en una programación
También puede crear reglas que se apliquen solo en determinados días u horas. En esta sección se crea una regla que establece el recuento de nodos en 2 los fines de semana.
Los siguientes pasos configuran la regla con las opciones de la página Escalabilidad automática personalizada del estudio.
En la parte inferior de la página, seleccione el vínculo Agregar una condición de escalado.
En la página Condición de escalado, seleccione Escalado a un recuento de instancias específico y después seleccione el vínculo Agregar una regla. Se abre la página Regla de escalado.
En la página Regla de escalado, configure los siguientes valores:
Recuento de instancias: establezca el valor en 2.
Programación: seleccione Repetir días específicos.
Establezca el patrón de programación: seleccione Repetir cada y Sábado y Domingo.
Seleccione Agregar para crear la regla:
Habilitar o deshabilitar la escalabilidad automática
Puede habilitar o deshabilitar un perfil de escalabilidad automática específico.
Para deshabilitar un perfil de escalabilidad automática en uso, seleccione Escalabilidad manual, y después seleccione Guardar.
Para habilitar un perfil de escalabilidad automática, seleccione Escalabilidad automática personalizada. El estudio enumera todos los perfiles de escalabilidad automática reconocidos para su área de trabajo. Seleccione un perfil y después Guardar para habilitarlo.
Eliminar recursos
Si no va a usar sus implementaciones, elimine los recursos con los siguientes pasos.
# 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