

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
<a name="sagemaker-hyperpod-model-deployment-autoscaling"></a>

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á a configurar o ajuste de escala automático usando o `autoScalingSpec` integrado em seus arquivos YAML de implantação, bem como criar configurações autônomas de `ScaledObject` do KEDA para cenários de ajuste escala avançado. 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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-yaml"></a>

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 seção `autoScalingSpec` que define os valores de configuração para escalar a implantação do 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"
```

### Explicação sobre os campos usados na implantação do YAML
<a name="sagemaker-hyperpod-model-deployment-autoscaling-fields"></a>

`minReplicaCount` (opcional, 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 da escala vertical, a implantação reduz a escala verticalmente para esse número mínimo de pods. Deve ser maior que ou igual a 0. Padrão: 1.

`maxReplicaCount` (opcional, inteiro)  
Especifica o número máximo de réplicas de implantação do modelo a serem mantidas no cluster. Ele deve ser maior que ou igual a `minReplicaCount`. Durante eventos de aumento da escala vertical, a implantação aumenta a escala verticalmente para esse número mínimo de pods. Padrão: 5.

`pollingInterval` (opcional, inteiro)  
O intervalo de tempo em segundos para consultar métricas. Mínimo: 0. Padrão: 30 segundos.

`cooldownPeriod` (opcional, inteiro)  
O intervalo de tempo de espera em segundos antes de reduzir a escala verticalmente de 1 para 0 pod durante um evento de redução da escala vertical. Aplicável somente quando `minReplicaCount` está definido como 0. Mínimo: 0. Padrão: 300 segundos.

`initialCooldownPeriod` (opcional, inteiro)  
O intervalo de tempo de espera em segundos antes de reduzir a escala verticalmente de 1 para 0 pod durante a implantação inicial. Aplicável somente quando `minReplicaCount` está definido como 0. Mínimo: 0. Padrão: 300 segundos.

`scaleDownStabilizationTime` (opcional, inteiro)  
O intervalo de tempo de estabilização em segundos entre a ativação de um acionador de redução da escala vertical e o momento em que a redução da escala vertical ocorre. Mínimo: 0. Padrão: 300 segundos.

`scaleUpStabilizationTime` (opcional, inteiro)  
O intervalo de tempo de estabilização em segundos entre a ativação de um acionador de aumento da escala vertical e o momento em que o aumento da escala vertical ocorre. 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 seguintes campos opcionais 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, booliano): determina se as métricas consultadas pelo KEDA devem ser armazenadas em cache. O KEDA consulta métricas usando 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 e string) e um valor (valor da dimensão e 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. Aplicável somente 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, inteiro): a duração da consulta de métricas 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 ajuste de escala. Padrão: `Average`. Valores permitidos: `Average`, `Value`.
  + **Média**: réplicas desejadas = ceil (valor da métrica)/(targetValue)
  + **Valor**: réplicas desejadas = (réplicas atuais) × ceil (valor da métrica)/(targetValue)

`prometheusTrigger`  
A configuração do acionador para as métricas do Amazon Managed Service for Prometheus (AMP) usadas em decisões de ajuste de escala automático. Os seguintes campos opcionais 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, booliano): determina se as métricas consultadas pelo KEDA devem ser armazenadas em cache. O KEDA consulta métricas usando 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 do AMP. É necessário usar o formato: <https://aps-workspaces.<region>.amazonaws.com/workspaces/<workspace\$1id>.
+ `query` (obrigatório, string): a consulta PromQL usada para a métrica. Deve exibir 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. Aplicável somente 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 ajuste de escala. Padrão: `Average`. Valores permitidos: `Average`, `Value`.
  + **Média**: réplicas desejadas = ceil (valor da métrica)/(targetValue)
  + **Valor**: réplicas desejadas = (réplicas atuais) × ceil (valor da métrica)/(targetValue)

## Usando as definições ScaledObject yaml do KEDA por meio do kubectl
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl"></a>

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 oferece maior flexibilidade para cenários complexos de ajuste de escala e permite que você gerencie políticas de ajuste de escala 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](https://keda.sh/docs/2.17/scalers/), 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 name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cw"></a>

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/](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 name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sqs"></a>

A política yaml do KEDA a seguir usa métricas do Amazon SQS como um acionador para realizar o ajuste de escala 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-sqs/](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 name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-prometheus"></a>

A política yaml do KEDA a seguir usa métricas do Prometheus como um acionador para realizar o ajuste de escala 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](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 name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cpu"></a>

A política yaml do KEDA a seguir usa métricas de CPU como um acionador para realizar o ajuste de escala 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](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 name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-memory"></a>

A política yaml do KEDA a seguir usa a consulta de métricas do Prometheus como um acionador para realizar o ajuste de escala 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](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 de política do Prometheus para reduzir a escala verticalmente até 0 pod
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sample"></a>

A política yaml do KEDA a seguir usa a consulta de métricas do Prometheus como um acionador para realizar o ajuste de escala automático em uma implantação do Kubernetes. Essa política usa uma `minReplicaCount` de 0, o que permite que o KEDA reduza a escala da implantação verticalmente para 0 pod. Quando `minReplicaCount` está definida como 0, você precisa fornecer um critério de ativação para trazer o primeiro pod, após a redução da escala vertical dos pods para 0. Para o acionador do Prometheus, esse valor é fornecido por `activationThreshold`. Para a fila do SQS, ele vem de `activationQueueLength`.

**nota**  
Ao usar 0 em `minReplicaCount`, a ativação não deverá depender de uma métrica que está sendo gerada pelos pods. Quando a escala vertical dos pods for reduzida para 0, essa métrica nunca será gerada e não será possível aumentar novamente a escala vertical dos pods.

```
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 (p. ex., SQS \$1 CPU ou Prometheus \$1 CPU). 