

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

# SageMaker HyperPod EKS での Auto Scaling
<a name="sagemaker-hyperpod-eks-autoscaling"></a>

Amazon SageMaker HyperPod は、EKS オーケストレーションで作成されたクラスター用のマネージド Karpenter ベースのノードオートスケーリングソリューションを提供します。[Karpenter](https://karpenter.sh/) は、クラスターのスケーリングとコスト効率を最適化 AWS する、 によって構築されたオープンソースの Kubernetes ノードライフサイクルマネージャーです。セルフマネージド Karpenter デプロイとは異なり、SageMaker HyperPod のマネージド実装は、統合された耐障害性と回復力を提供しながら、Karpenter コントローラーのインストール、設定、保守に伴う運用上のオーバーヘッドを排除します。このマネージドオートスケーリングソリューションは、HyperPod の[継続的プロビジョニング](sagemaker-hyperpod-scaling-eks.md)機能に基づいて構築されており、自動障害処理と復旧により、トレーニングおよび推論ワークロードのコンピューティングリソースを効率的にスケールできます。

お支払いいただくのは、使用分の料金だけです。SageMaker HyperPod の標準料金に従って、オートスケーリングが自動的にプロビジョンするすべてのコンピューティングインスタンスに対して料金が発生します。詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/ai/pricing/)」を参照してください。

HyperPod で Karpenter ベースのオートスケーリングを有効にすると、以下にアクセスできます。
+ **サービスマネージドライフサイクル** - HyperPod は Karpenter のインストール、更新、メンテナンスを処理し、運用上のオーバーヘッドを排除します。
+ **ジャストインタイムプロビジョニング** - Karpenter は保留中のポッドを監視し、オンデマンドプールからワークロードに必要なコンピューティングをプロビジョンします。
+ **ゼロにスケール**する - 専用コントローラーインフラストラクチャを維持せずに、ノードをゼロにスケールダウンします。
+ **ワークロード対応ノードの選択** - Karpenter は、ポッドの要件、アベイラビリティーゾーン、料金に基づいて最適なインスタンスタイプを選択し、コストを最小限に抑えます。
+ **自動ノード統合** - Karpenter は、最適化の機会についてクラスターを定期的に評価し、ワークロードを移行して使用率の低いノードを排除します。
+ **統合レジリエンス** - HyperPod の組み込み耐障害性とノード復旧メカニズムを活用します。

以下のトピックでは、Karpenter で HyperPod オートスケーリングを有効にする方法について説明します。

