HyperPod 推論モデルのデプロイのオートスケーリングポリシー - Amazon SageMaker AI

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

HyperPod 推論モデルのデプロイのオートスケーリングポリシー

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

デプロイ YAML ファイルに組み込まれている autoScalingSpec を使用してオートスケーリングを設定する方法と、高度なスケーリングシナリオ向けにスタンドアロンの 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/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"

デプロイ 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 (オプション、浮動小数点) - 0 から 1 ポッドにスケーリングする際に使用される CloudWatch メトリクスのターゲット値 minReplicaCount が 0 に設定されているときにのみ適用されます。デフォルト: 0。

  • minValue (オプション、浮動小数点) - 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 (オプション、浮動小数点) - 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 ポリシーでは、Prometheus メトリクスクエリをトリガーとして使用して、kubernetes デプロイでオートスケーリングを実行します。このポリシーでは、KEDA がデプロイを 0 ポッドにスケールダウンできるようにする 0 の minReplicaCount を使用します。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またはメモリ以外のスケーラーを少なくとも 1 つ定義した場合にのみ 0 にスケールできます (SQS + CPU、または Prometheus + CPU など)。