Escalado automático de un punto de conexión asíncrono - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Escalado automático de un punto de conexión asíncrono

Amazon SageMaker admite el escalado automático (escalado automático) de su punto de conexión asíncrono. El escalado automático ajusta dinámicamente el número de instancias aprovisionadas para un modelo en respuesta a los cambios en su carga de trabajo. A diferencia de otros modelos hospedados que Amazon SageMaker admite, con la inferencia asíncrona también puede reducir sus instancias de puntos de conexión asíncronos a cero. Las solicitudes que se reciben cuando no hay ninguna instancia se ponen en cola para su procesamiento cuando el punto de conexión escale verticalmente.

Para escalar automáticamente su punto de conexión asíncrono, debe hacer, como mínimo, lo siguiente:

  • Registrar un modelo implementado (variante de producción).

  • Definir una política de escalado.

  • Aplicar la política de escalado automático.

Para poder utilizar el escalado automático, debe haber implementado previamente un modelo en un punto final. SageMaker Los modelos implementados se denominan variante de producción. Consulte Implementación del modelo en los servicios de SageMaker alojamiento para obtener más información sobre la implementación de un modelo en un punto final. Para especificar las métricas y los valores de destino para una política de escalado, debe configurar una política de escalado. Para obtener información sobre cómo definir una política de escalado, consulte Define a scaling policy. Una vez registrado su modelo y definido una política de escalado, aplique la política de escalado al modelo registrado. Para obtener información sobre cómo aplicar una política de escalado, consulte Apply a scaling policy.

Para obtener más información sobre cómo definir una política de escalado adicional opcional que amplíe su punto de conexión al recibir una solicitud después de que este se haya reducido verticalmente hasta cero, consulte Definir una política de escalado que escale verticalmente desde cero para las nuevas solicitudes (opcional). Si no especifica esta política opcional, el punto de conexión solo iniciará el escalado vertical desde cero cuando el número de solicitudes pendientes supere el valor de seguimiento objetivo.

Para obtener más información sobre otros requisitos previos y componentes que se utilizan con el escalado automático, consulte la sección Requisitos previos de la documentación del SageMaker escalado automático.

nota

Si asocia varias políticas de escalado al mismo grupo de escalado automático, es posible que surjan conflictos de escalado. Cuando hay un conflicto, Amazon EC2 Auto Scaling elige la política que proporciona la mayor capacidad, tanto para el escalado como para la reducción horizontal. Para obtener más información sobre este comportamiento, consulte Multiple dynamic scaling policies en la documentación de Amazon EC2 Auto Scaling.

Definir una política de escalado

Para especificar las métricas y los valores de destino para una política de escalado, debe configurar una política de escalado de seguimiento de destino. Defina la política de escalado como un bloque JSON en un archivo de texto. Este archivo de texto se utiliza al invocar la API Application Auto Scaling AWS CLI o la API. Para obtener más información acerca de la sintaxis de configuración de la política, consulte TargetTrackingScalingPolicyConfiguration en la referencia de la API de Auto Scaling de aplicaciones.

En el caso de los puntos finales asíncronos, se recomienda SageMaker encarecidamente crear una configuración de políticas para el escalado de una variante basada en el seguimiento de los objetivos. En este ejemplo de configuración, utilizamos una métrica personalizada (CustomizedMetricSpecification) llamada ApproximateBacklogSizePerInstance.

TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. Here the metric is: ApproximateBacklogSizePerInstance 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [ {'Name': 'EndpointName', 'Value': <endpoint_name> } ], 'Statistic': 'Average', } }

Definir una política de escalado que escale a cero

A continuación, se muestra cómo definir y registrar una variante de punto de conexión con el escalado automático de la aplicación mediante AWS SDK for Python (Boto3). Tras definir un objeto cliente de bajo nivel que represente el escalado automático de la aplicación con Boto3, utilizamos el método RegisterScalableTarget para registrar la variante de producción. Hemos establecido MinCapacity en 0 porque la inferencia asíncrona permite escalar automáticamente a 0 cuando no hay solicitudes por procesar.

