Politiche di scalabilità automatica per l'implementazione del modello di inferenza HyperPod - 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à.

Politiche di scalabilità automatica per l'implementazione del modello di inferenza HyperPod

Le seguenti informazioni forniscono esempi pratici e configurazioni per l'implementazione di politiche di scalabilità automatica nelle implementazioni di modelli di inferenza Amazon SageMaker HyperPod .

Scoprirai come configurare il dimensionamento automatico utilizzando autoScalingSpec integrato nei file YAML di implementazione e come creare configurazioni ScaledObject KEDA standalone per scenari di dimensionamento avanzati. Gli esempi riguardano i trigger di scalabilità basati su CloudWatch parametri, lunghezze delle code di Amazon SQS, query Prometheus e parametri di utilizzo delle risorse come CPU e memoria.

Utilizzo di YAML nella distribuzione autoScalingSpec

Amazon SageMaker HyperPod Inference Operator offre funzionalità di scalabilità automatica integrate per le implementazioni di modelli utilizzando i parametri di CloudWatch Amazon Managed Prometheus (AMP). Il file YAML di implementazione di esempio seguente include una sezione autoScalingSpec che definisce i valori di configurazione per scalare l’implementazione del modello.

apiVersion: inference.sagemaker.aws.amazon.com/v1 kind: JumpStartModel metadata: name: deepseek-sample624 namespace: ns-team-a spec: sageMakerEndpoint: name: deepsek7bsme624 model: modelHubName: SageMakerPublicHub modelId: deepseek-llm-r1-distill-qwen-1-5b modelVersion: 2.0.4 server: instanceType: ml.g5.8xlarge metrics: enabled: true environmentVariables: - name: SAMPLE_ENV_VAR value: "sample_value" maxDeployTimeInSeconds: 1800 tlsConfig: tlsCertificateOutputS3Uri: "s3://{USER}-tls-bucket-{REGION}/certificates" autoScalingSpec: minReplicaCount: 0 maxReplicaCount: 5 pollingInterval: 15 initialCooldownPeriod: 60 cooldownPeriod: 120 scaleDownStabilizationTime: 60 scaleUpStabilizationTime: 0 cloudWatchTrigger: name: "SageMaker-Invocations" namespace: "AWS/SageMaker" useCachedMetrics: false metricName: "Invocations" targetValue: 10.5 activationTargetValue: 5.0 minValue: 0.0 metricCollectionStartTime: 300 metricCollectionPeriod: 30 metricStat: "Sum" metricType: "Average" dimensions: - name: "EndpointName" value: "deepsek7bsme624" - name: "VariantName" value: "AllTraffic" prometheusTrigger: name: "Prometheus-Trigger" useCachedMetrics: false serverAddress: http://<prometheus-host>:9090 query: sum(rate(http_requests_total{deployment="my-deployment"}[2m])) targetValue: 10.0 activationTargetValue: 5.0 namespace: "namespace" customHeaders: "X-Client-Id=cid" metricType: "Value"

Spiegazione dei campi utilizzati nel file YAML di implementazione

minReplicaCount (Facoltativo, Numero intero)

Specifica il numero minimo di repliche di implementazione del modello da mantenere nel cluster. Durante gli eventi di riduzione verticale, l’implementazione si riduce fino al numero minimo di pod indicato. Il valore deve essere maggiore o uguale a 0. Default: 1.

maxReplicaCount (Facoltativo, Numero intero)

Specifica il numero massimo di repliche di implementazione del modello da mantenere nel cluster. Il valore deve essere maggiore o uguale a minReplicaCount. Durante gli eventi di aumento verticale, l’implementazione aumenta fino al numero massimo di pod indicato. Impostazione predefinita: 5.

pollingInterval (Facoltativo, Numero intero)

L’intervallo di tempo in secondi per le query sulle metriche. Minimo: 0 Valore predefinito: 30 secondi.

cooldownPeriod (Facoltativo, Numero intero)

Il tempo di attesa in secondi prima di passare da 1 a 0 pod durante un evento di riduzione verticale. Si applica solo quando minReplicaCount è impostato su 0. Minimo: 0 Impostazione predefinita: 300 secondi.

initialCooldownPeriod (Facoltativo, Numero intero)

Il tempo di attesa in secondi prima di passare da 1 a 0 pod durante l’implementazione iniziale. Si applica solo quando minReplicaCount è impostato su 0. Minimo: 0 Impostazione predefinita: 300 secondi.

