

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kebijakan penskalaan otomatis untuk penerapan model inferensi Anda HyperPod
<a name="sagemaker-hyperpod-model-deployment-autoscaling"></a>

Informasi berikut ini memberikan contoh dan konfigurasi praktis untuk menerapkan kebijakan penskalaan otomatis pada penerapan model inferensi Amazon SageMaker HyperPod . 

Anda akan mempelajari cara mengonfigurasi penskalaan otomatis menggunakan file `autoScalingSpec` YAMAL bawaan dalam penerapan Anda, serta cara membuat `ScaledObject` konfigurasi KEDA mandiri untuk skenario penskalaan lanjutan. Contohnya mencakup pemicu penskalaan berdasarkan CloudWatch metrik, panjang antrian Amazon SQS, kueri Prometheus, dan metrik pemanfaatan sumber daya seperti CPU dan memori. 

## Menggunakan autoScalingSpec dalam penerapan YAMM
<a name="sagemaker-hyperpod-model-deployment-autoscaling-yaml"></a>

Operator SageMaker HyperPod inferensi Amazon menyediakan kemampuan penskalaan otomatis bawaan untuk penerapan model menggunakan metrik dari dan CloudWatch Amazon Managed Prometheus (AMP). Contoh YAMAL penerapan berikut mencakup `autoScalingSpec` bagian yang menentukan nilai konfigurasi untuk penskalaan penerapan model Anda.

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

### Penjelasan bidang yang digunakan dalam penerapan YAMM
<a name="sagemaker-hyperpod-model-deployment-autoscaling-fields"></a>

`minReplicaCount`(Opsional, Integer)  
Menentukan jumlah minimum replika penerapan model untuk mempertahankan di cluster. Selama peristiwa scale-down, penerapan skala ke jumlah minimum pod ini. Harus lebih besar dari atau sama dengan 0. Default: 1.

`maxReplicaCount`(Opsional, Integer)  
Menentukan jumlah maksimum replika penerapan model untuk mempertahankan di cluster. Harus lebih besar dari atau sama dengan`minReplicaCount`. Selama peristiwa peningkatan skala, penerapan menskalakan hingga jumlah maksimum pod ini. Default: 5.

`pollingInterval`(Opsional, Integer)  
Interval waktu dalam hitungan detik untuk menanyakan metrik. Minimal: 0. Default: 30 detik.

`cooldownPeriod`(Opsional, Integer)  
Interval waktu dalam hitungan detik untuk menunggu sebelum menurunkan skala dari 1 ke 0 pod selama acara scale-down. Hanya berlaku ketika `minReplicaCount` disetel ke 0. Minimal: 0. Default: 300 detik.

`initialCooldownPeriod`(Opsional, Integer)  
Interval waktu dalam hitungan detik untuk menunggu sebelum menurunkan skala dari 1 ke 0 pod selama penerapan awal. Hanya berlaku ketika `minReplicaCount` disetel ke 0. Minimal: 0. Default: 300 detik.

`scaleDownStabilizationTime`(Opsional, Integer)  
Jendela waktu stabilisasi dalam hitungan detik setelah pemicu penskalaan turun diaktifkan sebelum penskalaan turun terjadi. Minimal: 0. Default: 300 detik.

`scaleUpStabilizationTime`(Opsional, Integer)  
Jendela waktu stabilisasi dalam hitungan detik setelah pemicu peningkatan skala diaktifkan sebelum penskalaan terjadi. Minimal: 0. Default: 0 detik.

