Políticas de escalado automático para la implementación de su modelo de HyperPod inferencia - Amazon SageMaker AI

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Políticas de escalado automático para la implementación de su modelo de HyperPod inferencia

La siguiente información proporciona ejemplos prácticos y configuraciones para implementar políticas de escalado automático en las implementaciones del modelo de SageMaker HyperPod inferencia de Amazon.

Aprenderá a configurar el escalado automático mediante los archivos YAML integrados autoScalingSpec en su implementación, así como a crear configuraciones KEDA ScaledObject independientes para escenarios de escalado avanzados. Los ejemplos incluyen el escalamiento de los activadores en función de CloudWatch las métricas, la longitud de las colas de Amazon SQS, las consultas de Prometheus y las métricas de utilización de recursos, como la CPU y la memoria.

Uso de YAML en la implementación autoScalingSpec

El operador de SageMaker HyperPod inferencia de Amazon proporciona capacidades de escalado automático integradas para las implementaciones de modelos mediante métricas de CloudWatch Amazon Managed Prometheus (AMP). El siguiente ejemplo de implementación de YAML incluye una autoScalingSpec sección que define los valores de configuración para escalar la implementación de un modelo.

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"

Explicación de los campos utilizados en la implementación (YAML)

minReplicaCount(Opcional, entero)

Especifica el número mínimo de réplicas de despliegue de modelos que se deben mantener en el clúster. Durante los eventos de reducción de escala, la implementación se reduce a esta cantidad mínima de pods. Debe ser mayor o igual a 0. Valor predeterminado: 1.

maxReplicaCount(Opcional, entero)

Especifica el número máximo de réplicas de despliegue de modelos que se deben mantener en el clúster. Debe ser mayor o igual aminReplicaCount. Durante los eventos de ampliación, la implementación se amplía hasta este número máximo de pods. Predeterminado: 5.

pollingInterval(Opcional, entero)

El intervalo de tiempo en segundos para consultar las métricas. Mínimo: 0. Valor predeterminado: 30 segundos.

cooldownPeriod(Opcional, entero)

El intervalo de tiempo en segundos que se debe esperar antes de reducir la escala de 1 a 0 pods durante un evento de reducción de escala. Solo se aplica cuando minReplicaCount se establece en 0. Mínimo: 0. Predeterminado: 300 segundos.

initialCooldownPeriod(Opcional, entero)

El intervalo de tiempo en segundos que se debe esperar antes de reducir la escala de 1 a 0 pods durante la implementación inicial. Solo se aplica cuando minReplicaCount se establece en 0. Mínimo: 0. Predeterminado: 300 segundos.

scaleDownStabilizationTime(Opcional, entero)

El intervalo de tiempo de estabilización en segundos después de que se active un disparador de reducción antes de que se produzca la reducción. Mínimo: 0. Predeterminado: 300 segundos.

scaleUpStabilizationTime(Opcional, entero)

El intervalo de tiempo de estabilización en segundos después de que se active un disparador de escalado antes de que se produzca el escalado. Mínimo: 0. Predeterminado: 0 segundos.

cloudWatchTrigger

La configuración de activación de las CloudWatch métricas utilizadas en las decisiones de escalado automático. Los siguientes campos están disponibles encloudWatchTrigger:

  • name(Opcional, cadena): nombre del CloudWatch disparador. Si no se proporciona, utiliza el formato predeterminado: < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics(Opcional, booleano): determina si se deben almacenar en caché las métricas consultadas por KEDA. KEDA consulta las métricas mediante el PollingInterval, mientras que el escalador automático de módulos horizontales (HPA) solicita las métricas de KEDA cada 15 segundos. Cuando se establece en true, las métricas consultadas se almacenan en caché y se utilizan para atender las solicitudes de HPA. Valor predeterminado: verdadero.

  • namespace(Obligatorio, cadena): el espacio de CloudWatch nombres de la métrica que se va a consultar.

  • metricName(Obligatorio, cadena): nombre de la CloudWatch métrica.

  • dimensions(Opcional, lista): lista de dimensiones de la métrica. Cada dimensión incluye un nombre (nombre de dimensión, cadena) y un valor (valor de dimensión, cadena).

  • targetValue(Obligatorio, flotante): el valor objetivo de la CloudWatch métrica utilizada en las decisiones de escalado automático.

  • activationTargetValue(Opcional, flotante): el valor objetivo de la CloudWatch métrica que se usa al escalar de 0 a 1 pod. Solo se aplica cuando minReplicaCount se establece en 0. Valor predeterminado: 0.

  • minValue(Opcional, flotante): el valor que se utilizará cuando la CloudWatch consulta no devuelva ningún dato. Valor predeterminado: 0.

  • metricCollectionStartTime(Opcional, entero): hora de inicio de la consulta de métricas, calculada como metricCollectionStart tiempo T. Debe ser mayor o igual a metricCollectionPeriod. Predeterminado: 300 segundos.

  • metricCollectionPeriod(Opcional, entero): la duración de la consulta de métricas en segundos. Debe ser un valor CloudWatch admitido (1, 5, 10, 30 o un múltiplo de 60). Predeterminado: 300 segundos.

  • metricStat(Opcional, cadena): el tipo de estadística de la CloudWatch consulta. Predeterminado: Average.

  • metricType(Opcional, cadena): define cómo se usa la métrica para escalar los cálculos. Predeterminado: Average. Valores permitidos: Average, Value.

    • Promedio: réplicas deseadas = límite máximo (valor métrico)/(valor objetivo)

    • Valor: réplicas deseadas = (réplicas actuales) × ceil (valor métrico)/(valor objetivo)