scaleDownStabilizationTime (Facoltativo, Numero intero)

La finestra temporale di stabilizzazione in secondi tra l’attivazione di un trigger di riduzione verticale e l’effettiva riduzione verticale. Minimo: 0 Impostazione predefinita: 300 secondi.

scaleUpStabilizationTime (Facoltativo, Numero intero)

La finestra temporale di stabilizzazione in secondi tra l’attivazione di un trigger di aumento verticale e l’effettivo aumento verticale. Minimo: 0 Impostazione predefinita: 0 secondi.

cloudWatchTrigger

La configurazione di attivazione per le metriche utilizzate nelle decisioni di scalabilità automatica. CloudWatch In cloudWatchTrigger sono disponibili i seguenti campi:

  • name(Facoltativo, stringa): nome del trigger. CloudWatch Se non viene fornito, utilizza il formato predefinito: < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics (Facoltativo, Booleano): determina se memorizzare nella cache le metriche richieste da KEDA. KEDA esegue query sulle metriche utilizzando pollingInterval, mentre Horizontal Pod Autoscaler (HPA) richiede le metriche da KEDA ogni 15 secondi. Se impostata su true, le metriche sottoposte a query vengono memorizzate nella cache e utilizzate per soddisfare le richieste HPA. Default: true.

  • namespace(Obbligatorio, String) - Lo spazio dei CloudWatch nomi per la metrica da interrogare.

  • metricName(Obbligatorio, String): il nome della metrica. CloudWatch

  • dimensions (Facoltativo, Elenco): l’elenco delle dimensioni per la metrica. Ogni dimensione include un nome (nome della dimensione - Stringa) e un valore (valore della dimensione - Stringa).

  • targetValue(Obbligatorio, Float): il valore target per la CloudWatch metrica utilizzata nelle decisioni di scalabilità automatica.

  • activationTargetValue(Facoltativo, Float): il valore target per la CloudWatch metrica utilizzata durante la scalatura da 0 a 1 pod. Si applica solo quando minReplicaCount è impostato su 0. Impostazione predefinita: 0.

  • minValue(Facoltativo, Float): il valore da utilizzare quando la CloudWatch query non restituisce dati. Impostazione predefinita: 0.

  • metricCollectionStartTime(Facoltativo, Integer): l'ora di inizio della query metrica, calcolata come T-Time. metricCollectionStart Deve essere maggiore o uguale a. metricCollectionPeriod Impostazione predefinita: 300 secondi.

  • metricCollectionPeriod (Facoltativo, Numero intero): la durata della query della metrica in secondi. Deve essere un valore CloudWatch supportato (1, 5, 10, 30 o un multiplo di 60). Impostazione predefinita: 300 secondi.

  • metricStat(Facoltativo, String): il tipo di statistica per la CloudWatch query. Default: Average.

  • metricType (Facoltativo, Stringa): definisce il modo in cui la metrica viene utilizzata per i calcoli di dimensionamento. Default: Average. Valori consentiti: Average e Value.

    • Media: repliche desiderate = ceil (valore metrica)/(targetValue)

    • Valore: repliche desiderate = (repliche correnti) × ceil (valore metrica)/(targetValue)

prometheusTrigger

