Mettre automatiquement à l'échelle un point de terminaison asynchrone - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mettre automatiquement à l'échelle un point de terminaison asynchrone

Amazon SageMaker prend en charge le dimensionnement automatique (autoscaling) de votre point de terminaison asynchrone. La mise à l'échelle automatique ajuste dynamiquement le nombre d'instances allouées pour un modèle en réponse aux modifications de la charge de travail. Contrairement aux autres modèles hébergés pris SageMaker en charge par Amazon, Asynchronous Inference vous permet également de réduire à zéro vos instances de points de terminaison asynchrones. Les requêtes reçues lorsqu'il n'y a aucune instance sont mises en file d'attente pour traitement une fois que le point de terminaison augmente.

Pour mettre à l'échelle automatiquement votre point de terminaison asynchrone, vous devez au minimum :

  • Enregistrer un modèle déployé (variante de production).

  • Définir une politique de mise à l'échelle.

  • Appliquer la politique de scalabilité automatique.

Avant de pouvoir utiliser l'autoscaling, vous devez avoir déjà déployé un modèle sur un point de SageMaker terminaison. Les modèles déployés sont appelés variante de production. Voir Déployer le modèle vers les services SageMaker d'hébergement pour plus d'informations sur le déploiement d'un modèle sur un point de terminaison. Pour spécifier les métriques et les valeurs cibles d'une politique de mise à l'échelle, configurez une politique de mise à l'échelle. Pour savoir comment définir une politique de mise à l'échelle, veuillez consulter Définition d'une stratégie de mise à l'échelle. Après avoir enregistré votre modèle et défini une stratégie de mise à l'échelle, appliquez cette stratégie au modèle enregistré. Pour savoir comment appliquer la politique de mise à l'échelle, veuillez consulter Application d'une stratégie de mise à l'échelle.

Vous pouvez définir une politique de mise à l'échelle supplémentaire et facultative pour augmenter votre point de terminaison à la réception d'une demande, après que ce dernier a été réduit à zéro. Pour plus d'informations, consultez Facultatif : définition d'une politique de mise à l'échelle pour augmenter à partir de zéro pour les nouvelles demandes. Si vous ne spécifiez pas cette politique facultative, votre point de terminaison ne démarre la mise à l'échelle à partir de zéro que lorsque le nombre de demandes en attente dépasse la valeur de suivi cible.

Pour plus de détails sur les autres prérequis et composants utilisés avec le dimensionnement automatique, consultez la section Conditions préalables de la documentation sur le SageMaker dimensionnement automatique.

Note

Si vous associez plusieurs politiques de dimensionnement au même groupe de dimensionnement automatique, vous risquez de rencontrer des conflits de dimensionnement. Lorsqu'un conflit se produit, Amazon EC2 Auto Scaling choisit la politique qui fournit la plus grande capacité à la fois de mise à l'échelle horizontale et de mise à l'échelle horizontale. Pour plus d'informations sur ce comportement, consultez Plusieurs politiques de mise à l'échelle dynamique dans la documentation Amazon EC2 Auto Scaling.

Définition d'une stratégie de mise à l'échelle

Pour spécifier les métriques et les valeurs cibles d'une stratégie de dimensionnement, vous configurez une stratégie de dimensionnement avec suivi de cible. Définissez la politique de mise à l'échelle sous forme de bloc JSON dans un fichier texte. Vous utilisez ce fichier texte lorsque vous appelez l'API Application Auto Scaling AWS CLI ou l'API Application Auto Scaling. Pour plus d'informations sur la syntaxe de la configuration d'une politique, veuillez consulter TargetTrackingScalingPolicyConfiguration dans la Référence de l'API Application Auto Scaling.

Pour les points de terminaison asynchrones, il SageMaker est vivement recommandé de créer une configuration de politique pour le dimensionnement du suivi des cibles pour une variante. Dans cet exemple de configuration, nous utilisons une métrique personnalisée, CustomizedMetricSpecification, appelée 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', } }

Définition d'une politique de mise à l'échelle qui met à l'échelle jusqu'à zéro

La section suivante vous montre comment définir et enregistrer votre variante de point de terminaison avec la scalabilité automatique des applications à l'aide du kit AWS SDK for Python (Boto3). Après avoir défini un objet client de bas niveau représentant la scalabilité automatique des applications avec Boto3, nous utilisons la méthode RegisterScalableTarget pour enregistrer la variante de production. Nous défini MinCapacity sur 0 car l'inférence asynchrone vous permet d'effectuer une mise à l'échelle automatique à 0 lorsqu'il n'y a aucune requête à traiter.

# 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 )

Pour obtenir une description détaillée de l'API Application Autoscaling, veuillez consulter la documentation sur Application Scaling de Boto3.

Facultatif : définition d'une politique de mise à l'échelle pour augmenter à partir de zéro pour les nouvelles demandes

Vous pouvez avoir un cas d'utilisation avec des demandes sporadiques ou des périodes avec un faible nombre de demandes. Si votre point de terminaison a été réduit à zéro instance au cours de ces périodes, votre point de terminaison ne sera pas de nouveau augmenté tant que le nombre de demandes dans la file d'attente ne dépassera pas la cible spécifiée dans votre politique de mise à l'échelle. Cela peut entraîner de longs délais d'attente pour les demandes dans la file d'attente. La section suivante explique comment créer une politique de mise à l'échelle supplémentaire pour augmenter votre point de terminaison à partir de zéro instance après réception de toute nouvelle demande dans la file d'attente. Votre point de terminaison sera en mesure de répondre aux nouvelles demandes plus rapidement au lieu d'attendre que la taille de la file d'attente dépasse la cible.

Pour créer une politique de mise à l'échelle pour votre point de terminaison afin d'augmenter à partir de zéro instance, procédez comme suit :

  1. Créez une politique de mise à l'échelle qui définit le comportement souhaité, qui consiste à augmenter la taille de votre point de terminaison lorsqu'il se trouve à zéro instance, mais que des demandes sont en file d'attente. Ce qui suit montre comment définir une politique de mise à l'échelle appelée HasBacklogWithoutCapacity-ScalingPolicy à l'aide du kit AWS SDK for Python (Boto3). Lorsque la file d'attente est supérieure à zéro et que le nombre actuel d'instances pour votre point de terminaison est également nul, la politique augmente la taille de votre point de terminaison. Dans tous les autres cas, la politique n'a aucune incidence sur la mise à l'échelle de votre point de terminaison.

    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. Créez une CloudWatch alarme avec la métrique personnaliséeHasBacklogWithoutCapacity. Lorsqu'elle est déclenchée, l'alarme initie la politique de mise à l'échelle que vous avez définie précédemment. Pour plus d'informations sur la métrique HasBacklogWithoutCapacity, consultez Métriques de point de terminaison d'inférence asynchrone.

    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] )

Vous devriez désormais disposer d'une politique de dimensionnement et CloudWatch d'une alarme qui permettent de faire évoluer votre terminal à partir de zéro instance chaque fois que votre file d'attente contient des demandes en attente.