

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

# Amazon SageMaker HyperPod のスポットインスタンス HyperPod
<a name="sagemaker-hyperpod-spot"></a>

Amazon SageMaker HyperPod は Amazon EC2 スポットインスタンスをサポートしているため、耐障害性とステートレス AI/ML ワークロードのコストを大幅に削減できます。ユースケースには、バッチ推論とトレーニングジョブ、ハイパーパラメータ調整、実験的なワークロードなどがあります。また、スポットインスタンスを使用して、この低コストの容量が利用可能になったときにコンピューティング容量を自動的にスケールし、追加されたスポット容量が再利用されたときにオンデマンド容量にスケールバックすることもできます。

デフォルトでは、HyperPod のスポットインスタンスは HyperPod の[継続的プロビジョニング機能](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-scaling-eks.html)を使用します。これにより、SageMaker HyperPod は使用可能なインスタンスでワークロードがすぐに開始される間、バックグラウンドで残りの容量を自動的にプロビジョニングできます。キャパシティの制約やその他の問題によりノードのプロビジョニングに障害が発生した場合、SageMaker HyperPod はクラスターが希望するスケールに達するまでバックグラウンドで自動的に再試行するため、自動スケーリングオペレーションは回復力とノンブロッキングを維持します。[Karpenter ベースの](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html)自動スケーリングでスポットインスタンスを使用することもできます。

