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 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
(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 ketikaminReplicaCount
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_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 ketikaminReplicaCount
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. ScaledObject
Konfigurasi KEDA mendukung berbagai pemicu penskalaan
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).