

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

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

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

`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 `minReplicaCount` se 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 `minReplicaCount` se 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 `cloudWatchTrigger` está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 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): 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 `prometheusTrigger` está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\$1id>
+ `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 cuando `minReplicaCount` se 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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl"></a>

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. `ScaledObject`Las configuraciones de KEDA admiten una [amplia gama de activadores de escalado](https://keda.sh/docs/2.17/scalers/), 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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cw"></a>

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](https://keda.sh/docs/2.17/scalers/aws-cloudwatch/)-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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sqs"></a>

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](https://keda.sh/docs/2.17/scalers/aws-sqs/)-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
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-prometheus"></a>

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](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>

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

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

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 \$1 CPU o Prometheus \$1 CPU). 