HyperPod 推論モデルデプロイの Auto Scaling ポリシー - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

HyperPod 推論モデルデプロイの Auto Scaling ポリシー

以下の情報は、Amazon SageMaker HyperPod 推論モデルのデプロイに自動スケーリングポリシーを実装するための実用的な例と設定を示しています。

autoScalingSpec デプロイ YAML ファイルの組み込み を使用して自動スケーリングを設定する方法と、高度なスケーリングシナリオ用のスタンドアロン KEDA ScaledObject設定を作成する方法について説明します。この例では、CloudWatch メトリクス、Amazon SQS キューの長さ、Prometheus クエリ、CPU やメモリなどのリソース使用率メトリクスに基づくスケーリングトリガーについて説明します。

デプロイ YAML での autoScalingSpec の使用

Amazon SageMaker HyperPod 推論演算子は、CloudWatch と Amazon Managed Prometheus (AMP) のメトリクスを使用してモデルデプロイ用の組み込み自動スケーリング機能を提供します。次のデプロイ YAML の例には、モデルデプロイをスケーリングするための設定値を定義する autoScalingSpecセクションが含まれています。

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"

デプロイ YAML で使用されるフィールドの説明

minReplicaCount (オプション、整数)

クラスターで維持するモデルデプロイレプリカの最小数を指定します。スケールダウンイベント中、デプロイはこの最小数のポッドにスケールダウンします。0 以上である必要があります。デフォルト: 1。

maxReplicaCount (オプション、整数)

クラスターで維持するモデルデプロイレプリカの最大数を指定します。以上である必要がありますminReplicaCount。スケールアップイベント中、デプロイはこの最大数のポッドにスケールアップします。デフォルト: 5。

pollingInterval (オプション、整数)

メトリクスをクエリするための秒単位の時間間隔。最小値: 0。デフォルト: 30 秒。

cooldownPeriod (オプション、整数)

スケールダウンイベント中に 1 ポッドから 0 ポッドにスケールダウンするまで待機する秒単位の時間間隔。minReplicaCount が 0 に設定されている場合にのみ適用されます。最小値: 0。デフォルト: 300 秒。

initialCooldownPeriod (オプション、整数)

初期デプロイ中に 1 ポッドから 0 ポッドにスケールダウンするまで待機する秒単位の時間間隔。minReplicaCount が 0 に設定されている場合にのみ適用されます。最小値: 0。デフォルト: 300 秒。

scaleDownStabilizationTime (オプション、整数)

スケールダウントリガーがアクティブ化されてからスケールダウンが発生するまでの秒単位の安定化時間枠。最小値: 0。デフォルト: 300 秒。

scaleUpStabilizationTime (オプション、整数)

スケールアップトリガーがアクティブ化されてからスケールアップが発生するまでの秒単位の安定化時間枠。最小値: 0。デフォルト: 0 秒。

cloudWatchTrigger

