Políticas de escalonamento automático para a implantação do seu modelo de HyperPod inferência - SageMaker IA da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Políticas de escalonamento automático para a implantação do seu modelo de HyperPod inferência

As informações a seguir fornecem exemplos práticos e configurações para implementar políticas de escalonamento automático em implantações de modelos de SageMaker HyperPod inferência da Amazon.

Você aprenderá como configurar o escalonamento automático usando os arquivos YAML integrados autoScalingSpec em seus arquivos de implantação, bem como criar ScaledObject configurações autônomas do KEDA para cenários avançados de escalabilidade. Os exemplos abrangem gatilhos de escalabilidade com base em CloudWatch métricas, comprimentos de fila do Amazon SQS, consultas do Prometheus e métricas de utilização de recursos, como CPU e memória.

Usando o YAML autoScalingSpec na implantação

O operador de SageMaker HyperPod inferência da Amazon fornece recursos integrados de escalonamento automático para implantações de modelos usando métricas do CloudWatch Amazon Managed Prometheus (AMP). O exemplo de YAML de implantação a seguir inclui uma autoScalingSpec seção que define os valores de configuração para escalar a implantação do seu 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"

Explicação dos campos usados na implantação do YAML

minReplicaCount(Opcional, número inteiro)

Especifica o número mínimo de réplicas de implantação do modelo a serem mantidas no cluster. Durante eventos de redução, a implantação é reduzida para esse número mínimo de pods. Deve ser maior ou igual a 0. Padrão: 1.

maxReplicaCount(Opcional, número inteiro)

Especifica o número máximo de réplicas de implantação do modelo a serem mantidas no cluster. Deve ser maior ou igual minReplicaCount a. Durante eventos de expansão, a implantação aumenta até esse número máximo de pods. Padrão: 5.

pollingInterval(Opcional, número inteiro)

O intervalo de tempo em segundos para consultar métricas. Mínimo: 0. Padrão: 30 segundos.

cooldownPeriod(Opcional, número inteiro)

O intervalo de tempo em segundos de espera antes de reduzir a escala de 1 para 0 pods durante um evento de redução de escala. Só se aplica quando minReplicaCount está definido como 0. Mínimo: 0. Padrão: 300 segundos.

initialCooldownPeriod(Opcional, número inteiro)

O intervalo de tempo em segundos de espera antes de reduzir de 1 para 0 pods durante a implantação inicial. Só se aplica quando minReplicaCount está definido como 0. Mínimo: 0. Padrão: 300 segundos.

scaleDownStabilizationTime(Opcional, número inteiro)

A janela de tempo de estabilização em segundos após a ativação de um gatilho de redução de escala antes que a redução ocorra. Mínimo: 0. Padrão: 300 segundos.

scaleUpStabilizationTime(Opcional, número inteiro)

A janela de tempo de estabilização em segundos após a ativação de um gatilho de aumento de escala antes que a ampliação ocorra. Mínimo: 0. Padrão: 0 segundos.

cloudWatchTrigger

A configuração do gatilho para CloudWatch métricas usadas nas decisões de escalonamento automático. Os campos a seguir estão disponíveis emcloudWatchTrigger:

  • name(Opcional, String) - Nome do CloudWatch gatilho. Se não for fornecido, usa o formato padrão: < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics(Opcional, booleano) - Determina se as métricas consultadas pelo KEDA devem ser armazenadas em cache. O KEDA consulta métricas usando o PollingInterval, enquanto o Horizontal Pod Autoscaler (HPA) solicita métricas do KEDA a cada 15 segundos. Quando definidas como verdadeiras, as métricas consultadas são armazenadas em cache e usadas para atender às solicitações do HPA. Padrão: true.

  • namespace(Obrigatório, String) - O CloudWatch namespace da métrica a ser consultada.

  • metricName(Obrigatório, String) - O nome da CloudWatch métrica.

  • dimensions(Opcional, Lista) - A lista de dimensões da métrica. Cada dimensão inclui um nome (nome da dimensão - String) e um valor (valor da dimensão - String).

  • targetValue(Obrigatório, flutuante) - O valor alvo da CloudWatch métrica usada nas decisões de escalonamento automático.

  • activationTargetValue(Opcional, Float) - O valor alvo da CloudWatch métrica usada ao escalar de 0 a 1 pod. Só se aplica quando minReplicaCount está definido como 0. Padrão: 0.

  • minValue(Opcional, Float) - O valor a ser usado quando a CloudWatch consulta não retorna dados. Padrão: 0.

  • metricCollectionStartTime(Opcional, Integer) - A hora de início da consulta métrica, calculada como T- metricCollectionStart Time. Deve ser maior ou igual metricCollectionPeriod a. Padrão: 300 segundos.

  • metricCollectionPeriod(Opcional, número inteiro) - A duração da consulta métrica em segundos. Deve ser um valor CloudWatch suportado (1, 5, 10, 30 ou um múltiplo de 60). Padrão: 300 segundos.

  • metricStat(Opcional, String) - O tipo de estatística da CloudWatch consulta. Padrão: Average.

  • metricType(Opcional, String) - Define como a métrica é usada para cálculos de escala. Padrão: Average. Valores permitidos: Average, Value.

    • Média: réplicas desejadas = ceil (valor métrico)/(valor-alvo)

    • Valor: réplicas desejadas = (réplicas atuais) × ceil (Valor métrico)/(TargetValue)

prometheusTrigger