La configurazione dei trigger per le metriche di Amazon Managed Prometheus (AMP) utilizzate nelle decisioni di dimensionamento automatico. In prometheusTrigger sono disponibili i seguenti campi:

  • name(Facoltativo, String): nome del CloudWatch trigger. Se non viene fornito, utilizza il formato predefinito: < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics (Facoltativo, Booleano): determina se memorizzare nella cache le metriche richieste da KEDA. KEDA esegue query sulle metriche utilizzando pollingInterval, mentre Horizontal Pod Autoscaler (HPA) richiede le metriche da KEDA ogni 15 secondi. Se impostata su true, le metriche sottoposte a query vengono memorizzate nella cache e utilizzate per soddisfare le richieste HPA. Default: true.

  • serverAddress (Obbligatorio, Stringa): l’indirizzo del server AMP. È necessario utilizzare il formato: <https://aps-workspaces.<region>.amazonaws.com/workspaces/<workspace_id>

  • query (Obbligatorio, Stringa): la query PromQL utilizzata per la metrica. Deve restituire un valore scalare.

  • targetValue(Obbligatorio, Float): il valore target per la CloudWatch metrica utilizzata nelle decisioni di scalabilità automatica.

  • activationTargetValue(Facoltativo, Float): il valore target per la CloudWatch metrica utilizzata durante la scalatura da 0 a 1 pod. Si applica solo quando minReplicaCount è impostato su 0. Impostazione predefinita: 0.

  • namespace (Facoltativo, Stringa): il namespace da utilizzare per le query con namespace. Impostazione predefinita: stringa vuota ("").

  • customHeaders (Facoltativo, Stringa): intestazioni personalizzate da includere quando si esegue una query sull’endpoint Prometheus. Impostazione predefinita: stringa vuota (“”).

  • metricType (Facoltativo, Stringa): definisce il modo in cui la metrica viene utilizzata per i calcoli di dimensionamento. Default: Average. Valori consentiti: Average e Value.

    • Media: repliche desiderate = ceil (valore metrica)/(targetValue)

    • Valore: repliche desiderate = (repliche correnti) × ceil (valore metrica)/(targetValue)

Utilizzo delle definizioni yaml KEDA ScaledObject tramite kubectl

Oltre a configurare la scalabilità automatica tramite la autoScalingSpec sezione YAML della distribuzione, è possibile creare e applicare definizioni KEDA YAML autonome utilizzando kubectl. ScaledObject

Questo approccio offre una maggiore flessibilità in scenari di dimensionamento complessi e consente di gestire le policy di dimensionamento automatico indipendentemente dalle implementazioni dei modelli. ScaledObjectLe configurazioni KEDA supportano un'ampia gamma di trigger di scalabilità tra cui metriche, lunghezze delle code Amazon SQS CloudWatch , query Prometheus e metriche basate sulle risorse come l'utilizzo della CPU e della memoria. È possibile applicare queste configurazioni alle implementazioni di modelli esistenti facendo riferimento al nome della distribuzione nella sezione delle specifiche. scaleTargetRef ScaledObject

Nota

Assicurati che il ruolo di operatore keda fornito durante l'installazione dell'operatore HyperPod Inference disponga delle autorizzazioni adeguate per interrogare le metriche definite nei trigger degli oggetti in scala.

CloudWatch metriche

La seguente policy KEDA yaml utilizza le CloudWatch metriche come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il trigger è disponibile all'indirizzo https://keda. aws-cloudwatch sh/docs/2.17/scalers/aws-cloudwatch/.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: invocations-scaledobject # name of the scaled object that will be created by this namespace: ns-team-a # namespace that this scaled object targets spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: $DEPLOYMENT_NAME # name of the model deployment minReplicaCount: 1 # minimum number of pods to be maintained maxReplicaCount: 4 # maximum number of pods to scale to pollingInterval: 10 triggers: - type: aws-cloudwatch metadata: namespace: AWS/SageMaker metricName: Invocations targetMetricValue: "1" minMetricValue: "1" awsRegion: "us-west-2" dimensionName: EndpointName;VariantName dimensionValue: $ENDPOINT_NAME;$VARIANT_NAME metricStatPeriod: "30" # seconds metricStat: "Sum" identityOwner: operator

Metriche Amazon SQS

La policy yaml KEDA seguente utilizza le metriche di Amazon SQS come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il aws-cloudwatch trigger è disponibile all'indirizzo https://keda. sh/docs/2.17/scalers/aws-sqs/.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: invocations-scaledobject # name of the scaled object that will be created by this namespace: ns-team-a # namespace that this scaled object targets spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: $DEPLOYMENT_NAME # name of the model deployment minReplicaCount: 1 # minimum number of pods to be maintained maxReplicaCount: 4 # maximum number of pods to scale to pollingInterval: 10 triggers: - type: aws-sqs-queue metadata: queueURL: https://sqs.eu-west-1.amazonaws.com/account_id/QueueName queueLength: "5" # Default: "5" awsRegion: "us-west-1" scaleOnInFlight: true identityOwner: operator

Parametri Prometheus