`cloudWatchTrigger`  
Konfigurasi pemicu untuk CloudWatch metrik yang digunakan dalam keputusan penskalaan otomatis. Bidang berikut tersedia di`cloudWatchTrigger`:  
+ `name`(Opsional, String) - Nama untuk CloudWatch pemicu. Jika tidak disediakan, gunakan format default: < model-deployment-name >-scaled-object-cloudwatch-trigger.
+ `useCachedMetrics`(Opsional, Boolean) - Menentukan apakah metrik cache yang ditanyakan oleh KEDA. KEDA melakukan kueri metrik menggunakan PollingInterval, sedangkan Horizontal Pod Autoscaler (HPA) meminta metrik dari KEDA setiap 15 detik. Ketika disetel ke true, metrik kueri di-cache dan digunakan untuk melayani permintaan HPA. Default: benar.
+ `namespace`(Wajib, String) - CloudWatch Namespace untuk metrik untuk query.
+ `metricName`(Wajib, String) - Nama CloudWatch metrik.
+ `dimensions`(Opsional, Daftar) - Daftar dimensi untuk metrik. Setiap dimensi mencakup nama (nama dimensi - String) dan nilai (nilai dimensi - String).
+ `targetValue`(Wajib, Mengambang) - Nilai target untuk CloudWatch metrik yang digunakan dalam keputusan penskalaan otomatis.
+ `activationTargetValue`(Opsional, Float) - Nilai target untuk CloudWatch metrik yang digunakan saat penskalaan dari 0 hingga 1 pod. Hanya berlaku ketika `minReplicaCount` disetel ke 0. Default: 0.
+ `minValue`(Opsional, Float) - Nilai yang digunakan saat CloudWatch query tidak mengembalikan data. Default: 0.
+ `metricCollectionStartTime`(Opsional, Integer) - Waktu mulai untuk kueri metrik, dihitung sebagai T- metricCollectionStart Waktu. Harus lebih besar dari atau sama dengan metricCollectionPeriod. Default: 300 detik.
+ `metricCollectionPeriod`(Opsional, Integer) - Durasi untuk kueri metrik dalam hitungan detik. Harus berupa nilai yang CloudWatch didukung (1, 5, 10, 30, atau kelipatan 60). Default: 300 detik.
+ `metricStat`(Opsional, String) - Jenis statistik untuk CloudWatch kueri. Default: `Average`.
+ `metricType`(Opsional, String) - Mendefinisikan bagaimana metrik digunakan untuk perhitungan penskalaan. Default: `Average`. Nilai yang diizinkan:`Average`,`Value`.
  + **Rata-rata**: Replika yang diinginkan = ceil (Nilai Metrik)/(TargetValue)
  + **Nilai**: Replika yang diinginkan = (replika saat ini) × ceil (Nilai Metrik)/(TargetValue)

`prometheusTrigger`  
Konfigurasi pemicu untuk metrik Amazon Managed Prometheus (AMP) yang digunakan dalam keputusan penskalaan otomatis. Bidang berikut tersedia di`prometheusTrigger`:  
+ `name`(Opsional, String) - Nama untuk CloudWatch pemicu. Jika tidak disediakan, gunakan format default: < model-deployment-name >-scaled-object-cloudwatch-trigger.
+ `useCachedMetrics`(Opsional, Boolean) - Menentukan apakah metrik cache yang ditanyakan oleh KEDA. KEDA melakukan kueri metrik menggunakan PollingInterval, sedangkan Horizontal Pod Autoscaler (HPA) meminta metrik dari KEDA setiap 15 detik. Ketika disetel ke true, metrik kueri di-cache dan digunakan untuk melayani permintaan HPA. Default: benar.
+ `serverAddress`(Wajib, String) - Alamat server AMP. Harus menggunakan format: < https://aps-workspaces. <region>.amazonaws.com/workspaces/ <workspace\$1id>
+ `query`(Wajib, String) - Kueri promQL yang digunakan untuk metrik. Harus mengembalikan nilai skalar.
+ `targetValue`(Wajib, Mengambang) - Nilai target untuk CloudWatch metrik yang digunakan dalam keputusan penskalaan otomatis.
+ `activationTargetValue`(Opsional, Float) - Nilai target untuk CloudWatch metrik yang digunakan saat penskalaan dari 0 hingga 1 pod. Hanya berlaku ketika `minReplicaCount` disetel ke 0. Default: 0.
+ `namespace`(Opsional, String) - Namespace yang digunakan untuk kueri namespaced. Default: string kosong (`""`).
+ `customHeaders`(Opsional, String) - Header khusus untuk disertakan saat menanyakan titik akhir Prometheus. Default: string kosong (“”).
+ `metricType`(Opsional, String) - Mendefinisikan bagaimana metrik digunakan untuk perhitungan penskalaan. Default: `Average`. Nilai yang diizinkan:`Average`,`Value`.
  + **Rata-rata**: Replika yang diinginkan = ceil (Nilai Metrik)/(TargetValue)
  + **Nilai**: Replika yang diinginkan = (replika saat ini) × ceil (Nilai Metrik)/(TargetValue)

## Menggunakan definisi ScaledObject yaml KEDA melalui kubectl
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl"></a>

Selain mengonfigurasi penskalaan otomatis melalui autoScalingSpec bagian dalam penerapan YAMB, Anda dapat membuat dan menerapkan definisi YAMG KEDA mandiri menggunakan kubectl. `ScaledObject`

