Capacity Blocks for ML を使用してマネージドノードグループを作成する - Amazon EKS

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

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

Capacity Blocks for ML を使用してマネージドノードグループを作成する

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

考慮事項

重要
  • キャパシティブロックは、特定の Amazon EC2 インスタンスタイプおよび AWS リージョン でのみ使用できます。互換性情報については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「キャパシティブロックの操作」を参照してください。

  • 詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Use Capacity Blocks for machine learning workloads」を参照してください。

  • キャパシティブロックのあるマネージドノードグループは、カスタム起動テンプレートでのみ作成できます。

  • キャパシティブロックを持つマネージドノードグループをアップグレードする場合は、ノードグループの希望するサイズが 0 に設定されていることを確認してください。

Amazon EC2 キャパシティブロックを持つマネージドノードグループを作成する

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

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

    上記の手順の要件に加えて、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
  2. 起動テンプレートを使用して、マネージド型ノードグループを作成します。

    キャパシティブロックのノードグループ作成コマンドの例を以下に示します。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 \ --capacity-type "CAPACITY_BLOCK" \ --launch-template id="lt-id",version=1
  3. スケールアップ後にノードが結合することを確認します。キャパシティブロックを持つマネージドノードグループを使用する Amazon EKS クラスターは、起動されたインスタンスが実際にクラスターに参加して登録されるかの検証を実行しません。

  4. 作成時に desiredSize0 に設定すると、キャパシティ予約がアクティブになったときにノードグループをスケールアップするさまざまなオプションを使用できます。

    • ASG に対して、キャパシティブロックの予約開始時間に合わせて、スケジュールされたスケーリングポリシーを作成します。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Amazon EC2 Auto Scaling のスケジュールされたスケーリング」を参照してください。

    • Amazon EKS コンソールまたは eks update-nodegroup-config を使用してスケーリング設定を更新し、ノードグループの必要なサイズを設定します。

    • Kubernetes Cluster Autoscaler を使用します。詳細については、「AWS の Cluster Autoscaler」を参照してください。

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

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

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