View a markdown version of this page

Esegui la distribuzione su più tipi di istanze con pool di istanze - Amazon SageMaker AI

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à.

Esegui la distribuzione su più tipi di istanze con pool di istanze

Quando si implementa un modello su un endpoint di SageMaker intelligenza artificiale, in genere si specifica un singolo tipo di istanza per la variante di produzione. Se quel tipo di istanza non è disponibile nella zona di disponibilità di destinazione, la distribuzione fallisce con un errore di capacità insufficiente (ICE) ed è necessario riprovare manualmente con un tipo di istanza diverso.

Con i pool di istanze, è possibile specificare un elenco ordinato di un massimo di cinque tipi di istanze per una variante di produzione. SageMaker L'intelligenza artificiale tenta di effettuare il provisioning delle istanze a partire dal tipo con la priorità più alta (priorità 1) e torna automaticamente ai tipi con priorità più bassa quando la capacità non è disponibile. Ciò elimina la necessità di riprovare manualmente e migliora la disponibilità degli endpoint.

I pool di istanze supportano endpoint di inferenza in tempo reale e asincroni. È possibile utilizzarli con endpoint a modello singolo e con componenti di inferenza.

I passaggi seguenti descrivono come funziona il provisioning del pool di istanze:

  1. SageMaker L'intelligenza artificiale cerca di effettuare il provisioning delle istanze dal pool con la priorità più alta (priorità 1).

  2. Se l' SageMaker IA rileva un errore di capacità insufficiente (ICE) per il tipo di istanza corrente, torna automaticamente al pool successivo in ordine di priorità.

  3. Ciò continua fino al provisioning del numero richiesto di istanze, all'esaurimento di tutti i pool o al raggiungimento del timeout totale di provisioning (). VariantInstanceProvisionTimeoutInSeconds

Configura un endpoint con pool di istanze

Per utilizzare i pool di istanze, sostituisci il InstanceType parametro nella tua variante di produzione con un InstancePools elenco. Ogni voce specifica un tipo di istanza e una priorità (da 1 a 5, dove 1 è la massima). Opzionalmente, puoi impostare VariantInstanceProvisionTimeoutInSeconds (da 300 a 3600 secondi) per controllare il tempo totale impiegato dall' SageMaker IA per tentare di fornire le istanze in tutti i pool prima che l'operazione abbia esito negativo.

Real-time endpoint con un unico modello

L'esempio seguente crea una configurazione di endpoint con due pool di istanze. Se ml.g6.2xlarge le istanze non sono disponibili, SageMaker AI ricorre a. ml.g6e.2xlarge

import boto3 sagemaker_client = boto3.client("sagemaker") endpoint_config_name = "my-heterog-endpoint-config" sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "AllTraffic", "ModelName": "my-model", "InitialInstanceCount": 2, "InstancePools": [ { "InstanceType": "ml.g6.2xlarge", "Priority": 1, }, { "InstanceType": "ml.g6e.2xlarge", "Priority": 2, }, ], "VariantInstanceProvisionTimeoutInSeconds": 600, } ], ) sagemaker_client.create_endpoint( EndpointName="my-heterog-endpoint", EndpointConfigName=endpoint_config_name, )

Puoi anche utilizzare il ModelNameOverride parametro in ogni pool per specificare un modello diverso ottimizzato per quel tipo di istanza. Ad esempio, è possibile distribuire un modello compilato per GPU su un tipo di istanza e una versione non compilata su un altro.

Real-time endpoint con componenti di inferenza

Quando si utilizzano componenti di inferenza con pool di istanze, sono disponibili due opzioni per definire le specifiche:

  • Singola Specification: utilizza lo stesso modello e la stessa configurazione delle risorse per tutti i tipi di istanze nei pool di istanze dell'endpoint. Funziona quando il modello può essere eseguito su qualsiasi tipo di istanza fornito con gli stessi requisiti di risorse.

  • Multiplo Specifications: utilizza il Specifications parametro (plurale) per definire diverse configurazioni di modelli o risorse per ogni tipo di istanza. Ogni specifica include un InstanceType campo che la mappa a un tipo di istanza nei pool di istanze dell'endpoint.

L'esempio seguente crea un componente di inferenza con specifiche per tipo di istanza:

