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 con autoScalingSpec integrado en los archivos YAML de su implementación, así como a crear configuraciones independientes de ScaledObject de KEDA 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 sección autoScalingSpec que define los valores de configuración para escalar la implementación de su modelo.
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"
Explicación de los campos utilizados en la implementación de YAML
minReplicaCount(opcional, entero)-
Especifica el número mínimo de réplicas de implementación del modelo que se mantendrá en el clúster. Durante los eventos de reducción vertical, la implementación se reduce verticalmente a esta cantidad mínima de pods. Debe ser mayor o igual que 0. Valor predeterminado: 1.
maxReplicaCount(opcional, entero)-
Especifica el número máximo de réplicas de implementación del modelo que se mantendrá en el clúster. Debe ser mayor o igual que
minReplicaCount. Durante los eventos de escalado vertical, la implementación se escala verticalmente a esta cantidad máxima de pods. Valor predeterminado: 5. pollingInterval(opcional, entero)-
Es el intervalo de tiempo en segundos para consultar las métricas. Mínimo: 0. Valor predeterminado: 30 segundos.
cooldownPeriod(opcional, entero)-
Es el intervalo de tiempo en segundos que se espera antes de reducir verticalmente de 1 a 0 pods durante un evento de reducción vertical. Se aplica solo cuando
minReplicaCountse establece en 0. Mínimo: 0. Predeterminado: 300 segundos. initialCooldownPeriod(opcional, entero)-
Es el intervalo de tiempo en segundos que se espera antes de reducir verticalmente de 1 a 0 pods durante una implementación inicial. Se aplica solo cuando
minReplicaCountse establece en 0. Mínimo: 0. Predeterminado: 300 segundos. scaleDownStabilizationTime(opcional, entero)-
Es el intervalo de tiempo de estabilización en segundos después de que se active el desencadenador de reducción vertical antes de que se produzca la reducción vertical. Mínimo: 0. Predeterminado: 300 segundos.
scaleUpStabilizationTime(opcional, entero)-
Es el intervalo de tiempo de estabilización en segundos después de que se active el desencadenador de escalada vertical antes de que se produzca la escalada vertical. 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. En
cloudWatchTriggerestán disponibles los siguientes campos:-
name(Opcional, cadena): nombre del CloudWatch activador. 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 con pollingInterval, mientras que el Escalador automático de pod 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. -
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): es la lista de dimensiones de la métrica. Cada dimensión incluye un nombre (nombre de la dimensión, cadena) y un valor (valor de la 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. Se aplica solo cuandominReplicaCountse 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): es 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 de la métrica)/(valor objetivo)
-
Valor: réplicas deseadas = (réplicas actuales) × límite máximo (valor de la métrica)/(valor objetivo)
-
-
prometheusTrigger-
Es la configuración del desencadenador de las métricas de Amazon Managed Prometheus (AMP) que se utiliza en las decisiones de escalado automático. En
prometheusTriggerestán disponibles los siguientes campos:-
name(Opcional, cadena): nombre del CloudWatch activador. 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 con pollingInterval, mientras que el Escalador automático de pod 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): es la dirección del servidor de AMP. Debe usar el formato: <https://aps-workspaces.<región>.amazonaws.com/workspaces/<workspace_id> -
query(obligatorio, cadena): es la 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. Se aplica solo cuandominReplicaCountse establece en 0. Valor predeterminado: 0. -
namespace(opcional, cadena): es el espacio de nombres que se utilizará para las consultas con espacios de nombres. Valor predeterminado: cadena vacía (""). -
customHeaders(opcional, cadena): son los encabezados personalizados que se deben incluir al consultar el punto de conexión de Prometheus. Valor predeterminado: cadena vacía (""). -
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 de la métrica)/(valor objetivo)
-
Valor: réplicas deseadas = (réplicas actuales) × límite máximo (valor de la métrica)/(valor objetivo)
-
-
Uso de las definiciones ScaledObject yaml de 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 mayor flexibilidad en los escenarios de escalado complejos y permite administrar las políticas de escalado automático independientemente de las implementaciones de los modelos. ScaledObjectLas configuraciones de KEDA admiten una amplia gama de activadores de escalado
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 de conexión de Sagemaker y escala el número de pods de implementación. La lista completa de parámetros admitidos por KEDA para aws-cloudwatch el disparador se encuentra en https://keda. sh/docs/2.17/scalers/aws
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 desencadenadores para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto de conexión 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 disparador se encuentra en https://keda. sh/docs/2.17/scalers/aws
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 desencadenadores para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto de conexión 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 disparador 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 las métricas de CPU como desencadenadores para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto de conexión 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 disparador 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 las métricas de Prometheus como desencadenador para realizar el escalado automático en una implementación de Kubernetes. La política consulta el número de invocaciones de un punto de conexión 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 disparador 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 política de Prometheus para reducir verticalmente a 0 pods
La siguiente política yaml de KEDA utiliza la consulta de las métricas de Prometheus como desencadenador para realizar el escalado automático en una implementación de Kubernetes. Esta política utiliza un minReplicaCount de 0, lo que permite a KEDA reducir verticalmente 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 verticalmente a 0. Para el desencadenador de Prometheus, este valor lo proporciona activationThreshold. En el caso de la cola de SQS, proviene de activationQueueLength.
nota
Si utiliza un minReplicaCount de 0, asegúrese de que la activación no dependa de una métrica que generen los pods. Si los pods se reducen verticalmente a 0, esa métrica nunca se generará y los pods ya no podrán escalarse verticalmente.
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 desencadenadores de CPU y memoria solo pueden escalarse a 0 si se define al menos un escalador adicional que no sea de CPU o memoria (por ejemplo, SQS + CPU o Prometheus + CPU).