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 em
cloudWatchTrigger
:-
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 quandominReplicaCount
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 em
prometheusTrigger
:-
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 quandominReplicaCount
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. ScaledObject
As configurações do KEDA oferecem suporte a uma ampla variedade de acionadores de escalabilidade
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).