Politiques de mise à l'échelle automatique pour le déploiement de votre HyperPod modèle d'inférence - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Politiques de mise à l'échelle automatique pour le déploiement de votre HyperPod modèle d'inférence

Les informations suivantes fournissent des exemples pratiques et des configurations pour la mise en œuvre de politiques de dimensionnement automatique sur les déploiements de modèles SageMaker HyperPod d'inférence Amazon.

Vous apprendrez à configurer la mise à l’échelle automatique à l’aide de l’élément autoScalingSpec intégré dans les fichiers YAML de votre déploiement, ainsi qu’à créer des configurations KEDA ScaledObject autonomes pour des scénarios de mise à l’échelle avancés. Les exemples couvrent le dimensionnement des déclencheurs en fonction CloudWatch des métriques, de la longueur des files d'attente Amazon SQS, des requêtes Prometheus et des métriques d'utilisation des ressources telles que le processeur et la mémoire.

Utilisation de autoScalingSpec YAML dans le déploiement

L'opérateur d' SageMaker HyperPod inférence Amazon fournit des fonctionnalités de mise à l'échelle automatique intégrées pour les déploiements de modèles à l'aide des métriques d'Amazon Managed Prometheus (AMP) et d' CloudWatch Amazon Managed Prometheus (AMP). L’exemple de code YAML de déploiement suivant inclut une section autoScalingSpec qui définit les valeurs de configuration pour la mise à l’échelle du déploiement de votre modèle.

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"

Explication des champs utilisés dans le code YAML de déploiement

minReplicaCount (facultatif, entier)

Spécifie le nombre minimal de réplicas de déploiement de modèles à conserver dans le cluster. Lors d’événements de réduction verticale, le déploiement est réduit verticalement à ce nombre minimal de pods. Il doit être supérieur ou égal à 0. Par défaut : 1.

maxReplicaCount (facultatif, entier)

Spécifie le nombre maximal de réplicas de déploiement de modèles à conserver dans le cluster. Il doit être supérieur ou égal à minReplicaCount. Lors d’événements d’augmentation verticale, le déploiement est augmenté verticalement jusqu’à ce nombre maximal de pods. Valeur par défaut : 5.

pollingInterval (facultatif, entier)

Intervalle de temps en secondes pour interroger les métriques. Minimum : 0. Par défaut : 30 secondes.

cooldownPeriod (facultatif, entier)

Intervalle de temps en secondes à attendre avant de réduire verticalement de 1 à 0 pod lors d’un événement de réduction verticale. S’applique uniquement quand minReplicaCount a pour valeur 0. Minimum : 0. Par défaut : 300 secondes.

initialCooldownPeriod (facultatif, entier)

Intervalle de temps en secondes à attendre avant de réduire verticalement de 1 à 0 pod lors d’un déploiement initial. S’applique uniquement quand minReplicaCount a pour valeur 0. Minimum : 0. Par défaut : 300 secondes.

scaleDownStabilizationTime (facultatif, entier)

Période de stabilisation en secondes après l’activation d’un déclencheur de réduction verticale avant que la réduction verticale ne se produise. Minimum : 0. Par défaut : 300 secondes.

scaleUpStabilizationTime (facultatif, entier)

Période de stabilisation en secondes après l’activation d’un déclencheur d’augmentation verticale avant que l’augmentation verticale ne se produise. Minimum : 0. Valeur par défaut : 0 seconde.

cloudWatchTrigger