**考慮すべき主な機能と概念**
+ オンデマンドインスタンスと比較して最大 90% のコスト削減を実現
+ 中断を処理でき、ジョブの開始時間と完了時間が柔軟であるジョブにスポットインスタンスを使用する
+ Karpenter を自動スケーリングに使用する場合は、スポット容量が中断または使用不可になったときに自動的にオンデマンドにフォールバックするように HyperPod を設定できます。
+ HyperPod でサポートされているさまざまな CPU、GPU、アクセラレーターインスタンスタイプにアクセスする
+ 容量の可用性は EC2 からの供給に依存し、リージョンとインスタンスタイプによって異なります。
+ EC2 が提供する[スポットインスタンスアドバイザー](https://aws.amazon.com/ec2/spot/instance-advisor/)などのさまざまなツールを使用して、目的のインスタンスを取得する可能性や中断される可能性を特定するなど、さまざまなアクションを実行できます。

## 開始方法
<a name="sagemaker-hyperpod-spot-instance-getstart"></a>

### 前提条件
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq"></a>

開始する前に、以下があることを確認してください。

#### AWS CLI のインストールと設定
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-cli"></a>

 AWS 認証情報とリージョンを設定します。

```
aws configure
```

詳細な手順については、[AWS 認証情報のドキュメント](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html)を参照してください。

#### SageMaker HyperPod 実行の IAM ロール
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-iam"></a>

クラスターを更新するには、まず Karpenter の [AWS Identity and Access Management](https://aws.amazon.com/iam/) (IAM) アクセス許可を作成する必要があります。手順については、[「Karpenter を使用した HyperPod 自動スケーリング用の IAM ロールの作成](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling-iam.html)」を参照してください。

#### VPC および EKS クラスターのセットアップ
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-cluster"></a>

**2.1 VPC および EKS クラスターを作成する**

[HyperPod EKS セットアップガイド](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-install-packages-using-helm-chart.html)に従って、次の操作を行います。

1. 複数のアベイラビリティーゾーンにサブネットを持つ VPC を作成する

1. EKS クラスターを作成します。

1. Helm チャートを使用して[必要な依存関係](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-install-packages-using-helm-chart.html)をインストールする

**2.2 環境変数を設定する**

```
export EKS_CLUSTER_ARN="arn:aws:eks:REGION:ACCOUNT_ID:cluster/CLUSTER_NAME"
export EXECUTION_ROLE="arn:aws:iam::ACCOUNT_ID:role/SageMakerExecutionRole"
export BUCKET_NAME="your-s3-bucket-name"
export SECURITY_GROUP="sg-xxxxx"
export SUBNET="subnet-xxxxx"
export SUBNET1="subnet-xxxxx"
export SUBNET2="subnet-xxxxx"
export SUBNET3="subnet-xxxxx"
```

#### スポットインスタンスのサービスクォータ
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-quota"></a>

SageMaker HyperPod クラスターで作成するインスタンスに必要なクォータがあることを確認します。クォータを確認するには、Service Quotas コンソールで、ナビゲーションペインで AWS サービスを選択し、SageMaker を選択します。たとえば、次のスクリーンショットは、c5 インスタンスで使用可能なクォータを示しています。

![\[コストリージョン情報を含むイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/Screenshot-cluster-quota.png)


#### スポットの可用性を確認する
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-availability"></a>

スポットインスタンスグループを作成する前に、さまざまなアベイラビリティーゾーンの可用性を確認してください。

```
aws ec2 get-spot-placement-scores \
  --region us-west-2 \
  --instance-types c5.2xlarge \
  --target-capacity 10 \
  --single-availability-zone \
  --region-names us-west-2
```

**ヒント**: 配置スコアが高いアベイラビリティーゾーンをターゲットにして、可用性を向上させます。スポットインスタンスアドバイザーと EC2 スポットの料金で可用性を確認することもできます。アベイラビリティスコアが高い必要なアベイラビリティーゾーンを選択し、関連付けられたサブネットを持つインスタンスグループを設定して、その AZ でインスタンスを起動します。

### インスタンスグループの作成 (Auto Scaling なし)
<a name="sagemaker-hyperpod-spot-instance-getstart-create"></a>

**CreateCluster (スポット)**

```
aws sagemaker create-cluster \
    --cluster-name clusterNameHere \
    --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \
    --node-provisioning-mode "Continuous" \
    --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \
    --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]' 
    --vpc-config '{
        "SecurityGroupIds": ["'$SECURITY_GROUP'"],
        "Subnets": ["'$SUBNET'"] 
    }'
```

**クラスターの更新 (スポット \$1 オンデマンド)**

```
aws sagemaker update-cluster \
   --cluster-name "my-cluster" \
   --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-x-az3",
        "InstanceType": "ml.c5.xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} },
        "LifeCycleConfig": {
            "SourceS3Uri": "s3://'$BUCKET_NAME'",
            "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET3'"]
        }
    },
    {
        "InstanceGroupName": "auto-spot-c5-2x-az2",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET2'"]
         }
    },
    {   
        "InstanceGroupName": "auto-ondemand-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]'
```

`CapacityRequirements` インスタンスグループが作成されると、 を変更することはできません。

**クラスターの説明**

```
aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME --region us-west-2
```

```
## Sample Response
{
    "ClusterName": "my-cluster",
    "InstanceGroups": [
        {
            "InstanceGroupName": "ml.c5.2xlarge",
            "InstanceType": "ml.c5.xlarge",
            "InstanceCount": 5,
            "CurrentCount": 3,
            "CapacityRequirements: { "Spot": {} },
            "ExecutionRole": "arn:aws:iam::account:role/SageMakerExecutionRole",
            "InstanceStorageConfigs": [...],
            "OverrideVpcConfig": {...}
        }
        // Other IGs
    ]
}
```

**DescribeClusterNode**

```
aws sagemaker describe-cluster-node --cluster-name $HP_CLUSTER_NAME --region us-west-2
```

```
## Sample Response
{
  "NodeDetails": {
    "InstanceId": "i-1234567890abcdef1",
    "InstanceGroupName": "ml.c5.2xlarge",
    "CapacityType": "Spot",
    "InstanceStatus": {...}
  }
}
```

### コンソールの使用
<a name="sagemaker-hyperpod-spot-instance-getstart-console"></a>

#### SageMaker HyperPod クラスターの作成と設定
<a name="sagemaker-hyperpod-spot-instance-getstart-console-create"></a>

開始するには、SageMaker HyperPod EKS クラスターを起動して設定し、クラスターの作成時に継続的プロビジョニングモードが有効になっていることを確認します。以下のステップを実行します。

1. SageMaker AI コンソールで、ナビゲーションペインで HyperPod クラスターを選択します。

1. Amazon EKS で HyperPod クラスターの作成とオーケストレーションを選択します。

1. セットアップオプションで、カスタムセットアップを選択します。

1. [名前] に名前を入力します。

1. インスタンス復旧 で、自動 を選択します。

1. インスタンスプロビジョニングモードでは、「継続的プロビジョニングを使用する」を選択します。

1. CapacityType : スポットの選択 

1. [Submit] を選択してください。

コンソール のスクリーンショット: 

![\[作成クラスターフローを含むイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/Screenshot-create-cluster.png)


この設定では、仮想プライベートクラウド (VPC)、サブネット、セキュリティグループ、EKS クラスターなどの必要な設定を作成し、クラスターに演算子をインストールします。新しいクラスターを作成する代わりに既存のクラスターを使用する場合は、EKS クラスターなどの既存のリソースを指定することもできます。この設定には約 20 分かかります。

#### 同じクラスターに新しいスポットインスタンスグループを追加する
<a name="sagemaker-hyperpod-spot-instance-getstart-console-add"></a>

既存の HyperPod EKS クラスターにスポット IG を追加するには。以下のステップを実行します。

1. SageMaker AI コンソールで、ナビゲーションペインで HyperPod クラスターを選択します。

1. Amazon EKS オーケストレーションを使用して既存の HyperPod クラスターを選択します (継続的なプロビジョニングが有効になっていることを確認します）。

1. [Edit (編集)] をクリックします。

1. クラスターの編集ページで、インスタンスグループの作成をクリックします。

1. キャパシティタイプを選択する: インスタンスグループ設定でインスタンスをスポットします。

1. インスタンスグループの作成 をクリックします。

1. 送信 をクリックします。

**コンソール のスクリーンショット: **

![\[インスタンスグループ作成フローを含むイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/Screenshot-instance-group.png)


### の使用 CloudFormation
<a name="sagemaker-hyperpod-spot-instance-getstart-cfn"></a>

```
Resources:
  TestCluster:
    Type: AWS::SageMaker::Cluster
    Properties:
      ClusterName: "SampleCluster"
      InstanceGroups:
        - InstanceGroupName: group1
          InstanceType: ml.c5.2xlarge
          InstanceCount: 1
          LifeCycleConfig:
            SourceS3Uri: "s3://'$BUCKET_NAME'"
            OnCreate: "on_create_noop.sh"
          ExecutionRole: "'$EXECUTION_ROLE'",
          ThreadsPerCore: 1
          CapacityRequirements:
            Spot: {}
      VpcConfig:
        Subnets:
          - "'$SUBNET1'"
        SecurityGroupIds:
          - "'$SECURITY_GROUP'"
      Orchestrator:
        Eks:
          ClusterArn:
            '$EKS_CLUSTER_ARN'
      NodeProvisioningMode: "Continuous"
      NodeRecovery: "Automatic"
```

詳細については、[https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-eks-console-create-cluster-cfn.html](https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-eks-console-create-cluster-cfn.html) を参照してください。

### Karpenter ベースの Auto Scaling
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter"></a>

#### クラスターロールを作成する
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-role"></a>

**ステップ 1: IAM コンソールに移動する**

1. **AWS マネジメントコンソール** → **IAM** サービスに移動する

1. 左側のサイドバーの**ロールをクリックします。**

1. **ロールの作成** をクリックします。

**ステップ 2: 信頼ポリシーを設定する**

1. カスタム信頼ポリシーを選択する ( AWS サービスの代わりに)

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

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

次へ をクリックします。

**ステップ 3: カスタムアクセス許可ポリシーを作成する**

これらは特定の SageMaker アクセス許可であるため、カスタムポリシーを作成する必要があります。

1. **ポリシーの作成** (新しいタブを開く) をクリックします。

1. **JSON** タブをクリックします。

1. 次のポリシーを入力します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "sagemaker:BatchAddClusterNodes",
           "sagemaker:BatchDeleteClusterNodes"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

1. **[次へ]** をクリックします。

1. 次のような名前を付けます。 `SageMakerHyperPodRolePolicy`

1. **ポリシーの作成** をクリックします。

**ステップ 4: ポリシーをロールにアタッチする**

1. ロール作成タブに戻る

1. ポリシーリストを更新する

1. 新しく作成したポリシーを検索して選択する

1. **[次へ]** をクリックします。

**ステップ 5: ロールの名前と作成**

1. ロール名を入力する (例: `SageMakerHyperPodRole`)

1. 必要に応じて説明を追加します。

1. 信頼ポリシーとアクセス許可を確認する

1. **ロールの作成** をクリックします。

#### 検証
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-verify"></a>

作成後、次の方法で検証できます。
+ 信頼関係タブを確認すると、ハイパーポッドサービスが表示されます。
+ アクセス許可タブにカスタムポリシーが表示されることを確認する
+ ロール ARN は HyperPod で使用できます

ロール ARN 形式は次のとおりです。

```
 arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole
```

#### AutoScaling を使用してクラスターを作成する:
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-create-cluster"></a>

可用性を向上させるには、サブネットを設定して複数の AZs に IGs を作成します。フォールバックにonDemand IGs を含めることもできます。

```
aws sagemaker create-cluster \
    --cluster-name clusterNameHere \
    --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \
    --node-provisioning-mode "Continuous" \
    --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \
    --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 0, // For Auto scaling keep instance count as 0
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]' 
--vpc-config '{
    "SecurityGroupIds": ["'$SECURITY_GROUP'"],
    "Subnets": ["'$SUBNET'"] 
}'
--auto-scaling ' {
    "Mode": "Enable",
    "AutoScalerType": "Karpenter"
}'
```

#### クラスターの更新 (スポット \$1 オンデマンド)
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-update-cluster"></a>

```
aws sagemaker update-cluster \
   --cluster-name "my-cluster" \
   --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-x-az3",
        "InstanceType": "ml.c5.xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} },
        "LifeCycleConfig": {
            "SourceS3Uri": "s3://'$BUCKET_NAME'",
            "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET3'"]
        }
    },
    {
        "InstanceGroupName": "auto-spot-c5-2x-az2",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET2'"]
         }
    },
    {   
        "InstanceGroupName": "auto-ondemand-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]'
```

#### HyperpodNodeClass を作成する
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-create-class"></a>

`HyperpodNodeClass` は、SageMaker HyperPod で事前に作成されたインスタンスグループにマッピングするカスタムリソースで、Karpenter の自動スケーリングの決定でサポートされているインスタンスタイプとアベイラビリティーゾーンに関する制約を定義します。を使用するには`HyperpodNodeClass`、NodePools でポッドのスケールアップに使用する AWS コンピューティングリソースのソースとして使用する SageMaker HyperPod クラスター`InstanceGroups`の名前を指定するだけです。ここで使用する`HyperpodNodeClass`名前は、参照する次のセクションの NodePool に引き継がれます。これにより、NodePool `HyperpodNodeClass` にリソースの描画元が指示されます。を作成するには`HyperpodNodeClass`、次の手順を実行します。

1. 次のコードのような YAML ファイル (nodeclass.yaml など) を作成します。SageMaker HyperPod クラスターの作成時に使用した`InstanceGroup`名前を追加します。既存の SageMaker HyperPod EKS クラスターに新しいインスタンスグループを追加することもできます。

1. NodePool 設定で`HyperPodNodeClass`名前を参照します。

以下はサンプル `HyperpodNodeClass` です。

```
apiVersion: karpenter.sagemaker.amazonaws.com/v1
kind: HyperpodNodeClass
metadata:
  name: multiazg6
spec:
  instanceGroups:
    # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created
    # before this step can be completed.
    # MaxItems: 10
    - auto-spot-c5-2x-az1
    - auto-spot-c5-2x-az2
    - auto-spot-c5-x-az3
    - auto-ondemand-c5-2x-az1
```

Karpenter は、設定で指定されている場合、オンデマンドをフォールバックとして使用して、オンデマンドインスタンスよりもスポットインスタンスグループを優先します。インスタンスの選択は、各サブネットのアベイラビリティーゾーンに関連付けられた EC2 スポットプレイスメントスコアによってソートされます。

**を使用して EKS クラスターに設定を適用します`kubectl`。**

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

HyperPod クラスターで AutoScaling が有効になっている必要があり、 を適用する`InService`前に AutoScaling ステータス`HyperpodNodeClass`が に変わる必要があります。また、インスタンスグループの容量をスポットまたはOnDemandとして表示します。詳細と重要な考慮事項については、[SageMaker HyperPod EKS での自動スケーリング](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html)」を参照してください。

**たとえば、**

```
apiVersion: karpenter.sagemaker.amazonaws.com/v1
kind: HyperpodNodeClass
metadata:
  creationTimestamp: "2025-11-30T03:25:04Z"
  name: multiazc6
  uid: ef5609be-15dd-4700-89ea-a3370e023690
spec:
  instanceGroups:
  -spot1
status:
  conditions:
  // true when all IGs in the spec are present in SageMaker cluster, false otherwise
  - lastTransitionTime: "2025-11-20T03:25:04Z"
    message: ""
    observedGeneration: 3
    reason: InstanceGroupReady
    status: "True"
    type: InstanceGroupReady
  // true if subnets of IGs are discoverable, false otherwise
  - lastTransitionTime: "2025-11-20T03:25:04Z"
    message: ""
    observedGeneration: 3
    reason: SubnetsReady
    status: "True"
    type: SubnetsReady
  // true when all dependent resources are Ready [InstanceGroup, Subnets]
  - lastTransitionTime: "2025-11-30T05:47:55Z"
    message: ""
    observedGeneration: 3
    reason: Ready
    status: "True"
    type: Ready
  instanceGroups:
  - instanceTypes:
    - ml.c5.2xlarge
    name:auto-spot-c5-2x-az2
    subnets:
    - id: subnet-03ecc649db2ff20d2
      zone: us-west-2a
      zoneId: usw2-az2
  - capacities: {"Spot": {}}
```

#### NodePool を作成する
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-create-nodepool"></a>

NodePool は、Karpenter が作成できるノードと、それらのノードで実行できるポッドに制約を設定します。NodePool は、次のようなさまざまなアクションを実行するように設定できます。
+ Karpenter が作成するノードで実行できるポッドを制限するラベルとテイントを定義する
+ ノードの作成を特定のゾーン、インスタンスタイプ、コンピュータアーキテクチャなどに制限する

NodePool の詳細については、[NodePools](https://karpenter.sh/docs/concepts/nodepools/)」を参照してください。SageMaker HyperPod マネージド Karpenter は、この記事で説明しているように、よく知られている Kubernetes および Karpenter 要件の限定されたセットをサポートしています。

NodePool を作成するには、次の手順を実行します。

目的の ノードプール 設定で `nodepool.yaml` という名前の YAML ファイルを作成します。次のコードは、サンプル NodePool を作成するためのサンプル設定です。ml.g6.xlarge SageMaker インスタンスタイプを含めるように NodePool を指定し、さらに 1 つのゾーンに指定します。詳細については、「[NodePools](https://karpenter.sh/docs/concepts/nodepools/)」を参照してください。

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
 name: gpunodepool
spec:
 template:
   spec:
     nodeClassRef:
      group: karpenter.sagemaker.amazonaws.com
      kind: HyperpodNodeClass
      name: multiazg6
     expireAfter: Never
     requirements:
        - key: node.kubernetes.io/instance-type
          operator: Exists
        - key: "node.kubernetes.io/instance-type" // Optional otherwise Karpenter will decide based on Job config resource requirements
          operator: In
          values: ["ml.c5.2xlarge"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-west-2a"]
```

**ヒント**: EC2 スポットの中断時に、Hyperpod はノードをテイントしてポッドエビクションをトリガーします。Karpenter **の統合**プロセスはポッドの中断予算を尊重し、通常の Kubernetes エビクションを実行しますが、consolidateAfter: 0 を設定した場合、統合は**すぐに**行われるため、ポッドの正常なエビクションにかかる時間はごくわずかです。最大 2 分間ゼロ以外の値に設定すると、チェックポイントのニーズに応じてポッドを正常に削除できます。

**NodePool をクラスターに適用します。**

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

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

```
kubectl get nodepool gpunodepool -oyaml
```

この例では、NodePool を使用してポッドのハードウェア (インスタンスタイプ) と配置 (アベイラビリティーゾーン) を指定する方法を示します。

**シンプルなワークロードを起動する**

次のワークロードは、デプロイ中のポッドがポッドごとにレプリカごとに 1 つの CPU と 256 MB のメモリをリクエストする Kubernetes デプロイを実行します。ポッドはまだスピンアップされていません。

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

これを適用すると、次のスクリーンショットに示すように、クラスターにデプロイと単一ノードの起動が表示されます。

**このコンポーネントをスケールするには、次のコマンドを使用します。**

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

詳細については、[https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html) を参照してください。

### ノード中断の管理
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-interrupt"></a>

スポットインスタンスはいつでも再利用できます。EC2 はほとんどの場合、ベストエフォートの 2 分間の中断通知を提供しますが、この通知は保証されません。状況によっては、EC2 が事前警告なしでスポットインスタンスを直ちに終了することがあります。HyperPod は両方のシナリオを自動的に処理します。
+ 2 分前の通知の場合: スポット容量が利用可能になると、適切なポッドエビクションと制御された容量置換を自動的に再試行します。
+ 通知なし (即時終了): 正常なエビクションなしでノード交換 (スポット容量が利用可能になったとき) を自動的に再試行します 

**仕組み**

EC2 がスポット中断通知を送信すると、HyperPod は自動的に以下を行います。

1. 中断シグナルを検出します 

1. ノードをテイントする: 中断されたインスタンスで新しいポッドがスケジュールされないようにします

1. ポッドを適切に削除する: 実行中のポッドが作業を完了またはチェックポイントする時間を与える (Kubernetes を優先`terminationGracePeriodSeconds`)

1. 容量を置き換える: 代替インスタンスを自動的にプロビジョニングしようとします (可用性に基づいてスポットまたはオンデマンド）。

   容量置換は、代替インスタンスを自動的にプロビジョニングすることで機能します。容量がすぐに利用できない場合、システムはリソースにアクセスできるようになるまでチェックを続けます。Auto Scaling 以外のインスタンスグループの場合、HyperPod は必要な容量が利用可能になるまで同じインスタンスグループ内でスケールアップを試みます。Karpenter ベースのインスタンスグループの場合、プライマリグループが需要に対応できない場合、Karpenter は Node クラスで設定された他のインスタンスグループにフォールバックメカニズムを実装します。さらに、オンデマンドをフォールバックオプションとして設定して、Karpenter がスポットインスタンスグループを正常にスケールアップできない場合に自動的にオンデマンドインスタンスに切り替えることができます。

1. ワークロードの再スケジュール: Kubernetes は正常なノードで削除されたポッドを自動的に再スケジュールします

### 使用状況と請求の検索
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-bill"></a>

HyperPod のスポットインスタンスの使用状況と請求を確認するには、Cost Explorer コンソールを使用できます AWS 。請求とコスト管理 > 請求に進む

![\[コストリージョン情報を含むイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/Screenshot-cost-region.png)


**コンソールで使用状況と請求を確認するには、「請求とコスト管理 > Cost Explorer」を参照してください。**

![\[コストと使用状況を含むイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/Screenshot-cost-usage.png)
