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 le dimensionnement automatique à l'aide des fichiers YAML intégrés autoScalingSpec
à votre déploiement, ainsi qu'à créer des ScaledObject
configurations KEDA autonomes pour des scénarios de dimensionnement 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
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 déploiement YAML suivant inclut une autoScalingSpec
section qui définit les valeurs de configuration pour dimensionner le déploiement de votre modèle.
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"
Explication des champs utilisés dans le déploiement YAML
minReplicaCount
(Facultatif, entier)-
Spécifie le nombre minimum de répliques de déploiement de modèles à conserver dans le cluster. Lors d'événements de réduction, le déploiement est réduit à ce nombre minimum de pods. Doit être supérieur ou égal à 0. Par défaut : 1.
maxReplicaCount
(Facultatif, entier)-
Spécifie le nombre maximal de répliques de déploiement de modèles à conserver dans le cluster. Doit être supérieur ou égal à
minReplicaCount
. Lors des événements de mise à l'échelle, le déploiement augmente jusqu'à ce nombre maximum de pods. 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 passer de 1 à 0 pods lors d'un événement de réduction. Ne s'applique que lorsqu'
minReplicaCount
il est défini sur 0. Minimum : 0. Valeur par défaut : 300 secondes. initialCooldownPeriod
(Facultatif, entier)-
Intervalle de temps en secondes à attendre avant de passer de 1 à 0 pods lors du déploiement initial. Ne s'applique que lorsqu'
minReplicaCount
il est défini sur 0. Minimum : 0. Valeur par défaut : 300 secondes. scaleDownStabilizationTime
(Facultatif, entier)-
La fenêtre temporelle de stabilisation en secondes après l'activation d'un déclencheur de réduction avant que la réduction ne se produise. Minimum : 0. Valeur par défaut : 300 secondes.
scaleUpStabilizationTime
(Facultatif, entier)-
La fenêtre temporelle de stabilisation en secondes après l'activation d'un déclencheur de mise à l'échelle avant que la mise à l'échelle 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 à l'aide du PollingInterval, tandis que le 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) : nom de la CloudWatch métrique. -
dimensions
(Facultatif, Liste) : liste des dimensions de 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. Ne s'applique que lorsqu'minReplicaCount
il est défini sur 0. Par défaut : 0. -
minValue
(Facultatif, Float) : valeur à utiliser lorsque la CloudWatch requête ne renvoie aucune donnée. 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 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. 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. Par défaut:Average
. Valeurs autorisées :Average
,Value
.-
Moyenne : répliques souhaitées = ceil (valeur métrique)/(TargetValue)
-
Valeur : répliques souhaitées = (répliques actuelles) × 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 dimensionnement 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 à l'aide du PollingInterval, tandis que le 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. Vous devez utiliser le format suivant : < https://aps-workspaces. <region>.amazonaws.com/workspaces/ <workspace_id> -
query
(Obligatoire, chaîne) - La 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. Ne s'applique que lorsqu'minReplicaCount
il est défini sur 0. Par défaut : 0. -
namespace
(Facultatif, chaîne) - L'espace de noms à utiliser pour les requêtes avec espace de noms. 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. 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. Par défaut:Average
. Valeurs autorisées :Average
,Value
.-
Moyenne : répliques souhaitées = ceil (valeur métrique)/(TargetValue)
-
Valeur : répliques souhaitées = (répliques actuelles) × 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 dimensionnement complexes et vous permet de gérer les politiques de dimensionnement automatique indépendamment des déploiements de vos modèles. ScaledObject
Les configurations KEDA prennent en charge un large éventail de déclencheurs de dimensionnement
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 de KEDA suivante utilise des CloudWatch métriques comme déclencheur pour effectuer un dimensionnement automatique sur un déploiement de Kubernetes. La politique demande le nombre d'appels pour un point de terminaison Sagemaker et adapte le nombre de modules de déploiement. La liste complète des paramètres supportés 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 le dimensionnement automatique lors d'un déploiement de Kubernetes. La politique demande le nombre d'appels pour un point de terminaison Sagemaker et adapte le nombre de modules de déploiement. La liste complète des paramètres supportés 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 de KEDA suivante utilise les métriques Prometheus comme déclencheur pour effectuer le dimensionnement automatique lors d'un déploiement de Kubernetes. La politique demande le nombre d'appels pour un point de terminaison Sagemaker et adapte le nombre de modules de déploiement. La liste complète des paramètres supportés 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 du processeur comme déclencheur pour effectuer le dimensionnement automatique lors d'un déploiement de Kubernetes. La politique demande le nombre d'appels pour un point de terminaison Sagemaker et adapte le nombre de modules de déploiement. La liste complète des paramètres supportés 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 Prometheus metrics comme déclencheur pour effectuer un dimensionnement automatique sur un déploiement de Kubernetes. La politique demande le nombre d'appels pour un point de terminaison Sagemaker et adapte le nombre de modules de déploiement. La liste complète des paramètres supportés 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 à 0 capsules
La politique YAML KEDA suivante utilise la requête Prometheus Metrics comme déclencheur pour effectuer un dimensionnement automatique sur un déploiement de Kubernetes. Cette politique utilise une valeur minReplicaCount
de 0, ce qui permet à KEDA de réduire le déploiement à 0 pods. Lorsqu'il minReplicaCount
est défini sur 0, vous devez fournir un critère d'activation afin de faire apparaître le premier module, une fois les modules réduits à 0. Pour le déclencheur Prometheus, cette valeur est fournie par. activationThreshold
Pour la file d'attente SQS, elle provient deactivationQueueLength
.
Note
Lorsque vous utilisez minReplicaCount
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 redimensionnés à 0, cette métrique ne sera jamais générée et les pods ne seront plus redimensionnés.
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 du processeur et de la mémoire ne peuvent être redimensionnés à 0 que lorsque vous définissez au moins un scaler supplémentaire qui n'est ni le processeur ni la mémoire (par exemple SQS + CPU, ou Prometheus + CPU).