

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Capacity Blocks for ML を使用してマネージドノードグループを作成する
<a name="capacity-blocks-mng"></a>

機械学習 (ML) のキャパシティブロックを使用すると、短期間の機械学習ワークロードをサポートするために、GPU インスタンスを将来の日付で予約できます。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「[機械学習用のキャパシティブロック](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html)」を参照してください。

## 考慮事項
<a name="capacity-blocks-mng-considerations"></a>

**重要**  
キャパシティブロックは、特定の Amazon EC2 インスタンスタイプおよび AWS リージョンでのみ使用できます。互換性情報については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「[キャパシティブロックの操作](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-using.html#capacity-blocks-prerequisites)」を参照してください。
詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「[Use Capacity Blocks for machine learning workloads](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-template-capacity-blocks.html)」を参照してください。
キャパシティブロックのあるマネージドノードグループは、カスタム起動テンプレートでのみ作成できます。
キャパシティブロックを持つマネージドノードグループをアップグレードする場合は、ノードグループの希望するサイズが `0` に設定されていることを確認してください。

## Amazon EC2 キャパシティブロックを持つマネージドノードグループを作成する
<a name="capacity-blocks-mng-procedure"></a>

Amazon EKS マネージド型ノードグループでキャパシティブロックを使用して、GPU 加速ワーカーノードのプロビジョニングとスケーリングを行うことができます。AWS CloudFormation テンプレートの例は、本番クラスターに必要なすべての側面を網羅しているわけではありません。通常、ブートストラップスクリプトでノードをクラスターに結合し、Amazon EKS 高速 AMI を指定する必要もあります。詳細については、「[クラスターのマネージドノードグループを作成する](create-managed-node-group.md)」を参照してください。

1. ワークロードに適した、Amazon EKS マネージド型ノードグループと連携する起動テンプレートを作成します。詳細については、「[起動テンプレートを使用してマネージドノードをカスタマイズする](launch-templates.md)」を参照してください。

   上記の手順の要件に加えて、`LaunchTemplateData` に以下が含まれていることを確認してください。
   +  `MarketType` が `"capacity-block"` に設定された `InstanceMarketOptions` 
   +  `CapacityReservationId` がキャパシティブロックに設定された `CapacityReservationSpecification: CapacityReservationTarget` (例: `cr-02168da1478b509e0 `)
   +  キャパシティブロックをサポートするインスタンスタイプに設定された `InstanceType` (例:*p5.48xlarge* )

     キャパシティブロックをターゲットとする起動テンプレートを作成する CloudFormation テンプレートの抜粋を以下に示します。カスタム AMI マネージド型ノードグループを作成するには、`ImageId` および `UserData` パラメータを追加することもできます。

     ```
     NodeLaunchTemplate:
       Type: "AWS::EC2::LaunchTemplate"
       Properties:
         LaunchTemplateData:
           InstanceMarketOptions:
             MarketType: "capacity-block"
           CapacityReservationSpecification:
             CapacityReservationTarget:
               CapacityReservationId: "cr-02168da1478b509e0"
           InstanceType: p5.48xlarge
     ```

1. 起動テンプレートを使用して、マネージド型ノードグループを作成します。

   キャパシティブロックのノードグループ作成コマンドの例を以下に示します。*example-values* をクラスターに適用可能なものに置き換えます。

   キャパシティブロックのマネージド型ノードグループを作成するときは、以下の操作を行います。
   + `capacity-type` を `"CAPACITY_BLOCK"` に設定します。キャパシティタイプが `"CAPACITY_BLOCK"` に設定されていない場合、または上記の必須起動テンプレート値のいずれかが欠落している場合、作成リクエストは拒否されます。
   + 作成リクエストで `subnets` を指定する場合は、キャパシティ予約と同じアベイラビリティーゾーンのサブネットのみを指定してください。
   + 作成リクエストでゼロ以外の `desiredSize` を指定すると、Amazon EKS は Auto Scaling グループ (ASG) を作成するときにその値を採用します。ただし、キャパシティ予約がアクティブになる前に作成リクエストが行われた場合は、アクティブになるまで ASG は Amazon EC2 インスタンスを起動できません。その結果、ASG スケーリングアクティビティで起動エラーが発生します。予約がアクティブになると、インスタンスの起動は成功し、ASG は作成時に指定された `desiredSize` にスケールアップされます。

     ```
     aws eks create-nodegroup \
         --cluster-name my-cluster \
         --nodegroup-name my-mng \
         --node-role node-role-arn \
         --region region-code \
         --subnets subnet-id \
         --scaling-config minSize=node-group-min-size,maxSize=node-group-max-size,desiredSize=node-group-desired-size \
         --ami-type "AL2023_x86_64_NVIDIA" \
         --capacity-type "CAPACITY_BLOCK" \
         --launch-template id="lt-id",version=1
     ```

1. スケールアップ後にノードが結合することを確認します。キャパシティブロックを持つマネージドノードグループを使用する Amazon EKS クラスターは、起動されたインスタンスが実際にクラスターに参加して登録されるかの検証を実行しません。

1. 作成時に `desiredSize` を `0` に設定すると、キャパシティ予約がアクティブになったときにノードグループをスケールアップするさまざまなオプションを使用できます。
   + ASG に対して、キャパシティブロックの予約開始時間に合わせて、スケジュールされたスケーリングポリシーを作成します。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「[Amazon EC2 Auto Scaling のスケジュールされたスケーリング](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-scheduled-scaling.html)」を参照してください。
   + Amazon EKS コンソールまたは `eks update-nodegroup-config` を使用してスケーリング設定を更新し、ノードグループの必要なサイズを設定します。
   + Kubernetes Cluster Autoscaler を使用します。詳細については、「[AWS の Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md)」を参照してください。

1. これで、ノードグループではワークロードと Pod をスケジュールする準備が整いました。

1. 予約が終了する前に Pod を正常にドレインするために、Amazon EKS はスケジュールされたスケーリングポリシーを使用してノードグループサイズを `0` にスケールダウンします。このスケジュールされたスケーリングは、`Amazon EKS Node Group Capacity Scaledown Before Reservation End` という名前で設定されます。このアクションは編集も削除もしないことをお勧めします。

   Amazon EC2 は、予約終了時間の 30 分前にインスタンスのシャットダウンを開始します。その結果、Amazon EKS は、Pod を安全かつ適切にエビクトするために、予約終了の 40 分前に、スケジュールされたスケールダウンをノードグループに設定します。