

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Politiche di scalabilità automatica per l'implementazione del modello di inferenza HyperPod
<a name="sagemaker-hyperpod-model-deployment-autoscaling"></a>

Le seguenti informazioni forniscono esempi pratici e configurazioni per l'implementazione di politiche di scalabilità automatica nelle implementazioni di modelli di inferenza Amazon SageMaker HyperPod . 

Scoprirai come configurare il dimensionamento automatico utilizzando `autoScalingSpec` integrato nei file YAML di implementazione e come creare configurazioni `ScaledObject` KEDA standalone per scenari di dimensionamento avanzati. Gli esempi riguardano i trigger di scalabilità basati su CloudWatch metriche, lunghezze delle code di Amazon SQS, query Prometheus e parametri di utilizzo delle risorse come CPU e memoria. 

## Utilizzo di YAML nella distribuzione autoScalingSpec
<a name="sagemaker-hyperpod-model-deployment-autoscaling-yaml"></a>

Amazon SageMaker HyperPod Inference Operator offre funzionalità di scalabilità automatica integrate per le implementazioni di modelli utilizzando i parametri di CloudWatch Amazon Managed Prometheus (AMP). Il file YAML di implementazione di esempio seguente include una sezione `autoScalingSpec` che definisce i valori di configurazione per scalare l’implementazione del modello.

```
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"
```

### Spiegazione dei campi utilizzati nel file YAML di implementazione
<a name="sagemaker-hyperpod-model-deployment-autoscaling-fields"></a>

`minReplicaCount` (Facoltativo, Numero intero)  
Specifica il numero minimo di repliche di implementazione del modello da mantenere nel cluster. Durante gli eventi di riduzione verticale, l’implementazione si riduce fino al numero minimo di pod indicato. Il valore deve essere maggiore o uguale a 0. Default: 1.

`maxReplicaCount` (Facoltativo, Numero intero)  
Specifica il numero massimo di repliche di implementazione del modello da mantenere nel cluster. Il valore deve essere maggiore o uguale a `minReplicaCount`. Durante gli eventi di aumento verticale, l’implementazione aumenta fino al numero massimo di pod indicato. Impostazione predefinita: 5.

`pollingInterval` (Facoltativo, Numero intero)  
L’intervallo di tempo in secondi per le query sulle metriche. Minimo: 0 Valore predefinito: 30 secondi.

`cooldownPeriod` (Facoltativo, Numero intero)  
Il tempo di attesa in secondi prima di passare da 1 a 0 pod durante un evento di riduzione verticale. Si applica solo quando `minReplicaCount` è impostato su 0. Minimo: 0 Impostazione predefinita: 300 secondi.

`initialCooldownPeriod` (Facoltativo, Numero intero)  
Il tempo di attesa in secondi prima di passare da 1 a 0 pod durante l’implementazione iniziale. Si applica solo quando `minReplicaCount` è impostato su 0. Minimo: 0 Impostazione predefinita: 300 secondi.

`scaleDownStabilizationTime` (Facoltativo, Numero intero)  
La finestra temporale di stabilizzazione in secondi tra l’attivazione di un trigger di riduzione verticale e l’effettiva riduzione verticale. Minimo: 0 Impostazione predefinita: 300 secondi.

`scaleUpStabilizationTime` (Facoltativo, Numero intero)  
La finestra temporale di stabilizzazione in secondi tra l’attivazione di un trigger di aumento verticale e l’effettivo aumento verticale. Minimo: 0 Impostazione predefinita: 0 secondi.