Configuration du déclencheur pour les CloudWatch métriques utilisées dans les décisions de mise à l'échelle automatique. Les champs suivants sont disponibles dans cloudWatchTrigger :

  • name(Facultatif, chaîne) - Nom du CloudWatch déclencheur. S'il n'est pas fourni, utilise le format par défaut : < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics (facultatif, booléen) : détermine s’il faut mettre en cache les métriques demandées par KEDA. KEDA interroge les métriques en utilisant pollingInterval, tandis qu’Horizontal Pod Autoscaler (HPA) demande des métriques à KEDA toutes les 15 secondes. Lorsqu’elles sont définies sur true, les métriques demandées sont mises en cache et utilisées pour traiter les demandes HPA. Valeur par défaut : vraie.

  • namespace(Obligatoire, chaîne) - L'espace de CloudWatch noms de la métrique à interroger.

  • metricName(Obligatoire, chaîne) - Le nom de la CloudWatch métrique.

  • dimensions (facultatif, liste) : liste de dimensions pour la métrique. Chaque dimension inclut un nom (nom de dimension – chaîne) et une valeur (valeur de dimension – chaîne).

  • targetValue(Obligatoire, flottant) - La valeur cible de la CloudWatch métrique utilisée dans les décisions de mise à l'échelle automatique.

  • activationTargetValue(Facultatif, flottant) - La valeur cible de la CloudWatch métrique utilisée lors de la mise à l'échelle de 0 à 1 pod. S’applique uniquement quand minReplicaCount a pour valeur 0. Valeur par défaut : 0.

  • minValue(Facultatif, Float) : valeur à utiliser lorsque la CloudWatch requête ne renvoie aucune donnée. Valeur par défaut : 0.

  • metricCollectionStartTime(Facultatif, entier) - Heure de début de la requête métrique, calculée sous la forme T- metricCollectionStart Time. Doit être supérieur ou égal à metricCollectionPeriod. Par défaut : 300 secondes.

  • metricCollectionPeriod (facultatif, entier) : durée de la requête de métrique en secondes. Il doit s'agir d'une valeur CloudWatch prise en charge (1, 5, 10, 30 ou un multiple de 60). Par défaut : 300 secondes.

  • metricStat(Facultatif, chaîne) - Type de statistique pour la CloudWatch requête. Valeur par défaut : Average.

  • metricType (facultatif, chaîne) : définit la manière dont la métrique est utilisée pour les calculs de mise à l’échelle. Valeur par défaut : Average. Valeurs autorisées : Average, Value.

    • Average : réplicas souhaités = ceil (valeur métrique) / (targetValue)

    • Value : réplicas souhaités = (réplicas actuels) × ceil (valeur métrique) / (targetValue)

prometheusTrigger

Configuration du déclencheur pour les métriques Amazon Managed Prometheus (AMP) utilisées dans les décisions de mise à l’échelle automatique. Les champs suivants sont disponibles dans prometheusTrigger :

  • name(Facultatif, chaîne) - Nom du CloudWatch déclencheur. S'il n'est pas fourni, utilise le format par défaut : < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics (facultatif, booléen) : détermine s’il faut mettre en cache les métriques demandées par KEDA. KEDA interroge les métriques en utilisant pollingInterval, tandis qu’Horizontal Pod Autoscaler (HPA) demande des métriques à KEDA toutes les 15 secondes. Lorsqu’elles sont définies sur true, les métriques demandées sont mises en cache et utilisées pour traiter les demandes HPA. Valeur par défaut : vraie.

  • serverAddress (obligatoire, chaîne) : adresse du serveur AMP. Elle doit utiliser le format : <https://aps-workspaces.<région>.amazonaws.com/workspaces/<workspace_id>

  • query (obligatoire, chaîne) : requête PromQL utilisée pour la métrique. Doit renvoyer une valeur scalaire.

  • targetValue(Obligatoire, flottant) - La valeur cible de la CloudWatch métrique utilisée dans les décisions de mise à l'échelle automatique.

  • activationTargetValue(Facultatif, flottant) - La valeur cible de la CloudWatch métrique utilisée lors de la mise à l'échelle de 0 à 1 pod. S’applique uniquement quand minReplicaCount a pour valeur 0. Valeur par défaut : 0.

  • namespace (facultatif, chaîne) : espace de noms à utiliser pour les requêtes avec espace de noms. Valeur par défaut : chaîne vide ("").

  • customHeaders (facultatif, chaîne) : en-têtes personnalisés à inclure lors de l’interrogation du point de terminaison Prometheus. Valeur par défaut : chaîne vide ("").

  • metricType (facultatif, chaîne) : définit la manière dont la métrique est utilisée pour les calculs de mise à l’échelle. Valeur par défaut : Average. Valeurs autorisées : Average, Value.

    • Average : réplicas souhaités = ceil (valeur métrique) / (targetValue)

    • Value : réplicas souhaités = (réplicas actuels) × ceil (valeur métrique) / (targetValue)

Utilisation des définitions ScaledObject YAML de KEDA via kubectl

Outre la configuration de l'autoscaling dans la autoScalingSpec section de votre fichier YAML de déploiement, vous pouvez créer et appliquer des définitions KEDA ScaledObject YAML autonomes à l'aide de kubectl.