prometheusTrigger

La configuración de activación de las métricas de Amazon Managed Prometheus (AMP) que se utilizan en las decisiones de escalado automático. Los siguientes campos están disponibles en: prometheusTrigger

  • name(Opcional, cadena): nombre del CloudWatch disparador. Si no se proporciona, utiliza el formato predeterminado: < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics(Opcional, booleano): determina si se deben almacenar en caché las métricas consultadas por KEDA. KEDA consulta las métricas mediante el PollingInterval, mientras que el escalador automático de módulo horizontal (HPA) solicita las métricas de KEDA cada 15 segundos. Cuando se establece en true, las métricas consultadas se almacenan en caché y se utilizan para atender las solicitudes de HPA. Valor predeterminado: verdadero.

  • serverAddress(Obligatorio, cadena): la dirección del servidor AMP. Debe usar el formato: < https://aps-workspaces. <region>.amazonaws.com/workspaces/ <workspace_id>

  • query(Obligatorio, cadena): consulta de ProMQL utilizada para la métrica. Debe devolver un valor escalar.

  • targetValue(Obligatorio, flotante): el valor objetivo de la CloudWatch métrica utilizada en las decisiones de escalado automático.

  • activationTargetValue(Opcional, flotante): el valor objetivo de la CloudWatch métrica que se usa al escalar de 0 a 1 pod. Solo se aplica cuando minReplicaCount se establece en 0. Valor predeterminado: 0.

  • namespace(Opcional, cadena): el espacio de nombres que se utilizará para las consultas con espacios de nombres. Predeterminado: cadena vacía (). ""

  • customHeaders(Opcional, cadena): encabezados personalizados para incluir al consultar el punto final de Prometheus. Predeterminado: cadena vacía («»).

  • metricType(Opcional, cadena): define cómo se usa la métrica para los cálculos de escala. Predeterminado: Average. Valores permitidos: Average, Value.

    • Promedio: réplicas deseadas = límite máximo (valor métrico)/(valor objetivo)

    • Valor: réplicas deseadas = (réplicas actuales) × ceil (valor métrico)/(valor objetivo)

Uso de las definiciones yaml de ScaledObject KEDA a través de kubectl

Además de configurar el escalado automático a través de la autoScalingSpec sección YAML de tu implementación, puedes crear y aplicar definiciones YAML de KEDA independientes mediante kubectl. ScaledObject

Este enfoque proporciona una mayor flexibilidad para escenarios de escalado complejos y le permite gestionar las políticas de escalado automático de forma independiente de las implementaciones de sus modelos. ScaledObjectLas configuraciones de KEDA admiten una amplia gama de activadores de escalado, incluidas CloudWatch las métricas, la longitud de las colas de Amazon SQS, las consultas de Prometheus y las métricas basadas en recursos, como el uso de la CPU y la memoria. Puede aplicar estas configuraciones a las implementaciones de modelos existentes haciendo referencia al nombre de la implementación en la sección de la especificación. scaleTargetRef ScaledObject

nota

Asegúrese de que el rol de operador keda proporcionado durante la instalación del operador de HyperPod inferencia tenga los permisos adecuados para consultar las métricas definidas en los activadores de objetos escalados.

CloudWatch métricas

La siguiente política yaml de KEDA utiliza CloudWatch las métricas como activadores para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto final de Sagemaker y escala el número de módulos de despliegue. La lista completa de parámetros admitidos por KEDA para el aws-cloudwatch activador se encuentra en 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étricas de Amazon SQS

La siguiente política yaml de KEDA utiliza las métricas de Amazon SQS como activadores para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto final de Sagemaker y escala el número de pods de implementación. La lista completa de parámetros admitidos por KEDA para el aws-cloudwatch activador se encuentra en 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étricas de Prometheus

La siguiente política yaml de KEDA utiliza las métricas de Prometheus como activadores para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto final de Sagemaker y escala el número de módulos de despliegue. La lista completa de parámetros admitidos por KEDA para el aws-cloudwatch activador se encuentra en 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étricas de CPU

La siguiente política yaml de KEDA utiliza la métrica de la CPU como activador para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto final de Sagemaker y escala el número de módulos de despliegue. La lista completa de parámetros admitidos por KEDA para el aws-cloudwatch activador se encuentra en 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étricas de memoria

La siguiente política yaml de KEDA utiliza la consulta de métricas de Prometheus como activador para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto final de Sagemaker y escala el número de módulos de despliegue. La lista completa de parámetros admitidos por KEDA para el aws-cloudwatch activador se encuentra en 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

Ejemplo de la política de Prometheus para reducir a 0 cápsulas

La siguiente política yaml de KEDA utiliza la consulta de métricas de Prometheus como activador para realizar el escalado automático en una implementación de Kubernetes. Esta política utiliza un valor minReplicaCount de 0, lo que permite a KEDA reducir la implementación a 0 pods. Si minReplicaCount se establece en 0, debe proporcionar un criterio de activación para que aparezca el primer pod, después de que los pods se reduzcan a 0. Para el activador de Prometheus, este valor lo proporciona. activationThreshold En el caso de la cola SQS, proviene de. activationQueueLength

nota

Cuando minReplicaCount utilices 0, asegúrate de que la activación no dependa de una métrica que generen los pods. Cuando los módulos se reduzcan a 0, esa métrica nunca se generará y los grupos no volverán a ampliarse.

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

Los activadores de CPU y memoria solo pueden escalarse a 0 si se define al menos un escalador adicional que no sea de CPU o memoria (p. ej. SQS + CPU o Prometheus + CPU).