# Common class representing application autoscaling for SageMaker client = boto3.client('application-autoscaling') # This is the format in which application autoscaling references the endpoint resource_id='endpoint/' + <endpoint_name> + '/variant/' + <'variant1'> # Define and register your endpoint variant response = client.register_scalable_target( ServiceNamespace='sagemaker', ResourceId=resource_id, ScalableDimension='sagemaker:variant:DesiredInstanceCount', # The number of EC2 instances for your Amazon SageMaker model endpoint variant. MinCapacity=0, MaxCapacity=5 )

Para obtener una descripción detallada de la API de escalado automático de aplicaciones, consulte la documentación Application Scaling Boto3.

Definir una política de escalado que escale verticalmente desde cero para las nuevas solicitudes (opcional)

Quizá haya algún caso de uso en el que tenga solicitudes esporádicas o períodos con un número reducido de solicitudes. Si el punto de conexión se ha reducido verticalmente a cero instancias durante estos períodos, no volverá a escalar hasta que el número de solicitudes en la cola supere el objetivo especificado en la política de escalado. Esto puede provocar largos tiempos de espera para las solicitudes en cola. En la siguiente sección, se muestra cómo crear una política de escalado adicional que aumente su punto de conexión desde cero instancias después de recibir cualquier nueva solicitud en la cola. El punto de conexión podrá responder a las nuevas solicitudes con mayor rapidez, en lugar de esperar a que el tamaño de la cola supere el objetivo.

Para crear una política de escalado para su punto de conexión que escale verticalmente desde cero instancias, haga lo siguiente:

  1. Cree una política de escalado que defina el comportamiento deseado; es decir, que escale verticalmente el punto de conexión con cero instancias, pero que haya solicitudes en la cola. A continuación, se muestra cómo definir una política de escalado denominada HasBacklogWithoutCapacity-ScalingPolicy usando AWS SDK for Python (Boto3). Cuando la cola es superior a cero y el número de instancias actual del punto de conexión también es cero, la política escala verticalmente el punto de conexión. En el resto de los casos, la política no afecta al escalado del punto de conexión.

    response = client.put_scaling_policy( PolicyName="HasBacklogWithoutCapacity-ScalingPolicy", ServiceNamespace="sagemaker", # The namespace of the service that provides the resource. ResourceId=resource_id, # Endpoint name ScalableDimension="sagemaker:variant:DesiredInstanceCount", # SageMaker supports only Instance Count PolicyType="StepScaling", # 'StepScaling' or 'TargetTrackingScaling' StepScalingPolicyConfiguration={ "AdjustmentType": "ChangeInCapacity", # Specifies whether the ScalingAdjustment value in the StepAdjustment property is an absolute number or a percentage of the current capacity. "MetricAggregationType": "Average", # The aggregation type for the CloudWatch metrics. "Cooldown": 300, # The amount of time, in seconds, to wait for a previous scaling activity to take effect. "StepAdjustments": # A set of adjustments that enable you to scale based on the size of the alarm breach. [ { "MetricIntervalLowerBound": 0, "ScalingAdjustment": 1 } ] }, )
  2. Cree una alarma con la métrica personalizada CloudWatch . HasBacklogWithoutCapacity Cuando se activa, la alarma inicia la política de escalado previamente definida. Para obtener más información acerca de la métrica HasBacklogWithoutCapacity, consulte Métricas de puntos de conexión de inferencia asíncrona.

    response = cw_client.put_metric_alarm( AlarmName=step_scaling_policy_alarm_name, MetricName='HasBacklogWithoutCapacity', Namespace='AWS/SageMaker', Statistic='Average', EvaluationPeriods= 2, DatapointsToAlarm= 2, Threshold= 1, ComparisonOperator='GreaterThanOrEqualToThreshold', TreatMissingData='missing', Dimensions=[ { 'Name':'EndpointName', 'Value':endpoint_name }, ], Period= 60, AlarmActions=[step_scaling_policy_arn] )

Ahora debería tener una política de escalado y una CloudWatch alarma que amplíen su terminal desde cero instancias siempre que su cola tenga solicitudes pendientes.