

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

# HyperPod 推論モデルのデプロイのオートスケーリングポリシー
<a name="sagemaker-hyperpod-model-deployment-autoscaling"></a>

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

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

## デプロイ YAML での autoScalingSpec の使用
<a name="sagemaker-hyperpod-model-deployment-autoscaling-yaml"></a>

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 で使用されるフィールドの説明
<a name="sagemaker-hyperpod-model-deployment-autoscaling-fields"></a>

`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`。使用できる値: `Average`、`Value`
  + **平均**: 希望するレプリカ数 = 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\$1id>
+ `query` (必須、文字列) - メトリクスに使用される PromQL クエリ。スカラー値を返す必要があります。
+ `targetValue` (必須、浮動小数点) - オートスケーリングの決定に使用される CloudWatch メトリクスのターゲット値
+ `activationTargetValue` (オプション、浮動小数点) - 0 から 1 ポッドにスケーリングする際に使用される CloudWatch メトリクスのターゲット値 `minReplicaCount` が 0 に設定されているときにのみ適用されます。デフォルト: 0。
+ `namespace` (オプション、文字列) - 名前空間クエリに使用する名前空間。デフォルト: 空の文字列 (`""`)
+ `customHeaders` (オプション、文字列) - Prometheus エンドポイントのクエリ時に含めるカスタムヘッダー。デフォルト: 空の文字列 ("")
+ `metricType` (オプション、文字列) - メトリクスをスケーリング計算に使用する方法を定義します。デフォルト: `Average`。使用できる値: `Average`、`Value`
  + **平均**: 希望するレプリカ数 = ceil (メトリクス値) / (targetValue)
  + **値**: 希望するレプリカ数 = (現在のレプリカ数)×ceil (メトリクス値) / (targetValue)

## kubectl を介した KEDA ScaledObject yaml 定義の使用
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl"></a>

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

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

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

### CloudWatch メトリクス
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cw"></a>

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

### Amazon SQS メトリクス
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sqs"></a>

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

### Prometheus メトリクス
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-prometheus"></a>

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

### CPU メトリクス
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-cpu"></a>

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

### メモリメトリクス
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-memory"></a>

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

## 0 ポッドにスケールダウンする Prometheus ポリシー例
<a name="sagemaker-hyperpod-model-deployment-autoscaling-kubectl-sample"></a>

次の 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 \$1 CPU、または Prometheus \$1 CPU など)。