自動スケーリングの決定に使用される CloudWatch メトリクスのトリガー設定。では、次のフィールドを使用できますcloudWatchTrigger

  • name (オプション、文字列) - CloudWatch トリガーの名前。指定しない場合、 はデフォルトの形式 <model-deployment-name>-scaled-object-cloudwatch-trigger を使用します。

  • useCachedMetrics (オプション、ブール値) - KEDA によってクエリされたメトリクスをキャッシュするかどうかを決定します。KEDA は pollingInterval を使用してメトリクスをクエリし、Horizontal Pod Autoscaler (HPA) は 15 秒ごとに KEDA にメトリクスをリクエストします。true に設定すると、クエリされたメトリクスがキャッシュされ、HPA リクエストの処理に使用されます。デフォルト: true。

  • namespace (必須、文字列) - クエリするメトリクスの CloudWatch 名前空間。

  • metricName (必須、文字列) - CloudWatch メトリクスの名前。

  • dimensions (オプション、リスト) - メトリクスのディメンションのリスト。各ディメンションには、名前 (ディメンション名 - 文字列) と値 (ディメンション値 - 文字列) が含まれます。

  • targetValue (必須、浮動小数点) - 自動スケーリングの決定に使用される CloudWatch メトリクスのターゲット値。

  • activationTargetValue (オプション、Float) - 0 から 1 ポッドへのスケーリング時に使用する CloudWatch メトリクスのターゲット値。minReplicaCount が 0 に設定されている場合にのみ適用されます。デフォルト: 0。

  • minValue (オプション、Float) - CloudWatch クエリがデータを返さないときに使用する値。デフォルト: 0。

  • metricCollectionStartTime (オプション、整数) - T-metricCollectionStartTime として計算されたメトリクスクエリの開始時刻。metricCollectionPeriod 以上である必要があります。デフォルト: 300 秒。

  • metricCollectionPeriod (オプション、整数) - メトリクスクエリの秒単位の期間。CloudWatch がサポートする値 (1、5、10、30、または 60 の倍数) である必要があります。デフォルト: 300 秒。

  • metricStat (オプション、文字列) - CloudWatch クエリの統計タイプ。デフォルト: Average

  • metricType (オプション、文字列) - メトリクスをスケーリング計算に使用する方法を定義します。デフォルト: Average。使用できる値: AverageValue

    • 平均: 希望するレプリカ = ceil (メトリクス値) / (targetValue)

    • : 必要なレプリカ = (現在のレプリカ) × ceil (メトリクス値) / (targetValue)

prometheusTrigger