`cloudWatchTrigger`  
La configurazione di attivazione per le metriche utilizzate nelle decisioni di scalabilità automatica. CloudWatch In `cloudWatchTrigger` sono disponibili i seguenti campi:  
+ `name`(Facoltativo, stringa): nome del trigger. CloudWatch Se non viene fornito, utilizza il formato predefinito: < model-deployment-name >-scaled-object-cloudwatch-trigger.
+ `useCachedMetrics` (Facoltativo, Booleano): determina se memorizzare nella cache le metriche richieste da KEDA. KEDA esegue query sulle metriche utilizzando pollingInterval, mentre Horizontal Pod Autoscaler (HPA) richiede le metriche da KEDA ogni 15 secondi. Se impostata su true, le metriche sottoposte a query vengono memorizzate nella cache e utilizzate per soddisfare le richieste HPA. Default: true.
+ `namespace`(Obbligatorio, String) - Lo spazio dei CloudWatch nomi per la metrica da interrogare.
+ `metricName`(Obbligatorio, String): il nome della metrica. CloudWatch 
+ `dimensions` (Facoltativo, Elenco): l’elenco delle dimensioni per la metrica. Ogni dimensione include un nome (nome della dimensione - Stringa) e un valore (valore della dimensione - Stringa).
+ `targetValue`(Obbligatorio, Float): il valore target per la CloudWatch metrica utilizzata nelle decisioni di scalabilità automatica.
+ `activationTargetValue`(Facoltativo, Float): il valore target per la CloudWatch metrica utilizzata durante la scalatura da 0 a 1 pod. Si applica solo quando `minReplicaCount` è impostato su 0. Impostazione predefinita: 0.
+ `minValue`(Facoltativo, Float): il valore da utilizzare quando la CloudWatch query non restituisce dati. Impostazione predefinita: 0.
+ `metricCollectionStartTime`(Facoltativo, Integer): l'ora di inizio della query metrica, calcolata come T-Time. metricCollectionStart Deve essere maggiore o uguale a. metricCollectionPeriod Impostazione predefinita: 300 secondi.
+ `metricCollectionPeriod` (Facoltativo, Numero intero): la durata della query della metrica in secondi. Deve essere un valore CloudWatch supportato (1, 5, 10, 30 o un multiplo di 60). Impostazione predefinita: 300 secondi.
+ `metricStat`(Facoltativo, String): il tipo di statistica per la CloudWatch query. Default: `Average`.
+ `metricType` (Facoltativo, Stringa): definisce il modo in cui la metrica viene utilizzata per i calcoli di dimensionamento. Default: `Average`. Valori consentiti: `Average` e `Value`.
  + **Media**: repliche desiderate = ceil (valore metrica)/(targetValue)
  + **Valore**: repliche desiderate = (repliche correnti) × ceil (valore metrica)/(targetValue)

`prometheusTrigger`  
La configurazione dei trigger per le metriche di Amazon Managed Prometheus (AMP) utilizzate nelle decisioni di dimensionamento automatico. In `prometheusTrigger` sono disponibili i seguenti campi:  
+ `name`(Facoltativo, String): nome del CloudWatch trigger. Se non viene fornito, utilizza il formato predefinito: < model-deployment-name >-scaled-object-cloudwatch-trigger.
+ `useCachedMetrics` (Facoltativo, Booleano): determina se memorizzare nella cache le metriche richieste da KEDA. KEDA esegue query sulle metriche utilizzando pollingInterval, mentre Horizontal Pod Autoscaler (HPA) richiede le metriche da KEDA ogni 15 secondi. Se impostata su true, le metriche sottoposte a query vengono memorizzate nella cache e utilizzate per soddisfare le richieste HPA. Default: true.
+ `serverAddress` (Obbligatorio, Stringa): l’indirizzo del server AMP. È necessario utilizzare il formato: <https://aps-workspaces.<region>.amazonaws.com/workspaces/<workspace\$1id>
+ `query` (Obbligatorio, Stringa): la query PromQL utilizzata per la metrica. Deve restituire un valore scalare.
+ `targetValue`(Obbligatorio, Float): il valore target per la CloudWatch metrica utilizzata nelle decisioni di scalabilità automatica.
+ `activationTargetValue`(Facoltativo, Float): il valore target per la CloudWatch metrica utilizzata durante la scalatura da 0 a 1 pod. Si applica solo quando `minReplicaCount` è impostato su 0. Impostazione predefinita: 0.
+ `namespace` (Facoltativo, Stringa): il namespace da utilizzare per le query con namespace. Impostazione predefinita: stringa vuota (`""`).
+ `customHeaders` (Facoltativo, Stringa): intestazioni personalizzate da includere quando si esegue una query sull’endpoint Prometheus. Impostazione predefinita: stringa vuota (“”).
+ `metricType` (Facoltativo, Stringa): definisce il modo in cui la metrica viene utilizzata per i calcoli di dimensionamento. Default: `Average`. Valori consentiti: `Average` e `Value`.
  + **Media**: repliche desiderate = ceil (valore metrica)/(targetValue)
  + **Valore**: repliche desiderate = (repliche correnti) × ceil (valore metrica)/(targetValue)

