Escalabilidade automática de um endpoint assíncrono
O Amazon SageMaker oferece suporte ao ajuste de escala automática (Auto Scaling) do seu endpoint assíncrono. A escalabilidade automática ajusta dinamicamente o número de instâncias provisionadas para um modelo em resposta às alterações na workload. Ao contrário de outros modelos hospedados compatíveis com o Amazon SageMaker, com a inferência assíncrona você também pode reduzir a escala de suas instâncias de endpoints assíncronos para zero. As solicitações recebidas quando há zero instâncias na fila para processamento quando o endpoint aumenta a escala verticalmente.
Para escalar automaticamente seu endpoint assíncrono, você deve, no mínimo:
Registrar um modelo implantado (variante de produção).
Definir uma política de escalabilidade
Aplicar a política de auto scaling automático.
Antes de poder usar o auto scaling, você já deve ter implantado um modelo para um endpoint do SageMaker. Os modelos implantados são referidos como uma variante de produção. Consulte Implantar o modelo nos serviços de hospedagem do SageMaker para obter mais informações sobre a implantação de modelo em um endpoint. Para especificar as métricas e os valores de destino de uma política de escalabilidade, você deve configurar uma política de escalabilidade. Para mais informações sobre como definir uma política de escalabilidade, consulte Definindo uma política de escalabilidade. Depois de registrar o modelo e definir uma política de escalabilidade, aplique a política de escalabilidade ao modelo registrado. Para mais informações sobre como aplicar uma política de escalabilidade, consulte Aplicar uma política de escalabilidade.
Para obter mais informações sobre como definir uma política de escalabilidade adicional opcional que aumenta a escala do seu endpoint ao receber uma solicitação após seu endpoint ter sido reduzido para zero, consulte Opcional: defina uma política de escalabilidade verticalmente de zero para novas solicitações. Se você não especificar essa política opcional, seu endpoint só iniciará o aumento da escala verticalmente a partir de zero depois que o número de solicitações de backlog exceder o valor de rastreamento de destino.
Para obter detalhes sobre outros pré-requisitos e componentes usados com dimensionamento automático, consulte a seção de Pré-requisitos na documentação de Auto Scaling do SageMaker.
nota
Se você anexar várias políticas de escalabilidade ao mesmo grupo do AutoScaling, você pode ter conflitos de escalabilidade. Quando ocorre um conflito, o Amazon EC2 Auto Scaling escolhe a política que provisiona a maior capacidade tanto para aumentar a escala horizontalmente e para reduzir a escala horizontalmente. Para obter mais informações sobre esse comportamento, consulte Várias políticas de escalabilidade dinâmica na documentação do Amazon EC2 Auto Scaling.
Definir uma política de escalabilidade
Para especificar as métricas e os valores de destino de uma política de escalabilidade, você precisa configurar uma política de escalabilidade de rastreamento de destino. Defina a política de escalabilidade como um bloco JSON em um arquivo de texto. Você pode usar esse arquivo de texto ao invocar a AWS CLI ou a API do Application Auto Scaling. Para mais informações sobre a sintaxe de configurações de política, consulte TargetTrackingScalingPolicyConfiguration
na Referência de API de Auto Scaling do Aplicativo.
Para endpoints assíncronos, o SageMaker recomenda enfaticamente que você crie uma configuração de política para escalar o rastreamento de destino para uma variante. Neste exemplo de configuração, usamos uma métrica personalizada, CustomizedMetricSpecification
, chamada de 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', } }
Defina uma política de escalabilidade dimensionada para zero
Veja a seguir como definir e registrar sua variante de endpoint com o dimensionamento automático do aplicativo usando o AWS SDK for Python (Boto3). Depois de definir um objeto cliente de baixo nível representando o dimensionamento automático do aplicativo com o Boto3, usamos o método RegisterScalableTarget
MinCapacity
como 0 porque a inferência assíncrona permite a escalabilidade automática para 0 quando não há solicitações para processar.
# 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 obter uma descrição detalhada sobre a API com dimensionamento automático de aplicativos, consulte a documentação do Escalonamento de Aplicativos
Opcional: defina uma política de escalabilidade verticalmente de zero para novas solicitações
Você pode ter um caso de uso em que tenha solicitações esporádicas ou períodos com baixo número de solicitações. Se a escala do seu endpoint tiver sido reduzida verticalmente para zero instâncias durante esses períodos, ele não aumentará a escala verticalmente outra vez até que o número de solicitações na fila exceda a meta especificada em sua política de escalabilidade. Isso pode resultar em longos tempos de espera para solicitações na fila. A seção a seguir mostra como criar uma política de escalabilidade adicional que escale seu endpoint a partir de zero instâncias após receber qualquer nova solicitação na fila. Seu endpoint poderá responder a novas solicitações mais rapidamente, em vez de esperar que o tamanho da fila exceda a meta.
Para criar uma política de escalabilidade para seu endpoint que aumente a escala verticalmente a partir de zero instâncias, faça o seguinte:
-
Crie uma política de escalabilidade que defina o comportamento desejado, que é escalar seu endpoint quando ele está em zero instâncias, mas tem solicitações na fila. A seguir, mostramos como definir uma política de escalabilidade chamada de
HasBacklogWithoutCapacity-ScalingPolicy
usando o AWS SDK for Python (Boto3). Quando a fila é maior que zero e a contagem de instâncias atuais do seu endpoint também é zero, a política aumenta seu endpoint. Em todos os outros casos, a política não afeta o escalonamento do seu endpoint.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 } ] }, )
-
Crie um alarme do CloudWatch com a métrica personalizada
HasBacklogWithoutCapacity
. Quando acionado, o alarme inicia a política de escalabilidade definida anteriormente. Para obter mais informações sobre métricas doHasBacklogWithoutCapacity
, consulte Métricas de endpoint de inferência assí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] )
Agora você deve ter uma política de escalabilidade e um alarme do CloudWatch que escalem seu endpoint a partir de zero instâncias sempre que a sua fila tiver solicitações pendentes.