El escalado automático ejecuta automáticamente la cantidad adecuada de recursos para controlar la carga en la aplicación. Los puntos de conexión en línea admiten la escalabilidad automática mediante la integración con la característica de escalabilidad automática de Azure Monitor.
La escalabilidad automática de Azure Monitor admite un amplio conjunto de reglas. Puede configurar escalado basado en métricas (por ejemplo, uso de CPU > 70 %), escalado basado en programación (por ejemplo, reglas de escalado para horario comercial punta) o una combinación. Para conocer los detalles, consulte Información general sobre el escalado automático en Microsoft Azure.
En la actualidad puede administrar la escalabilidad automática mediante la CLI de Azure, REST, ARM o Azure Portal basado en el explorador. Otros SDK de Azure Machine Learning, como el de Python, van a agregar compatibilidad con el tiempo.
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.
Definición de un perfil de escalado automático
Para habilitar la escalabilidad automática en un punto de conexión, primero defina un perfil de escalabilidad automática. Este perfil define la capacidad predeterminada, mínima y máxima del conjunto de escalado. En el ejemplo siguiente se establece la capacidad predeterminada y mínima en dos instancias de máquina virtual, y la capacidad máxima en cinco:
El fragmento de código siguiente establece los nombres del punto de conexión y la implementación:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
Luego obtenga el identificador de Azure Resource Manager de la implementación y el 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`
El fragmento de código siguiente crea el perfil de escalabilidad automática:
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 below will append a random number to make the name unique.
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 Estudio de Azure Machine Learning, seleccione el área de trabajo y luego seleccione Puntos de conexión en el lado izquierdo de la página. Una vez que aparezcan los puntos de conexión, seleccione el que quiere configurar.
En la pestaña Detalles del punto de conexión, seleccione Configurar escalado automático.
En Elegir cómo escalar los recursos, seleccione Escalabilidad automática personalizada para comenzar con la configuración. En la condición de escalabilidad predeterminada, use los valores siguientes:
En Modo de escala, seleccione Escalado basado en una métrica.
Establezca Mínimo en 2.
Establezca Máximo en 5.
Establezca Predeterminado en 2.
Creación de una regla para escalar horizontalmente mediante métricas
Una regla de escalabilidad horizontal común es aquella que aumenta el número de instancias de máquina virtual cuando la carga media de CPU es alta. En el ejemplo siguiente se asignan dos nodos más (hasta el máximo) si la carga media de CPU es superior al 70 % durante cinco 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 (autoscale-name coincide con el valor name del perfil). El valor de su argumento condition indica que la regla debe desencadenarse cuando "El consumo medio de CPU entre las instancias de máquina virtual supera el 70% durante cinco minutos". Cuando se cumple esa condición, se asignan dos instancias de máquina virtual más.
Nota
Para obtener más información sobre la sintaxis de la CLI, vea az monitor autoscale.
Esta regla se refiere al promedio de los últimos cinco minutos de CPUUtilizationpercentage de los argumentos metric_name, time_window y time_aggregation. Cuando el valor de la métrica es mayor que el threshold de 70, se asignan dos instancias de máquina virtual más.
Actualice el perfil my-scale-settings para incluir esta regla:
En la sección Reglas, seleccione Agregar una regla. Aparece la página Regla de escalado. Use la siguiente información para rellenar los campos de esta página:
Establezca Nombre de métrica en Porcentaje de uso de la CPU.
Establezca Operador en Mayor que y el Umbral de métrica en 70.
Establezca Duración (minutos) en 5. Deje las Estadísticas de intervalo de agregación como Media.
Establezca Operación en Aumentar recuento en y Recuento de instancias en 2.
Por último, seleccione el botón Agregar para crear la regla.
Creación de una regla para reducir horizontalmente mediante métricas
Si la carga es ligera, una regla de reducción horizontal puede reducir el número de instancias de máquina virtual. En el ejemplo siguiente se libera un solo nodo, hasta un mínimo de 2, si la carga de CPU es inferior al 30 % durante 5 minutos:
En la sección Reglas, seleccione Agregar una regla. Aparece la página Regla de escalado. Use la siguiente información para rellenar los campos de esta página:
Establezca Nombre de métrica en Porcentaje de uso de la CPU.
Establezca Operador en Menor que y el Umbral de métrica en 30.
Establezca Duración (minutos) en 5.
Establezca Operación en Reducir el recuento en y Recuento de instancias en 1.
Por último, seleccione el botón Agregar para crear la regla.
Si tiene reglas de escalado horizontal y de reducción horizontal, van a tener un aspecto similar al de la captura de pantalla siguiente. Ha especificado que si la carga de CPU media supera el 70 % durante 5 minutos, se deben asignar dos nodos más, hasta el límite de 5. Si la carga de CPU es inferior al 30 % durante 5 minutos, se debe liberar un solo nodo, hasta el mínimo de 2.
Creación de una regla de escalabilidad basada en métricas del punto de conexión
Las reglas anteriores se aplicaban a la implementación. Ahora, agregue una regla que se aplique al punto de conexión. En este ejemplo, si la latencia de la solicitud supera una media de 70 milisegundos durante 5 minutos, asigne otro nodo.
En la parte inferior de la página, seleccione + Agregar una condición de escalado.
Seleccione Escalado basado en una métrica y luego Agregar una regla. Aparece la página Regla de escalado. Use la siguiente información para rellenar los campos de esta página:
Establezca Origen de métrica en Otro recurso.
Establezca Tipo de recurso en Puntos de conexión línea de Machine Learning.
Establezca Recurso en el punto de conexión.
Establezca Nombre de la métrica en Latencia de solicitud.
Establezca Operador en Mayor que y el Umbral de métrica en 70.
Establezca Duración (minutos) en 5.
Establezca Operación en Aumentar recuento en y Recuento de instancias en 1.
Creación de reglas de escalabilidad basadas en una programación
También puede crear reglas que se apliquen solo en determinados días u horas. En este ejemplo, el recuento de nodos se establece en 2 el fin de semana.
En la parte inferior de la página, seleccione + Agregar una condición de escalado. En la nueva condición de escala, use la siguiente información para rellenar los campos:
Seleccione Escalar a un número específico de instancias.
Establezca Recuento de instancias en 2.
Establezca Programación en Repetir en días específicos.
Establezca la programación en Repetir cadaSábado y Domingo.
# 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