## Utilizzo delle definizioni yaml KEDA ScaledObject tramite kubectl
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl"></a>

Oltre a configurare la scalabilità automatica tramite la autoScalingSpec sezione YAML della distribuzione, è possibile creare e applicare definizioni KEDA YAML autonome utilizzando kubectl. `ScaledObject`

Questo approccio offre una maggiore flessibilità in scenari di dimensionamento complessi e consente di gestire le policy di dimensionamento automatico indipendentemente dalle implementazioni dei modelli. `ScaledObject`Le configurazioni KEDA supportano un'[ampia gamma di trigger di scalabilità tra cui metriche](https://keda.sh/docs/2.17/scalers/), lunghezze delle code Amazon SQS CloudWatch , query Prometheus e metriche basate sulle risorse come l'utilizzo della CPU e della memoria. È possibile applicare queste configurazioni alle implementazioni di modelli esistenti facendo riferimento al nome della distribuzione nella sezione delle specifiche. scaleTargetRef ScaledObject 

**Nota**  
Assicurati che il ruolo di operatore keda fornito durante l'installazione dell'operatore HyperPod Inference disponga delle autorizzazioni adeguate per interrogare le metriche definite nei trigger degli oggetti in scala.

### CloudWatch metriche
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cw"></a>

La seguente policy KEDA yaml utilizza le CloudWatch metriche come trigger per eseguire la scalabilità automatica su una distribuzione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. [L'elenco completo dei parametri supportati da KEDA per il trigger è disponibile all'indirizzo https://keda. `aws-cloudwatch` 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
```

### Metriche Amazon SQS
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sqs"></a>

La policy yaml KEDA seguente utilizza le metriche di Amazon SQS come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. [L'elenco completo dei parametri supportati da KEDA per il `aws-cloudwatch` trigger è disponibile all'indirizzo 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
```

### Parametri Prometheus
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-prometheus"></a>

La policy yaml KEDA seguente utilizza le metriche di Prometheus come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. [L'elenco completo dei parametri supportati da KEDA per il `aws-cloudwatch` trigger è disponibile all'indirizzo 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
```

### Parametri CPU
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cpu"></a>

La policy yaml KEDA seguente utilizza le metriche cpu come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il `aws-cloudwatch` trigger è disponibile all'[indirizzo 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
```

### Parametri della memoria
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-memory"></a>

La policy yaml KEDA seguente utilizza la query delle metriche Prometheus come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. La policy esegue query sul numero di invocazioni per un endpoint SageMaker e dimensiona il numero di pod di implementazione. L'elenco completo dei parametri supportati da KEDA per il `aws-cloudwatch` trigger è disponibile all'[indirizzo 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
```

## Policy Prometheus di esempio per la riduzione verticale a 0 pod
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sample"></a>

La policy yaml KEDA seguente utilizza la query delle metriche Prometheus come trigger per eseguire il dimensionamento automatico su un’implementazione Kubernetes. Questa policy utilizza `minReplicaCount` pari a 0 che consente a KEDA di ridurre verticalmente l’implementazione fino a 0 pod. Quando `minReplicaCount` è impostato su 0, è necessario fornire un criterio di attivazione per far apparire il primo pod, dopo che i pod sono stati ridotti verticalmente a 0. Per il trigger Prometheus, questo valore è fornito da `activationThreshold`. Per la coda SQS, il valore proviene da `activationQueueLength`.

**Nota**  
Quando utilizzi `minReplicaCount` pari a 0, assicurati che l’attivazione non dipenda da una metrica generata dai pod. Quando i pod vengono ridotti verticalmente a 0, tale metrica non verrà mai generata e i pod non verranno più aumentati 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**  
I trigger della CPU e della memoria possono essere ridotti a 0 solo quando viene definito almeno uno scaler aggiuntivo non di tipo CPU o memoria (ad esempio SQS \$1 CPU o Prometheus \$1 CPU). 