

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
<a name="sagemaker-hyperpod-model-deployment-autoscaling"></a>

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 lors du déploiement
<a name="sagemaker-hyperpod-model-deployment-autoscaling-yaml"></a>

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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-fields"></a>

`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. Valeur 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. Valeur 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. Valeur 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. Valeur 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). Valeur 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\$1id>
+ `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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl"></a>

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. `ScaledObject`Les configurations KEDA prennent en charge un [large éventail de déclencheurs de dimensionnement](https://keda.sh/docs/2.17/scalers/), 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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cw"></a>

La politique YAML de KEDA suivante utilise des CloudWatch métriques comme déclencheur pour effectuer un 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/](https://keda.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
```

### Métriques Amazon SQS
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sqs"></a>

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/](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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-prometheus"></a>

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](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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cpu"></a>

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](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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-memory"></a>

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](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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sample"></a>

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 \$1 CPU, ou Prometheus \$1 CPU). 