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

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

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 .

Imparerai come configurare la scalabilità automatica utilizzando i file YAML integrati autoScalingSpec nella tua distribuzione e come creare configurazioni KEDA autonome per scenari di scalabilità avanzati. ScaledObject Gli esempi riguardano i trigger di scalabilità basati su CloudWatch metriche, 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 seguente esempio di implementazione YAML include una sezione che definisce i valori di configurazione per scalare la distribuzione del modello. autoScalingSpec

apiVersion: inference.sagemaker.aws.amazon.com/v1alpha1 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 nella distribuzione di YAML

minReplicaCount(Facoltativo, numero intero)

Speciifica il numero minimo di repliche di distribuzione del modello da gestire nel cluster. Durante gli eventi di ridimensionamento, la distribuzione si riduce fino a questo numero minimo di pod. Deve essere maggiore o uguale a 0. Default: 1.

maxReplicaCount(Facoltativo, numero intero)

Speciifica il numero massimo di repliche di distribuzione del modello da mantenere nel cluster. Deve essere maggiore o uguale a. minReplicaCount Durante gli eventi di scalabilità, l'implementazione è scalabile fino a questo numero massimo di pod. Impostazione predefinita: 5.

pollingInterval(Facoltativo, numero intero)

L'intervallo di tempo in secondi per l'interrogazione delle metriche. Minimo: 0 Valore predefinito: 30 secondi.

cooldownPeriod(Facoltativo, numero intero)

L'intervallo di tempo, in secondi, di attesa prima del ridimensionamento da 1 a 0 pod durante un evento di ridimensionamento. Si applica solo quando minReplicaCount è impostato su 0. Minimo: 0 Impostazione predefinita: 300 secondi.

initialCooldownPeriod(Facoltativo, numero intero)

L'intervallo di tempo, in secondi, di attesa prima di passare da 1 a 0 pod durante la distribuzione 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 dopo l'attivazione di un trigger di ridimensionamento prima che si verifichi il ridimensionamento. Minimo: 0 Impostazione predefinita: 300 secondi.

scaleUpStabilizationTime(Facoltativo, numero intero)

La finestra temporale di stabilizzazione in secondi dopo l'attivazione di un trigger di scale-up prima che si verifichi il ridimensionamento. Minimo: 0 Impostazione predefinita: 0 secondi.

cloudWatchTrigger

La configurazione dei trigger per le CloudWatch metriche utilizzate nelle decisioni di scalabilità automatica. I seguenti campi sono disponibili in: cloudWatchTrigger

  • name(Facoltativo, stringa): 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 interroga le metriche utilizzando PollingInterval, mentre l'Horizontal Pod Autoscaler (HPA) richiede le metriche da KEDA ogni 15 secondi. Se impostata su true, le metriche interrogate vengono memorizzate nella cache e utilizzate per soddisfare le richieste HPA. Default: true (VERO).

  • namespace(Obbligatorio, String): lo CloudWatch spazio dei 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 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 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, String): definisce il modo in cui la metrica viene utilizzata per i calcoli di scala. Default: Average. Valori consentiti: Average e Value.

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

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

prometheusTrigger

La configurazione dei trigger per le metriche di Amazon Managed Prometheus (AMP) utilizzate nelle decisioni di scalabilità automatica. I seguenti campi sono disponibili in: prometheusTrigger

  • name(Facoltativo, stringa): 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 interroga le metriche utilizzando PollingInterval, mentre l'Horizontal Pod Autoscaler (HPA) richiede le metriche da KEDA ogni 15 secondi. Se impostata su true, le metriche interrogate vengono memorizzate nella cache e utilizzate per soddisfare le richieste HPA. Default: true (VERO).

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

  • query(Obbligatorio, String): 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, String) - Lo spazio dei nomi da utilizzare per le query con namespace. Impostazione predefinita: stringa vuota (). ""

  • customHeaders(Facoltativo, String): intestazioni personalizzate da includere quando si esegue una query sull'endpoint Prometheus. Impostazione predefinita: stringa vuota («»).

  • metricType(Facoltativo, String): definisce come viene utilizzata la metrica per i calcoli di scala. Default: Average. Valori consentiti: Average e Value.

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

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

Utilizzo delle definizioni yaml KEDA tramite kubectl ScaledObject

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à per scenari di scalabilità complessi e consente di gestire le politiche di scalabilità automatica 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 interroga il numero di chiamate per un endpoint Sagemaker e ridimensiona il numero di pod di distribuzione. 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 seguente policy Yaml KEDA utilizza i parametri di Amazon SQS come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. La policy interroga il numero di chiamate per un endpoint Sagemaker e ridimensiona il numero di pod di distribuzione. L'elenco completo dei parametri supportati da KEDA per il trigger è disponibile all'indirizzo https://keda. aws-cloudwatch 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 seguente policy Yaml KEDA utilizza le metriche di Prometheus come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. La policy richiede il numero di chiamate per un endpoint Sagemaker e ridimensiona il numero di pod di distribuzione. L'elenco completo dei parametri supportati da KEDA per il trigger è disponibile all'indirizzo https://keda. aws-cloudwatch 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 seguente policy KEDA yaml utilizza la metrica cpu come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. La policy interroga il numero di chiamate per un endpoint Sagemaker e ridimensiona il numero di pod di distribuzione. L'elenco completo dei parametri supportati da KEDA per il trigger è disponibile all'indirizzo https://keda. aws-cloudwatch 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 seguente policy KEDA yaml utilizza la query delle metriche di Prometheus come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. La policy richiede il numero di chiamate per un endpoint Sagemaker e ridimensiona il numero di pod di distribuzione. L'elenco completo dei parametri supportati da KEDA per il trigger è disponibile all'indirizzo https://keda. aws-cloudwatch 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

Esempio della politica di Prometheus per la riduzione a 0 pod

La seguente policy KEDA yaml utilizza la query Prometheus Metrics come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. Questa policy utilizza un valore pari a 0 che consente a KEDA di ridimensionare la distribuzione fino a minReplicaCount 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 ridimensionati a 0. Per il trigger Prometheus, questo valore è fornito da. activationThreshold Per la coda SQS, proviene da. activationQueueLength

Nota

Durante l'utilizzo minReplicaCount di 0, assicurati che l'attivazione non dipenda da una metrica generata dai pod. Quando i pod vengono ridotti a 0, quella metrica non verrà mai generata e i pod non verranno più ridimensionati.

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 CPU e Memory possono essere scalati fino a 0 solo quando si definisce almeno uno scaler aggiuntivo che non sia CPU o memoria (ad es. SQS + CPU o Prometheus + CPU).