Pendekatan ini memberikan fleksibilitas yang lebih besar untuk skenario penskalaan yang kompleks dan memungkinkan Anda mengelola kebijakan penskalaan otomatis secara independen dari penerapan model Anda. `ScaledObject`Konfigurasi KEDA mendukung [berbagai pemicu penskalaan](https://keda.sh/docs/2.17/scalers/) termasuk metrik, panjang antrian Amazon SQS CloudWatch , kueri Prometheus, dan metrik berbasis sumber daya seperti CPU dan pemanfaatan memori. Anda dapat menerapkan konfigurasi ini ke penerapan model yang ada dengan mereferensikan nama penerapan di bagian scaleTargetRef spesifikasi. ScaledObject 

**catatan**  
Pastikan peran operator keda yang disediakan selama instalasi operator HyperPod Inference memiliki izin yang memadai untuk menanyakan metrik yang ditentukan dalam pemicu objek yang diskalakan.

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

Kebijakan yaml KEDA berikut menggunakan CloudWatch metrik sebagai pemicu untuk melakukan penskalaan otomatis pada penerapan kubernetes. Kebijakan tersebut menanyakan jumlah pemanggilan untuk titik akhir Sagemaker dan menskalakan jumlah pod penerapan. Daftar lengkap parameter yang didukung oleh KEDA untuk `aws-cloudwatch` pemicu dapat ditemukan di [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
```

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

Kebijakan yaml KEDA berikut menggunakan metrik Amazon SQS sebagai pemicu untuk melakukan penskalaan otomatis pada penerapan kubernetes. Kebijakan tersebut menanyakan jumlah pemanggilan untuk titik akhir Sagemaker dan menskalakan jumlah pod penerapan. Daftar lengkap parameter yang didukung oleh KEDA untuk `aws-cloudwatch` pemicu dapat ditemukan di [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
```

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

Kebijakan yaml KEDA berikut menggunakan metrik Prometheus sebagai pemicu untuk melakukan penskalaan otomatis pada penerapan kubernetes. Kebijakan tersebut menanyakan jumlah pemanggilan untuk titik akhir Sagemaker dan menskalakan jumlah pod penerapan. Daftar lengkap parameter yang didukung oleh KEDA untuk `aws-cloudwatch` pemicu dapat ditemukan di [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
```

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

Kebijakan yaml KEDA berikut menggunakan metrik cpu sebagai pemicu untuk melakukan penskalaan otomatis pada penerapan kubernetes. Kebijakan tersebut menanyakan jumlah pemanggilan untuk titik akhir Sagemaker dan menskalakan jumlah pod penerapan. Daftar lengkap parameter yang didukung oleh KEDA untuk `aws-cloudwatch` pemicu dapat ditemukan di [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
```

### Metrik memori
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-memory"></a>

Kebijakan yaml KEDA berikut menggunakan kueri metrik Prometheus sebagai pemicu untuk melakukan penskalaan otomatis pada penerapan kubernetes. Kebijakan tersebut menanyakan jumlah pemanggilan untuk titik akhir Sagemaker dan menskalakan jumlah pod penerapan. Daftar lengkap parameter yang didukung oleh KEDA untuk `aws-cloudwatch` pemicu dapat ditemukan di [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
```

## Contoh kebijakan Prometheus untuk menurunkan skala ke 0 pod
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sample"></a>

Kebijakan yaml KEDA berikut menggunakan kueri metrik prometheus sebagai pemicu untuk melakukan penskalaan otomatis pada penerapan kubernetes. Kebijakan ini menggunakan 0 `minReplicaCount` yang memungkinkan KEDA untuk menskalakan penerapan ke 0 pod. Ketika `minReplicaCount` diatur ke 0, Anda perlu memberikan kriteria aktivasi untuk memunculkan pod pertama, setelah pod diturunkan ke 0. Untuk pemicu Prometheus, nilai ini disediakan oleh. `activationThreshold` Untuk antrian SQS, itu berasal dari. `activationQueueLength`

**catatan**  
Saat menggunakan `minReplicaCount` 0, pastikan aktivasi tidak bergantung pada metrik yang dihasilkan oleh pod. Ketika pod diturunkan ke 0, metrik itu tidak akan pernah dihasilkan dan pod tidak akan ditingkatkan lagi.

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

**catatan**  
Pemicu CPU dan Memori dapat menskalakan ke 0 hanya ketika Anda menentukan setidaknya satu scaler tambahan yang bukan CPU atau Memori (mis. SQS \$1 CPU, atau Prometheus \$1 CPU). 