Kebijakan penskalaan otomatis untuk penerapan model inferensi Anda HyperPod - Amazon SageMaker AI

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

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 YAMAL

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

Penjelasan bidang yang digunakan dalam penerapan YAMM

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 denganminReplicaCount. 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 dicloudWatchTrigger:

  • 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(Diperlukan, 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 diprometheusTrigger:

  • 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_id>

  • query(Wajib, String) - Kueri promQL yang digunakan untuk metrik. Harus mengembalikan nilai skalar.

  • targetValue(Diperlukan, 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

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. ScaledObjectKonfigurasi KEDA mendukung berbagai pemicu penskalaan 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

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/.

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

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/.

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

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/.

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

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/.

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

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/.

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

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 + CPU, atau Prometheus + CPU).