Cette approche offre une plus grande flexibilité pour les scénarios de mise à l’échelle complexes et vous permet de gérer les politiques de mise à l’échelle automatique indépendamment de vos déploiements de modèle. ScaledObjectLes configurations KEDA prennent en charge un large éventail de déclencheurs de dimensionnement, notamment CloudWatch les métriques, la longueur des files d'attente Amazon SQS, les requêtes Prometheus et les métriques basées sur les ressources telles que l'utilisation du processeur et de la mémoire. Vous pouvez appliquer ces configurations aux déploiements de modèles existants en référençant le nom du déploiement dans la scaleTargetRef section de la ScaledObject spécification.

Note

Assurez-vous que le rôle d'opérateur keda fourni lors de l'installation de l'opérateur d' HyperPod inférence dispose des autorisations adéquates pour interroger les métriques définies dans les déclencheurs d'objets dimensionnés.

CloudWatch métriques

La politique YAML KEDA suivante utilise les CloudWatch métriques comme déclencheur pour effectuer le dimensionnement automatique sur un déploiement de Kubernetes. La politique interroge le nombre d’invocations pour un point de terminaison Sagemaker et met à l’échelle le nombre de pods de déploiement. La liste complète des paramètres pris en charge par KEDA pour le aws-cloudwatch déclencheur se trouve sur https://keda. sh/docs/2.17/scalers/aws-montre-cloud/.

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

Métriques Amazon SQS

La politique yaml KEDA suivante utilise les métriques Amazon SQS comme déclencheur pour effectuer la mise à l’échelle automatique sur un déploiement kubernetes. La politique interroge le nombre d’invocations pour un point de terminaison Sagemaker et met à l’échelle le nombre de pods de déploiement. La liste complète des paramètres pris en charge par KEDA pour le aws-cloudwatch déclencheur se trouve sur 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

Métriques Prometheus

La politique yaml KEDA suivante utilise les métriques Prometheus comme déclencheur pour effectuer la mise à l’échelle automatique sur un déploiement kubernetes. La politique interroge le nombre d’invocations pour un point de terminaison Sagemaker et met à l’échelle le nombre de pods de déploiement. La liste complète des paramètres pris en charge par KEDA pour le aws-cloudwatch déclencheur se trouve sur 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

Métriques de processeur

La politique yaml KEDA suivante utilise la métrique cpu comme déclencheur pour effectuer la mise à l’échelle automatique sur un déploiement kubernetes. La politique interroge le nombre d’invocations pour un point de terminaison Sagemaker et met à l’échelle le nombre de pods de déploiement. La liste complète des paramètres pris en charge par KEDA pour le aws-cloudwatch déclencheur se trouve sur 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

Métrique de mémoire

La politique yaml KEDA suivante utilise la requête des métriques Prometheus comme déclencheur pour effectuer la mise à l’échelle automatique sur un déploiement kubernetes. La politique interroge le nombre d’invocations pour un point de terminaison Sagemaker et met à l’échelle le nombre de pods de déploiement. La liste complète des paramètres pris en charge par KEDA pour le aws-cloudwatch déclencheur se trouve sur 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

Exemple de politique de Prometheus concernant la réduction verticale à 0 pod

La politique yaml KEDA suivante utilise la requête des métriques prometheus comme déclencheur pour effectuer la mise à l’échelle automatique sur un déploiement kubernetes. Cette politique utilise une valeur minReplicaCount de 0, ce qui permet à KEDA de réduire verticalement le déploiement à 0 pod. Quand minReplicaCount a pour valeur 0, vous devez fournir un critère d’activation afin de faire apparaître le premier pod, une fois les pods réduits verticalement à 0. Pour le déclencheur Prometheus, cette valeur est fournie par activationThreshold. Pour la file d’attente SQS, elle provient de activationQueueLength.

Note

Lorsque vous utilisez une valeur minReplicaCount de 0, assurez-vous que l’activation ne dépend pas d’une métrique générée par les pods. Lorsque les pods sont réduits verticalement à 0, cette métrique ne sera jamais générée et les pods ne seront plus augmentés verticalement.

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
Note

Les déclencheurs de CPU et de mémoire peuvent être réduits verticalement à 0 uniquement lorsque vous définissez au moins un outil de mise à l’échelle supplémentaire qui ne correspond pas aux CPU ni à la mémoire (p. ex. SQS + CPU, ou Prometheus + CPU).