自動スケーリングの決定に使用される Amazon Managed Prometheus (AMP) メトリクスのトリガー設定。では、次のフィールドを使用できますprometheusTrigger

  • name (オプション、文字列) - CloudWatch トリガーの名前。指定しない場合、 はデフォルトの形式 <model-deployment-name>-scaled-object-cloudwatch-trigger を使用します。

  • useCachedMetrics (オプション、ブール値) - KEDA によってクエリされたメトリクスをキャッシュするかどうかを決定します。KEDA は pollingInterval を使用してメトリクスをクエリし、Horizontal Pod Autoscaler (HPA) は 15 秒ごとに KEDA にメトリクスをリクエストします。true に設定すると、クエリされたメトリクスがキャッシュされ、HPA リクエストの処理に使用されます。デフォルト: true。

  • serverAddress (必須、文字列) - AMP サーバーのアドレス。次の形式を使用する必要があります: <https://aps-workspaces.<region>.amazonaws.com/workspaces/<workspace_id>

  • query (必須、文字列) - メトリクスに使用される PromQL クエリ。スカラー値を返す必要があります。

  • targetValue (必須、浮動小数点) - 自動スケーリングの決定に使用される CloudWatch メトリクスのターゲット値。

  • activationTargetValue (オプション、Float) - 0 から 1 ポッドへのスケーリング時に使用する CloudWatch メトリクスのターゲット値。minReplicaCount が 0 に設定されている場合にのみ適用されます。デフォルト: 0。

  • namespace (オプション、文字列) - 名前空間クエリに使用する名前空間。デフォルト: 空の文字列 ("")。

  • customHeaders (オプション、文字列) - Prometheus エンドポイントのクエリ時に含めるカスタムヘッダー。デフォルト: 空の文字列 (")。

  • metricType (オプション、文字列) - メトリクスをスケーリング計算に使用する方法を定義します。デフォルト: Average。使用できる値: AverageValue

    • 平均: 希望するレプリカ = ceil (メトリクス値) / (targetValue)

    • : 必要なレプリカ = (現在のレプリカ) × ceil (メトリクス値) / (targetValue)

kubectl による KEDA ScaledObject yaml 定義の使用

デプロイ YAML の autoScalingSpec セクションを使用して自動スケーリングを設定するだけでなく、kubectl を使用してスタンドアロンの KEDA ScaledObject YAML 定義を作成して適用することもできます。

このアプローチにより、複雑なスケーリングシナリオの柔軟性が向上し、モデルデプロイとは別に自動スケーリングポリシーを管理できます。KEDA ScaledObject設定は、CloudWatch メトリクス、Amazon SQS キューの長さ、Prometheus クエリ、CPU やメモリ使用率などのリソースベースのメトリクスなど、幅広いスケーリングトリガーをサポートします。これらの設定を既存のモデルデプロイに適用するには、ScaledObject 仕様の scaleTargetRef セクションでデプロイ名を参照します。

注記

HyperPod Inference 演算子のインストール時に提供される keda 演算子ロールに、スケーリングされたオブジェクトトリガーで定義されたメトリクスをクエリするための適切なアクセス許可があることを確認します。

CloudWatch メトリクス

次の KEDA yaml ポリシーでは、CloudWatch メトリクスをトリガーとして使用して、kubernetes デプロイで自動スケーリングを実行します。このポリシーは、Sagemaker エンドポイントの呼び出し数をクエリし、デプロイポッドの数をスケーリングします。aws-cloudwatch トリガー用に KEDA でサポートされているパラメータの完全なリストは、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

Amazon SQSメトリクス

次の KEDA yaml ポリシーでは、Amazon SQS メトリクスをトリガーとして使用して、kubernetes デプロイで自動スケーリングを実行します。このポリシーは、Sagemaker エンドポイントの呼び出し数をクエリし、デプロイポッドの数をスケーリングします。aws-cloudwatch トリガー用に KEDA でサポートされているパラメータの完全なリストは、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

Prometheus メトリクス

次の KEDA yaml ポリシーでは、Prometheus メトリクスをトリガーとして使用して、kubernetes デプロイで自動スケーリングを実行します。このポリシーは、Sagemaker エンドポイントの呼び出し数をクエリし、デプロイポッドの数をスケーリングします。aws-cloudwatch トリガー用に KEDA でサポートされているパラメータの完全なリストは、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

CPU メトリクス

次の KEDA yaml ポリシーでは、cpu メトリクスをトリガーとして使用して、kubernetes デプロイで自動スケーリングを実行します。このポリシーは、Sagemaker エンドポイントの呼び出し数をクエリし、デプロイポッドの数をスケーリングします。aws-cloudwatch トリガー用に KEDA でサポートされているパラメータの完全なリストは、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

メモリメトリクス

次の KEDA yaml ポリシーでは、Prometheus メトリクスクエリをトリガーとして使用して、kubernetes デプロイで自動スケーリングを実行します。このポリシーは、Sagemaker エンドポイントの呼び出し数をクエリし、デプロイポッドの数をスケーリングします。aws-cloudwatch トリガー用に KEDA でサポートされているパラメータの完全なリストは、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

ポッドを 0 個にスケールダウンするための Prometheus ポリシーの例

次の KEDA yaml ポリシーでは、kubernetes デプロイで自動スケーリングを実行するトリガーとして prometheus メトリクスクエリを使用します。このポリシーでは、KEDA がデプロイを minReplicaCount 0 ポッドにスケールダウンできるようにする 0 を使用します。minReplicaCount が 0 に設定されている場合、ポッドが 0 にスケールダウンした後、最初のポッドを起動するためにアクティベーション基準を指定する必要があります。Prometheus トリガーの場合、この値は によって提供されますactivationThreshold。SQS キューの場合は、 から取得されますactivationQueueLength

注記

0 minReplicaCountの使用中は、アクティベーションがポッドによって生成されるメトリクスに依存していないことを確認してください。ポッドが 0 にスケールダウンすると、そのメトリクスは生成されず、ポッドは再びスケールアップされません。

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
注記

CPU トリガーとメモリトリガーは、CPU またはメモリ (例: SQS + CPU、または Prometheus + CPU)。