sagemaker_client.create_inference_component( InferenceComponentName="my-ic", EndpointName="my-heterog-endpoint", VariantName="AllTraffic", Specifications=[ { "InstanceType": "ml.g6.2xlarge", "ModelName": "my-model-g6", "Container": { "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest", }, "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 1, "MinMemoryRequiredInMb": 4096, }, }, { "InstanceType": "ml.g6e.2xlarge", "ModelName": "my-model-g6e", "Container": { "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest", }, "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 1, "MinMemoryRequiredInMb": 8192, }, }, ], RuntimeConfig={ "CopyCount": 2, }, )

Controlla i pool di istanze

Le CloudWatch metriche esistenti aggregate su tutte le istanze in una variante, ad esempio, e Invocations ModelLatencyCPUUtilization, continuano a funzionare allo stesso modo quando si utilizzano i pool di istanze. Inoltre, CloudWatch pubblica queste metriche con una InstanceType dimensione in modo da poter monitorare le prestazioni per ogni tipo di istanza separatamente.

Per-instance-type metriche

Quando una variante di produzione utilizza pool di istanze, le seguenti combinazioni di dimensioni diventano disponibili per il monitoraggio CloudWatch per tipo di istanza:

Combinazione di dimensioni Caso d’uso
EndpointName, VariantName, InstanceType Filtra le metriche a livello di endpoint e di chiamata (ad esempio CPUUtilizationInvocations,ModelLatency) per un tipo di istanza specifico all'interno della variante.
InferenceComponentName, InstanceType Filtra le metriche dei componenti di inferenza per un tipo di istanza specifico. Usalo per confrontare le prestazioni dello stesso componente di inferenza tra diversi tipi di istanza.

Queste dimensioni sono disponibili sia per le metriche standard che per le CloudWatch metriche avanzate. Per l'elenco completo delle metriche disponibili, consulta e. Metriche di Amazon SageMaker AI in Amazon CloudWatch Parametri avanzati di Amazon SageMaker AI per gli endpoint di inferenza

Controlla la distribuzione della flotta

Per vedere il numero attuale di istanze per ogni pool, chiama l'DescribeEndpointAPI. ProductionVariantsNella risposta includi un InstancePools elenco con il conteggio corrente per ogni tipo di istanza. Questo mostra la composizione della flotta dopo il provisioning, incluse eventuali istanze di riserva provenienti da pool con priorità inferiore.

Se si utilizzano componenti di inferenza, la DescribeInferenceComponentrisposta include un PlacementStatus campo nel riepilogo della configurazione di runtime che mostra il conteggio delle copie per tipo di istanza. Utilizzalo per capire come le copie dei componenti di inferenza vengono distribuite tra i tipi di istanze del tuo parco istanze.

Auto-scaling con pool di istanze

Auto-scaling con pool di istanze segue lo stesso processo dell'auto-scaling standard degli endpoint. Registri obiettivi scalabili, definisci politiche di scalabilità e le applichi al tuo endpoint. Per la configurazione generale dell'auto-scaling, vedere. Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon

La differenza fondamentale è il modo in cui l' SageMaker IA effettua il provisioning e rilascia le istanze quando si attiva un evento di scalabilità:

Scalabilità orizzontale (aggiunta di istanze)

SageMaker L'IA effettua il provisioning delle istanze a partire dal pool con la priorità più alta (valore di priorità più basso). Se l' SageMaker IA rileva un errore di capacità insufficiente per il tipo di istanza corrente, torna automaticamente al pool successivo in ordine di priorità. SageMaker L'IA continua a riprovare tra i pool fino al provisioning delle istanze o al raggiungimento del totale. VariantInstanceProvisionTimeoutInSeconds

Scalabilità (rimozione delle istanze)

SageMaker L'IA rilascia istanze a partire dal pool con la priorità più bassa (valore di priorità più alta). I tipi di istanza preferiti con priorità più alta vengono mantenuti in esecuzione il più a lungo possibile e le istanze di fallback vengono rilasciate per prime.

Utilizza metriche di scalabilità predefinite

Metriche di scalabilità predefinite, ad esempio SageMakerVariantInvocationsPerInstance continuare a funzionare con i pool di istanze. Queste metriche si aggregano per tutti i tipi di istanza della variante, quindi il comportamento di scalabilità è lo stesso di un endpoint standard. Questo è l'approccio più semplice quando tutti i tipi di istanze nei pool hanno una capacità simile.

