Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Scalabilità automatica di un endpoint asincrono

Amazon SageMaker supporta il ridimensionamento automatico (autoscaling) del tuo endpoint asincrono. Auto Scaling modifica dinamicamente il numero di istanze assegnate a un modello in risposta alle variazioni nel carico di lavoro. A differenza di altri modelli ospitati SageMaker supportati da Amazon, con Asynchronous Inference puoi anche ridurre a zero le tue istanze di endpoint asincrone. Le richieste ricevute quando non ci sono istanze vengono messe in coda per l'elaborazione una volta che l'endpoint è stato dimensionato.

Per scalare automaticamente l'endpoint asincrono è necessario almeno:

  • Registrare un modello distribuito (variante di produzione).

  • Definizione di una policy di dimensionamento.

  • Applica la politica di scalabilità automatica.

Prima di poter utilizzare la scalabilità automatica, è necessario aver già distribuito un modello su un endpoint. SageMaker I modelli distribuiti sono indicati come varianti di produzione. Vedi Deploy the Model to SageMaker Hosting Services per ulteriori informazioni sulla distribuzione di un modello su un endpoint. Per specificare i parametri e i valori di target per una policy di dimensionamento, configuri una policy di dimensionamento di monitoraggio. Per informazioni su come definire una policy di dimensionamento, vedere Definire una policy di dimensionamento. Dopo la registrazione di un modello e la definizione di una policy di dimensionamento, applica la policy di dimensionamento al modello registrato. Per informazioni su come applicare una policy di dimensionamento, vedere Applicare una policy di dimensionamento.

Per ulteriori informazioni su come definire una policy di dimensionamento aggiuntiva opzionale che aumenti l'endpoint dopo aver ricevuto una richiesta dopo che l'endpoint è stato ridimensionato a zero, consulta Facoltativo: definire una policy di dimensionamento che parta da zero per le nuove richieste. Se non specifichi questa policy opzionale, l'endpoint avvia la scalabilità da zero solo dopo che il numero di richieste di backlog supera il valore di tracciamento previsto.

Per i dettagli su altri prerequisiti e componenti utilizzati con la scalabilità automatica, consulta la sezione Prerequisiti nella documentazione sulla scalabilità automatica. SageMaker

Nota

Se si associano più policy di dimensionamento allo stesso gruppo di dimensionamento automatico, è possibile che si verifichino conflitti di ridimensionamento. Quando si verifica un conflitto, Dimensionamento automatico Amazon EC2 sceglie la policy che offre la capacità maggiore per aumentare o ridurre orizzontalmente. Per ulteriori informazioni su questo comportamento, consulta Policy di dimensionamento dinamico multiplo nella documentazione di Dimensionamento automatico Amazon EC2.

Definizione di una policy di dimensionamento

Per specificare i parametri e i valori di target per una policy di dimensionamento, configuri una policy di dimensionamento di monitoraggio dei target. Definisci la policy di dimensionamento come un blocco JSON in un file di testo. Si utilizza quel file di testo quando si richiama l'API AWS CLI Application Auto Scaling. Per ulteriori informazioni sulla sintassi della configurazione della policy, consulta TargetTrackingScalingPolicyConfiguration in Riferimento API Auto Scaling dell'applicazione.

Per gli endpoint asincroni, si consiglia SageMaker vivamente di creare una configurazione di policy per il ridimensionamento del target-tracking per una variante. In questo esempio di configurazione, utilizziamo un parametro personalizzato, CustomizedMetricSpecification, chiamato 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', } }

Definisci una policy di dimensionamento che porti a zero

Di seguito viene illustrato come definire e registrare la variante di endpoint con il dimensionamento automatico delle applicazioni utilizzando AWS SDK for Python (Boto3). Dopo aver definito un oggetto client di basso livello che rappresenta il dimensionamento automatico dell'applicazione con Boto3, utilizziamo il metodo RegisterScalableTarget per registrare la variante di produzione. Abbiamo impostato MinCapacity su 0 perché Inferenza asincrona consente di scalare automaticamente a 0 quando non ci sono richieste da elaborare.

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

Per una descrizione dettagliata dell'API di dimensionamento automatico dell’applicazione, consulta la documentazione di Dimensionamento dell’applicazione Boto3.

Facoltativo: definire una policy di dimensionamento che parta da zero per le nuove richieste

Potresti avere un caso d'uso in cui hai richieste sporadiche o periodi con un numero ridotto di richieste. Se l'endpoint è stato ridimensionato a zero istanze durante questi periodi, l'endpoint non aumenterà nuovamente fino a quando il numero di richieste in coda non supererà l'obiettivo specificato nella policy di dimensionamento. Ciò può comportare lunghi tempi di attesa per le richieste in coda. La sezione seguente mostra come creare una policy di dimensionamento aggiuntiva che aumenti l'endpoint partendo da zero istanze dopo aver ricevuto qualsiasi nuova richiesta in coda. L'endpoint sarà in grado di rispondere alle nuove richieste più rapidamente invece di attendere che la dimensione della coda superi l'obiettivo.

Per creare una policy di dimensionamento il tuo endpoint che parta da zero istanze, procedi come segue:

  1. Crea una policy di dimensionamento che definisca il comportamento desiderato, ovvero quello di scalare l'endpoint quando è a zero istanze ma ha richieste in coda. Di seguito viene illustrato come definire una policy di dimensionamento chiamata HasBacklogWithoutCapacity-ScalingPolicy utilizzando AWS SDK for Python (Boto3). Quando la coda è maggiore di zero e anche il numero corrente di istanze per l'endpoint è pari a zero, la policy ridimensiona l'endpoint verso l'alto. In tutti gli altri casi, la policy non influisce sulla dimensionamento dell'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 } ] }, )
  2. Crea un allarme con la metrica personalizzata. CloudWatch HasBacklogWithoutCapacity Quando viene attivato, l'allarme avvia la policy di dimensionamento precedentemente definita. Per ulteriori informazioni sul parametro HasBacklogWithoutCapacity, consulta Parametri degli endpoint di inferenza asincrona.

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

Ora dovresti disporre di una politica di scalabilità e di un CloudWatch allarme che consentano di scalare l'endpoint partendo da zero ogni volta che la coda ha richieste in sospeso.