**Topics**
+ [前提条件](#sagemaker-hyperpod-eks-autoscaling-prereqs)
+ [Karpenter で HyperPod オートスケーリングの IAM ロールを作成する](sagemaker-hyperpod-eks-autoscaling-iam.md)
+ [Karpenter オートスケーリングを使用した HyperPod クラスターを作成して設定する](sagemaker-hyperpod-eks-autoscaling-cluster.md)
+ [NodeClass を作成する](sagemaker-hyperpod-eks-autoscaling-nodeclass.md)
+ [ノードプール を作成する](sagemaker-hyperpod-eks-autoscaling-nodepool.md)
+ [ワークロードをデプロイします。](sagemaker-hyperpod-eks-autoscaling-workload.md)

## 前提条件
<a name="sagemaker-hyperpod-eks-autoscaling-prereqs"></a>
+ HyperPod クラスターで継続的プロビジョニングが有効になっていること。SageMaker HyperPod クラスターの作成時に `--node-provisioning-mode` を `Continuous` に設定して、継続的プロビジョニングを有効にしていること。詳細については、「[Amazon EKS での拡張クラスターオペレーションの継続的プロビジョニング](sagemaker-hyperpod-scaling-eks.md)」を参照してください。
+ Health Monitoring Agent バージョン 1.0.742.0\$11.0.241.0 以降がインストールされていること。HyperPod クラスターのオペレーションとモニタリングに必要です。適切なクラスターヘルスレポートとノードライフサイクル管理を確保するために、Karpenter オートスケーリングを有効にする前にエージェントを設定する必要があります。詳細については、「[ヘルスモニタリングシステム](sagemaker-hyperpod-eks-resiliency-health-monitoring-agent.md)」を参照してください。
+ Amazon EKS クラスターで Karpenter が実行されている場合にのみ、Karpenter `NodePool` と `NodeClaim` のバージョンは v1 である必要があります。
+ `NodeRecovery` を自動に設定します。詳細については、「[自動ノード復旧](sagemaker-hyperpod-eks-resiliency-node-recovery.md)」を参照してください。

# Karpenter で HyperPod オートスケーリングの IAM ロールを作成する
<a name="sagemaker-hyperpod-eks-autoscaling-iam"></a>

次のステップでは、SageMaker HyperPod が Karpenter ベースのオートスケーリングを使用して、クラスター内の Kubernetes ノードを管理できるようにする IAM ロールを作成します。このロールは、HyperPod がワークロードの需要に基づいてクラスターノードを自動的に追加および削除するために必要なアクセス許可を提供します。

**IAM コンソールを開きます**

1. にサインイン AWS マネジメントコンソール し、console.aws.amazon.com で IAM コンソールを開きます。

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. [**ロールの作成**] を選択してください。

**信頼ポリシーを設定する**

1. **[信頼されたエンティティのタイプ]** で、**[カスタム信頼ポリシー]** を選択します。

1. **[カスタム信頼ポリシー]** エディタで、デフォルトポリシーを以下に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "hyperpod.sagemaker.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. [**次へ**] を選択します。

**許可ポリシーを作成してアタッチする**

SageMaker HyperPod には、 AWS マネージドポリシーで利用できない特定のアクセス許可が必要なため、カスタムポリシーを作成する必要があります。

1. [**Create policy**] (ポリシーの作成) を選択します。新しいブラウザタブが開きます。

1. **JSON** タブを選択します。

1. デフォルトのポリシーを次のポリシーに置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sagemaker:BatchAddClusterNodes",
                   "sagemaker:BatchDeleteClusterNodes"
               ],
               "Resource": "arn:aws:sagemaker:*:*:cluster/*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceAccount": "${aws:PrincipalAccount}"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "arn:aws:kms:*:*:key/*",
               "Condition": {
                   "StringLike": {
                       "kms:ViaService": "sagemaker.*.amazonaws.com"
                   },
                   "Bool": {
                       "kms:GrantIsForAWSResource": "true"
                   },
                   "ForAllValues:StringEquals": {
                       "kms:GrantOperations": [
                           "CreateGrant",
                           "Decrypt",
                           "DescribeKey",
                           "GenerateDataKeyWithoutPlaintext",
                           "ReEncryptTo",
                           "ReEncryptFrom",
                           "RetireGrant"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. [**次へ**] を選択します。

1. [**ポリシー名**] に「**SageMakerHyperPodKarpenterPolicy**」と入力します。

1. (オプション) [**Description (説明)**] に、ポリシーの説明を入力します。

1. [**Create policy**] を選択します。

1. ロール作成タブに戻り、ポリシーリストを更新します。

1. 先ほど作成した **SageMakerHyperPodKarpenterPolicy** を検索して選択します。

1. [**次へ**] を選択します。

**ロールに名前を付けて作成する**

1. **[ロール名]** には、「`SageMakerHyperPodKarpenterRole`」と入力します。

1. (オプション) **[説明]** にロールの説明を入力します。

1. **ステップ 1: 信頼されたエンティティを選択する**セクションで、信頼ポリシーに正しいサービスプリンシパルが表示されていることを検証します。

1. **ステップ 2: アクセス許可を追加する**セクションで、`SageMakerHyperPodKarpenterPolicy` がアタッチされていることを検証します。

1. [**ロールの作成**] を選択してください。

**ロール ARN を記録する**

ロールが正常に作成された後:

1. **[ロール]** リストで、`SageMakerHyperPodKarpenterRole` のロール名をクリックします。

1. **[概要]** セクションに表示されている **[ロール ARN]** をコピーします。HyperPod クラスターを作成する際に、この ARN が必要です。

ロール ARN は、`arn:aws:iam::ACCOUNT-ID:role/SageMakerHyperPodKarpenterRole` の形式です。

# Karpenter オートスケーリングを使用した HyperPod クラスターを作成して設定する
<a name="sagemaker-hyperpod-eks-autoscaling-cluster"></a>

次の手順では、継続的プロビジョニングを有効にして SageMaker HyperPod クラスターを作成し、Karpenter ベースのオートスケーリングを使用するように設定します。

**HyperPod クラスターを作成する**

1. 環境設定をロードし、CloudFormation スタックから値を抽出します。

   ```
   source .env
   SUBNET1=$(cfn-output $VPC_STACK_NAME PrivateSubnet1)
   SUBNET2=$(cfn-output $VPC_STACK_NAME PrivateSubnet2)
   SUBNET3=$(cfn-output $VPC_STACK_NAME PrivateSubnet3)
   SECURITY_GROUP=$(cfn-output $VPC_STACK_NAME NoIngressSecurityGroup)
   EKS_CLUSTER_ARN=$(cfn-output $EKS_STACK_NAME ClusterArn)
   EXECUTION_ROLE=$(cfn-output $SAGEMAKER_STACK_NAME ExecutionRole)
   SERVICE_ROLE=$(cfn-output $SAGEMAKER_STACK_NAME ServiceRole)
   BUCKET_NAME=$(cfn-output $SAGEMAKER_STACK_NAME Bucket)
   HP_CLUSTER_NAME="hyperpod-eks-test-$(date +%s)"
   EKS_CLUSTER_NAME=$(cfn-output $EKS_STACK_NAME ClusterName)
   HP_CLUSTER_ROLE=$(cfn-output $SAGEMAKER_STACK_NAME ClusterRole)
   ```

1. ノード初期化スクリプトを Amazon S3 バケットにアップロードします。

   ```
   aws s3 cp lifecyclescripts/on_create_noop.sh s3://$BUCKET_NAME
   ```

1. 環境変数を使用してクラスター設定ファイルを作成します。

   ```
   cat > cluster_config.json << EOF
   {
       "ClusterName": "$HP_CLUSTER_NAME",
       "InstanceGroups": [
           {
               "InstanceCount": 1,
               "InstanceGroupName": "system",
               "InstanceType": "ml.c5.xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE"
           },
           {
               "InstanceCount": 0,
               "InstanceGroupName": "auto-c5-az1",
               "InstanceType": "ml.c5.xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE"
           },
           {
               "InstanceCount": 0,
               "InstanceGroupName": "auto-c5-4xaz2",
               "InstanceType": "ml.c5.4xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE",
               "OverrideVpcConfig": {
                   "SecurityGroupIds": [
                       "$SECURITY_GROUP"
                   ],
                   "Subnets": [
                       "$SUBNET2"
                   ]
               }
           },
           {
               "InstanceCount": 0,
               "InstanceGroupName": "auto-g5-az3",
               "InstanceType": "ml.g5.xlarge",
               "LifeCycleConfig": {
                   "SourceS3Uri": "s3://$BUCKET_NAME",
                   "OnCreate": "on_create_noop.sh"
               },
               "ExecutionRole": "$EXECUTION_ROLE",
               "OverrideVpcConfig": {
                   "SecurityGroupIds": [
                       "$SECURITY_GROUP"
                   ],
                   "Subnets": [
                       "$SUBNET3"
                   ]
               }
           }
       ],
       "VpcConfig": {
           "SecurityGroupIds": [
               "$SECURITY_GROUP"
           ],
           "Subnets": [
               "$SUBNET1"
           ]
       },
       "Orchestrator": {
           "Eks": {
               "ClusterArn": "$EKS_CLUSTER_ARN"
           }
       },
       "ClusterRole": "$HP_CLUSTER_ROLE",
       "AutoScaling": {
           "Mode": "Enable",
           "AutoScalerType": "Karpenter"
       },
       "NodeProvisioningMode": "Continuous"
   }
   EOF
   ```

1. 次のコマンドを実行して HyperPod クラスターを作成します。

   ```
   aws sagemaker create-cluster --cli-input-json file://./cluster_config.json
   ```

1. クラスター作成プロセスの所要時間は約 20分です。ClusterStatus と AutoScaling.Status の両方が InService を表示するまで、クラスターのステータスをモニタリングします。

1. 今後のオペレーションのために、このクラスター ARN を保存します。

   ```
   HP_CLUSTER_ARN=$(aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME \
      --output text --query ClusterArn)
   ```

**Karpenter オートスケーリングを有効にする**

1. 次のコマンドを実行して、継続的ノードプロビジョニングモードの既存のクラスターで Karpenter ベースのオートスケーリングを有効にします。

   ```
   aws sagemaker update-cluster \
       --cluster-name $HP_CLUSTER_NAME \
       --auto-scaling Mode=Enable,AutoScalerType=Karpenter \
       --cluster-role $HP_CLUSTER_ROLE
   ```

1. Karpenter が正常に有効になっていることを検証します。

   ```
   aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME --query 'AutoScaling'
   ```

1. 正常な出力:

   ```
   {
       "Mode": "Enable",
       "AutoScalerType": "Karpenter",
       "Status": "InService"
   }
   ```

NodeClass と NodePool の設定に進む前に、`Status` が `InService` と表示されるのを待ちます。

# NodeClass を作成する
<a name="sagemaker-hyperpod-eks-autoscaling-nodeclass"></a>

**重要**  
インスタンスグループ内のノードを 0 から開始し、Karpenter にオートスケーリングの処理を許可する必要があります。ノード数が 0 を超える場合、Karpenter はノードを 0 にスケールダウンします。

ノードクラス (`NodeClass`) は、ネットワーク設定、ストレージ設定、リソースタグ付けなど、EKS クラスター内のノードのグループに適用されるインフラストラクチャレベルの設定を定義します。`HyperPodNodeClass` は、SageMaker HyperPod で事前に作成されたインスタンスグループにマッピングするカスタム `NodeClass` で、Karpenter のオートスケーリングの決定でサポートされているインスタンスタイプとアベイラビリティーゾーンに関する制約を定義します。

**ノードクラスの作成に関する考慮事項**
+ `NodeClass` では、最大 10 個のインスタンスを指定できます。
+ MIG (マルチインスタンス GPU) で GPU パーティショニングを使用する場合、Karpenter は MIG 対応インスタンスグループを使用してノードを自動的にプロビジョニングできます。インスタンスグループに MIG がサポートするインスタンスタイプ (ml.p4d.24xlarge、ml.p5.48xlarge、または ml.p5e/p5en.48xlarge) が含まれていることを確認し、クラスターの作成時に適切な MIG ラベルを設定します。GPU パーティショニングの設定の詳細については、「」を参照してください[Amazon SageMaker HyperPod での GPU パーティションの使用 HyperPod](sagemaker-hyperpod-eks-gpu-partitioning.md)。
+ カスタムラベルがインスタンスグループに適用される場合は、`HyperpodNodeClass`ステータスをクエリするときに `desiredLabels`フィールドにラベルを表示できます。これには、 などの MIG 設定ラベルが含まれます`nvidia.com/mig.config`。受信ジョブが MIG リソースをリクエストすると、Karpenter は適切な MIG ラベルを適用してインスタンスを自動的にスケーリングします。
+ インスタンスグループを削除する場合は、HyperPod クラスターから削除する前に、`NodeClass` から削除することをお勧めします。インスタンスグループが `NodeClass` で使用されている間に削除された場合、`NodeClass` はプロビジョニングには `Ready` でないとマークされ、インスタンスグループが `NodeClass` から削除されるまで後続のスケーリングオペレーションには使用されません。
+ `NodeClass` からインスタンスグループを削除すると、Karpenter はインスタンスグループ内の Karpenter が管理するノードのドリフトを検出し、中断量コントロールに基づいてノードを中断します。
+ インスタンスグループで使用されるサブネットは、同じ AZ に配置されている必要があります。サブネットは、インスタンスグループレベルまたはクラスターレベルで `OverrideVpcConfig` を使用して指定されます。`VpcConfig` がデフォルトで使用されます。
+ 現時点では、オンデマンドキャパシティのみがサポートされています。トレーニングプランまたはリザーブドキャパシティがあるインスタンスグループはサポートされていません。
+ `DeepHealthChecks (DHC)` を使用するインスタンスグループはサポートされていません。これは、DHC が完了するまでに約 60～90 分かかり、その間ポッドが保留状態のままになるため、オーバープロビジョニングが発生する可能性があるためです。

以下の手順は、`NodeClass` を作成する方法を説明しています。

1. `NodeClass` ノードクラス設定で YAML ファイルを作成します (nodeclass.yaml など)。

1. kubectl を使用してこの設定をクラスターに適用します。

1. `NodePool` 設定で `NodeClass` を参照します。

1. ml.c5.xlarge インスタンスタイプと ml.c5.4xlarge インスタンスタイプを使用する `NodeClass` の例は、次のとおりです。

   ```
   apiVersion: karpenter.sagemaker.amazonaws.com/v1
   kind: HyperpodNodeClass
   metadata:
     name: sample-nc
   spec:
     instanceGroups:
       # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created
       # MaxItems: 10
       - auto-c5-xaz1
       - auto-c5-4xaz2
   ```

1. 以下のとおり設定を適用します。

   ```
   kubectl apply -f nodeclass.yaml
   ```

1. NodeClass ステータスをモニタリングして、ステータスの準備完了条件が True に設定されていることを確認します。

   ```
   kubectl get hyperpodnodeclass sample-nc -o yaml
   ```

   ```
   apiVersion: karpenter.sagemaker.amazonaws.com/v1
   kind: HyperpodNodeClass
   metadata:
     creationTimestamp: "<timestamp>"
     name: sample-nc
     uid: <resource-uid>
   spec:
     instanceGroups:
     - auto-c5-az1
     - auto-c5-4xaz2
   status:
     conditions:
     // true when all IGs in the spec are present in SageMaker cluster, false otherwise
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: InstanceGroupReady
       status: "True"
       type: InstanceGroupReady
     // true if subnets of IGs are discoverable, false otherwise
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: SubnetsReady
       status: "True"
       type: SubnetsReady
     // true when all dependent resources are Ready [InstanceGroup, Subnets]
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 3
       reason: Ready
       status: "True"
       type: Ready
     instanceGroups:
     - desiredLabels:
       - key: <custom_label_key>
         value: <custom_label_value>
       - key: nvidia.com/mig.config
         value: all-1g.5gb
       instanceTypes:
       - ml.c5.xlarge
       name: auto-c5-az1
       subnets:
       - id: <subnet-id>
         zone: <availability-zone-a>
         zoneId: <zone-id-a>
     - instanceTypes:
       - ml.c5.4xlarge
       name: auto-c5-4xaz2
       subnets:
       - id: <subnet-id>
         zone: <availability-zone-b>
         zoneId: <zone-id-b>
   ```

# ノードプール を作成する
<a name="sagemaker-hyperpod-eks-autoscaling-nodepool"></a>

`NodePool` は、Karpenter が作成できるノードと、それらのノードで実行できるポッドに制約を設定します。`NodePool` は、以下のとおりに設定できます。
+ ノードの作成を特定のゾーン、インスタンスタイプ、コンピュータアーキテクチャに制限します。
+ Karpenter が作成するノードで実行できるポッドを制限するラベルまたはテイントを定義します。

**注記**  
HyperPod プロバイダーは、以下で説明する既知の Kubernetes および Karpenter 要件の限定されたセットをサポートしています。

以下の手順は、`NodePool` を作成する方法を説明しています。

1. 必要な `NodePool` 設定で、nodepool.yaml という名前の YAML ファイルを作成します。

1. 以下のサンプル設定を使用できます。

   すべての依存リソースが適切に機能していることを示す `Ready` を `Conditions` で探します。

   ```
   apiVersion: karpenter.sh/v1
   kind: NodePool
   metadata:
    name: sample-np
   spec:
    template:
      spec:
        nodeClassRef:
         group: karpenter.sagemaker.amazonaws.com
         kind: HyperpodNodeClass
         name: multiazc5
        expireAfter: Never
        requirements:
           - key: node.kubernetes.io/instance-type
             operator: Exists
   ```

1. `NodePool` をクラスターに適用する:

   ```
   kubectl apply -f nodepool.yaml
   ```

1. `NodePool` ステータスをモニタリングして、ステータスの `Ready` 条件が `True` に設定されていることを確認します。

   ```
   kubectl get nodepool sample-np -oyaml
   ```

   ```
   apiVersion: karpenter.sh/v1
   kind: NodePool
   metadata:
     name: <nodepool-name>
     uid: <resource-uid>
     ...
   spec:
     disruption:
       budgets:
       - nodes: 90%
       consolidateAfter: 0s
       consolidationPolicy: WhenEmptyOrUnderutilized
     template:
       spec:
         expireAfter: 720h
         nodeClassRef:
           group: karpenter.sagemaker.amazonaws.com
           kind: HyperpodNodeClass
           name: <nodeclass-name>
         requirements:
         - key: node.kubernetes.io/instance-type
           operator: Exists
   status:
     conditions:
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 2
       reason: ValidationSucceeded
       status: "True"
       type: ValidationSucceeded
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 2
       reason: NodeClassReady
       status: "True"
       type: NodeClassReady
     - lastTransitionTime: "<timestamp>"
       message: ""
       observedGeneration: 2
       reason: Ready
       status: "True"
       type: Ready
   ```

**Karpenter HyperPod プロバイダーでサポートされているラベル**

これらは、`NodePool` 設定で指定できるオプションの制約と要件です。


|  要件タイプ  |  目的  |  ユースケース/サポートされる値  |  推奨事項  | 
| --- | --- | --- | --- | 
|  インスタンスタイプ (`node.kubernetes.io/instance-type`)  |  Karpenter が選択できる SageMaker インスタンスタイプを制御します。  |  ml.c5.xlarge のみに制限する代わりに、Karpenter がインスタンスグループで使用可能なすべてのタイプから選択できるようにします。  |  これを未定義のままにするか、Exists 演算子を使用して、費用対効果の高いインスタンスタイプを選択する際に Karpenter に最大限の柔軟性を提供することもできます。  | 
|  アベイラビリティーゾーン (`topology.kubernetes.io/zone`)  |  で作成できる AWS アベイラビリティーゾーンノードを制御します  |  us-east-1c などの特定のゾーン名。レイテンシーまたはコンプライアンス上の理由から、特定のゾーンでポッドを実行する必要がある場合に使用します。  | 該当なし | 
|  アーキテクチャ (`kubernetes.io/arch`)  |  CPU アーキテクチャを指定します。  |  amd64 のみ (現時点では ARM サポートなし）  |  該当なし  | 

# ワークロードをデプロイします。
<a name="sagemaker-hyperpod-eks-autoscaling-workload"></a>

次の例は、Karpenter による HyperPod オートスケーリングがワークロードの需要に応じてノードを自動的にプロビジョンする方法を説明しています。これらの例は、基本的なスケーリング動作とマルチアベイラビリティーゾーンの分散パターンを示しています。

**シンプルなワークロードをデプロイする**

1. 次の Kubernetes デプロイには、レプリカまたはポッドごとに 1 つの CPU と 256Mのメモリをリクエストするポッドが含まれています。このシナリオでは、ポッドはまだスピンアップされていません。

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/inflate.yaml
   ```

1. スケールアッププロセスをテストするには、次のコマンドを実行します。Karpenter はクラスターに新しいノードを追加します。

   ```
   kubectl scale deployment inflate --replicas 10
   ```

1. スケールダウンプロセスをテストするには、次のコマンドを実行します。Karpenter はクラスターからノードを削除します。

   ```
   kubectl scale deployment inflate --replicas 0
   ```

**ワークロードを複数の AZ にわたってデプロイする**

1. 次のコマンドを実行して、Kubernetes デプロイを実行するワークロードをデプロイします。デプロイのポッドは、最大スキューが 1 の異なるアベイラビリティーゾーンに均等に分散する必要があります。

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/spread-zone.yaml
   ```

1. 次のコマンドを実行して、ポッドの数を調整します。

   ```
   kubectl scale deployment zone-spread --replicas 15
   ```

   Karpenter は、少なくとも 1 つのノードが異なるアベイラビリティーゾーンを持つクラスターに新しいノードを追加します。

その他の例については、GitHub の「[Karpenter サンプルワークロード](https://github.com/aws/karpenter-provider-aws/tree/main/examples/workloads)」を参照してください。