Per il monitoraggio degli obiettivi e la configurazione della politica di scalabilità dei passaggi, vedereRidimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon.

Utilizza metriche ponderate personalizzate per flotte miste

Se i tuoi pool di istanze contengono tipi di istanze con capacità di calcolo diverse, puoi utilizzare la matematica CloudWatch metrica per creare un segnale di scala ponderato. In questo modo puoi controllare in che misura il carico di ogni tipo di istanza contribuisce alla decisione generale sulla scalabilità.

L'esempio seguente crea una politica di tracciamento degli obiettivi che utilizza una media ponderata ConcurrentRequestsPerModel tra due tipi di istanze. I pesi determinano la sensibilità della politica di scalabilità al carico di ciascun tipo:

import boto3 aas_client = boto3.client("application-autoscaling") # Register the scalable target aas_client.register_scalable_target( ServiceNamespace="sagemaker", ResourceId="endpoint/my-heterog-endpoint/variant/AllTraffic", ScalableDimension="sagemaker:variant:DesiredInstanceCount", MinCapacity=1, MaxCapacity=10, ) # Define target tracking policy with weighted metric math aas_client.put_scaling_policy( PolicyName="weighted-concurrent-requests", ServiceNamespace="sagemaker", ResourceId="endpoint/my-heterog-endpoint/variant/AllTraffic", ScalableDimension="sagemaker:variant:DesiredInstanceCount", PolicyType="TargetTrackingScaling", TargetTrackingScalingPolicyConfiguration={ "TargetValue": 10.0, "CustomizedMetricSpecification": { "Metrics": [ { "Id": "cr_g6", "Label": "ConcurrentRequests-g6-2xlarge", "MetricStat": { "Metric": { "Namespace": "AWS/SageMaker", "MetricName": "ConcurrentRequestsPerModel", "Dimensions": [ {"Name": "EndpointName", "Value": "my-heterog-endpoint"}, {"Name": "VariantName", "Value": "AllTraffic"}, {"Name": "InstanceType", "Value": "ml.g6.2xlarge"}, ], }, "Stat": "Average", }, "ReturnData": False, }, { "Id": "cr_g6e", "Label": "ConcurrentRequests-g6e-2xlarge", "MetricStat": { "Metric": { "Namespace": "AWS/SageMaker", "MetricName": "ConcurrentRequestsPerModel", "Dimensions": [ {"Name": "EndpointName", "Value": "my-heterog-endpoint"}, {"Name": "VariantName", "Value": "AllTraffic"}, {"Name": "InstanceType", "Value": "ml.g6e.2xlarge"}, ], }, "Stat": "Average", }, "ReturnData": False, }, { "Id": "weighted_avg", "Label": "WeightedConcurrentRequests", "Expression": "0.5 * cr_g6 + 0.5 * cr_g6e", "ReturnData": True, }, ], }, }, )

In questo esempio, cr_g6e recuperate la cr_g6 metrica per tipo di istanza. ConcurrentRequestsPerModel L'weighted_avgespressione li combina con pesi uguali (0,5/0,5). Modifica i pesi per modificare il modo in cui la policy risponde al caricamento su ogni tipo di istanza.

In che modo i pesi influiscono sul comportamento di scalabilità: un peso maggiore su un tipo di istanza significa che la politica di scalabilità è più sensibile al carico di quel tipo, non inferiore. Il segnale del tipo con ponderazione inferiore viene attenuato, in modo che possa funzionare a un utilizzo più elevato prima di attivare un evento di scalabilità.

Strategia del peso High-priority tolleranza di tipo Low-priority tolleranza di tipo Ideale per
Maggiore peso sull'alta priorità (0,7/ 0,3) Inferiore (protetto) Più alto (fa più caldo) Protezione dal sovraccarico delle istanze costose o ad alta capacità
Uguale (0,5/0,5) Bilanciato Bilanciato Raccomandazione predefinita per la maggior parte dei carichi di lavoro
Maggiore peso su sistemi a bassa priorità (0,3/ 0,7) Più alto (diventa più caldo) Inferiore (protetto) Impedire la saturazione delle istanze di fallback più piccole

Per ulteriori informazioni sulle metriche personalizzate con auto-scaling, consulta. Definisci una metrica personalizzata (CloudWatch metrica: CPUUtilization)