A configuração de gatilho para as métricas do Amazon Managed Prometheus (AMP) usadas em decisões de escalonamento automático. Os campos a seguir estão disponíveis emprometheusTrigger:

  • name(Opcional, String) - Nome do CloudWatch gatilho. Se não for fornecido, usa o formato padrão: < model-deployment-name >-scaled-object-cloudwatch-trigger.

  • useCachedMetrics(Opcional, booleano) - Determina se as métricas consultadas pelo KEDA devem ser armazenadas em cache. O KEDA consulta métricas usando o PollingInterval, enquanto o Horizontal Pod Autoscaler (HPA) solicita métricas do KEDA a cada 15 segundos. Quando definidas como verdadeiras, as métricas consultadas são armazenadas em cache e usadas para atender às solicitações do HPA. Padrão: true.

  • serverAddress(Obrigatório, String) - O endereço do servidor AMP. É necessário usar o formato: < https://aps-workspaces. <region>.amazonaws.com/workspaces/ <workspace_id>

  • query(Obrigatório, String) - A consulta PromQL usada para a métrica. Deve retornar um valor escalar.

  • targetValue(Obrigatório, flutuante) - O valor alvo da CloudWatch métrica usada nas decisões de escalonamento automático.

  • activationTargetValue(Opcional, Float) - O valor alvo da CloudWatch métrica usada ao escalar de 0 a 1 pod. Só se aplica quando minReplicaCount está definido como 0. Padrão: 0.

  • namespace(Opcional, String) - O namespace a ser usado para consultas com namespace. Padrão: string vazia ("").

  • customHeaders(Opcional, String) - Cabeçalhos personalizados a serem incluídos ao consultar o endpoint do Prometheus. Padrão: string vazia (“”).

  • metricType(Opcional, String) - Define como a métrica é usada para cálculos de escala. Padrão: Average. Valores permitidos: Average, Value.

    • Média: réplicas desejadas = ceil (valor métrico)/(valor-alvo)

    • Valor: réplicas desejadas = (réplicas atuais) × ceil (Valor métrico)/(TargetValue)

Usando as definições ScaledObject yaml do KEDA por meio do kubectl

Além de configurar o escalonamento automático por meio da autoScalingSpec seção em seu YAML de implantação, você pode criar e aplicar definições autônomas do ScaledObject KEDA YAML usando kubectl.

Essa abordagem fornece maior flexibilidade para cenários complexos de escalabilidade e permite que você gerencie políticas de escalonamento automático independentemente das implantações de seu modelo. ScaledObjectAs configurações do KEDA oferecem suporte a uma ampla variedade de acionadores de escalabilidade, incluindo métricas, comprimentos de fila do CloudWatch Amazon SQS, consultas do Prometheus e métricas baseadas em recursos, como utilização de CPU e memória. Você pode aplicar essas configurações às implantações de modelos existentes fazendo referência ao nome da implantação na scaleTargetRef seção da especificação. ScaledObject

nota

Certifique-se de que a função de operador keda fornecida durante a instalação do operador de HyperPod inferência tenha permissões adequadas para consultar as métricas definidas nos acionadores de objetos escalonados.

CloudWatch métricas

A política yaml da KEDA a seguir usa CloudWatch métricas como um gatilho para realizar o escalonamento automático em uma implantação do Kubernetes. A política consulta o número de invocações para um endpoint do Sagemaker e escala o número de pods de implantação. A lista completa de parâmetros suportados pelo KEDA para aws-cloudwatch gatilho pode ser encontrada em 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 do Amazon SQS

A política yaml da KEDA a seguir usa as métricas do Amazon SQS como um gatilho para realizar o escalonamento automático em uma implantação de kubernetes. A política consulta o número de invocações para um endpoint do Sagemaker e escala o número de pods de implantação. A lista completa de parâmetros suportados pelo KEDA para aws-cloudwatch gatilho pode ser encontrada em 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 do Prometheus

A política yaml da KEDA a seguir usa as métricas do Prometheus como um gatilho para realizar o escalonamento automático em uma implantação do Kubernetes. A política consulta o número de invocações para um endpoint do Sagemaker e escala o número de pods de implantação. A lista completa de parâmetros suportados pelo KEDA para aws-cloudwatch gatilho pode ser encontrada em 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

A política yaml da KEDA a seguir usa a métrica cpu como um gatilho para realizar o escalonamento automático em uma implantação do Kubernetes. A política consulta o número de invocações para um endpoint do Sagemaker e escala o número de pods de implantação. A lista completa de parâmetros suportados pelo KEDA para aws-cloudwatch gatilho pode ser encontrada em 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 memória

A política yaml da KEDA a seguir usa a consulta de métricas do Prometheus como um gatilho para realizar o escalonamento automático em uma implantação do Kubernetes. A política consulta o número de invocações para um endpoint do Sagemaker e escala o número de pods de implantação. A lista completa de parâmetros suportados pelo KEDA para aws-cloudwatch gatilho pode ser encontrada em 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

Exemplo da política do Prometheus para reduzir até 0 pods

A política yaml da KEDA a seguir usa a consulta de métricas do prometheus como um gatilho para realizar o escalonamento automático em uma implantação do Kubernetes. Essa política usa um minReplicaCount de 0, o que permite que a KEDA reduza a implantação para 0 pods. Quando minReplicaCount está definido como 0, você precisa fornecer um critério de ativação para abrir o primeiro pod, depois que os pods diminuírem para 0. Para o gatilho Prometheus, esse valor é fornecido por. activationThreshold Para a fila SQS, ela vem de. activationQueueLength

nota

Ao usar 0, certifique-se minReplicaCount de que a ativação não dependa de uma métrica que está sendo gerada pelos pods. Quando os pods diminuem para 0, essa métrica nunca será gerada e os pods não aumentarão novamente.

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

Os acionadores de CPU e memória podem ser escalados para 0 somente quando você define pelo menos um escalador adicional que não seja CPU ou memória (por exemplo. SQS + CPU ou Prometheus + CPU).