La policy yaml KEDA seguente utilizza le metriche di Prometheus come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il aws-cloudwatch trigger è disponibile all'indirizzo https://keda. sh/docs/2.17/scalers/prometheus/.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: invocations-scaledobject # name of the scaled object that will be created by this namespace: ns-team-a # namespace that this scaled object targets spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: $DEPLOYMENT_NAME # name of the model deployment minReplicaCount: 1 # minimum number of pods to be maintained maxReplicaCount: 4 # maximum number of pods to scale to pollingInterval: 10 triggers: - type: prometheus metadata: serverAddress: http://<prometheus-host>:9090 query: avg(rate(http_requests_total{deployment="$DEPLOYMENT_NAME"}[2m])) # Note: query must return a vector/scalar single element response threshold: '100.50' namespace: example-namespace # for namespaced queries, eg. Thanos customHeaders: X-Client-Id=cid,X-Tenant-Id=tid,X-Organization-Id=oid # Optional. Custom headers to include in query. In case of auth header, use the custom authentication or relevant authModes. unsafeSsl: "false" # Default is `false`, Used for skipping certificate check when having self-signed certs for Prometheus endpoint timeout: 1000 # Custom timeout for the HTTP client used in this scaler identityOwner: operator

Parametri CPU

La policy yaml KEDA seguente utilizza le metriche cpu come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il aws-cloudwatch trigger è disponibile all'indirizzo https://keda. sh/docs/2.17/scalers/prometheus/.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: invocations-scaledobject # name of the scaled object that will be created by this namespace: ns-team-a # namespace that this scaled object targets spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: $DEPLOYMENT_NAME # name of the model deployment minReplicaCount: 1 # minimum number of pods to be maintained maxReplicaCount: 4 # maximum number of pods to scale to pollingInterval: 10 triggers: - type: cpu metricType: Utilization # Allowed types are 'Utilization' or 'AverageValue' metadata: value: "60" containerName: "" # Optional. You can use this to target a specific container

Parametri della memoria

La policy yaml KEDA seguente utilizza la query delle metriche Prometheus come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il aws-cloudwatch trigger è disponibile all'indirizzo https://keda. sh/docs/2.17/scalers/prometheus/.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: invocations-scaledobject # name of the scaled object that will be created by this namespace: ns-team-a # namespace that this scaled object targets spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: $DEPLOYMENT_NAME # name of the model deployment minReplicaCount: 1 # minimum number of pods to be maintained maxReplicaCount: 4 # maximum number of pods to scale to pollingInterval: 10 triggers: - type: memory metricType: Utilization # Allowed types are 'Utilization' or 'AverageValue' metadata: value: "60" containerName: "" # Optional. You can use this to target a specific container in a pod

Policy Prometheus di esempio per la riduzione verticale a 0 pod

La policy yaml KEDA seguente utilizza la query delle metriche Prometheus come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. Questa policy utilizza minReplicaCount pari a 0 che consente a KEDA di ridurre verticalmente l’implementazione fino a 0 pod. Quando minReplicaCount è impostato su 0, è necessario fornire un criterio di attivazione per far apparire il primo pod, dopo che i pod sono stati ridotti verticalmente a 0. Per il trigger Prometheus, questo valore è fornito da activationThreshold. Per la coda SQS, il valore proviene da activationQueueLength.

Nota

Quando utilizzi minReplicaCount pari a 0, assicurati che l’attivazione non dipenda da una metrica generata dai pod. Quando i pod vengono ridotti verticalmente a 0, tale metrica non verrà mai generata e i pod non verranno più aumentati verticalmente.

apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: invocations-scaledobject # name of the scaled object that will be created by this namespace: ns-team-a # namespace that this scaled object targets spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: $DEPLOYMENT_NAME # name of the model deployment minReplicaCount: 0 # minimum number of pods to be maintained maxReplicaCount: 4 # maximum number of pods to scale to pollingInterval: 10 cooldownPeriod: 30 initialCooldownPeriod: 180 # time before scaling down the pods after initial deployment triggers: - type: prometheus metadata: serverAddress: http://<prometheus-host>:9090 query: sum(rate(http_requests_total{deployment="my-deployment"}[2m])) # Note: query must return a vector/scalar single element response threshold: '100.50' activationThreshold: '5.5' # Required if minReplicaCount is 0 for initial scaling namespace: example-namespace timeout: 1000 identityOwner: operator
Nota

I trigger della CPU e della memoria possono essere ridotti a 0 solo quando viene definito almeno uno scaler aggiuntivo non di tipo CPU o memoria (ad esempio SQS + CPU o Prometheus + CPU).