オンデマンドキャパシティ予約 (ODCR) を使用してインスタンスを起動する - AWS ParallelCluster

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

オンデマンドキャパシティ予約 (ODCR) を使用してインスタンスを起動する

オンデマンドキャパシティ予約 (ODCR) を使用すると、特定のアベイラビリティーゾーン内のクラスター Amazon EC2インスタンスのキャパシティを予約できます。これにより、Savings Plans またはリージョンリザーブドインスタンスが提供する請求アカウントとは関係なく、キャパシティの予約を作成および管理できます。

open または targeted を設定できますODCR。Open は、ODCR属性に一致するインスタンスをすべてODCRカバーします。これらの属性はインスタンスタイプ、プラットフォーム、およびアベイラビリティーゾーンです。クラスター設定ODCRで Targeted を明示的に定義する必要があります。ODCR が openか かを確認するにはtargeted、Amazon EC2 describe-capacity-reservation コマンドを実行します AWS CLI 。

またODCR、クラスタープレイスメントグループオンデマンドキャパシティ予約 (CPG ODCR) と呼ばれるクラスタープレイスメントグループに を作成することもできます。

リソースグループには複数の をグループ化ODCRsできます。これはクラスター設定ファイルで定義できます。リソースグループの詳細については、「Resource Groups とタグのユーザーガイド」の「What are resource groups?」を参照してください。

ODCR で を使用する AWS ParallelCluster

AWS ParallelCluster はオープン をサポートしますODCR。開いている を使用する場合ODCR、 で何も指定する必要はありません AWS ParallelCluster。インスタンスはクラスター用に自動的に選択されます。既存のプレイスメントグループを指定するか、新しいプレイスメントグループ AWS ParallelCluster を作成することができます。

ODCR クラスター設定で

AWS ParallelCluster バージョン 3.3.0 以降では、クラスター設定ファイルODCRsで を定義できます。Amazon EC2ランインスタンスのオーバーライドを指定する必要はありません。

まず、それぞれのリンク先のドキュメントで説明されている方法を使用して、キャパシティ予約リソースグループを作成します。キャパシティ予約グループを作成するには、 AWS CLI メソッドを使用する必要があります。を使用する場合は AWS Management Console、タグベースまたはスタックベースのリソースグループのみを作成できます。タグベースおよびスタックベースのリソースグループは、キャパシティ予約でインスタンスを起動 AWS CLI する場合、 AWS ParallelCluster または ではサポートされていません。

キャパシティ予約とリソースグループを作成したら、以下のクラスター設定例に示すように、SlurmQueues/CapacityReservationTarget または SlurmQueues/ComputeResources/CapacityReservationTarget で指定します。置換 values 有効な値で赤で強調表示されます。

Image: Os: os HeadNode: InstanceType: head_node_instance Networking: SubnetId: public_subnet_id Ssh: KeyName: key_name Scheduling: Scheduler: scheduler SlurmQueues: - Name: queue1 Networking: SubnetIds: - private_subnet_id ComputeResources: - Name: cr1 Instances: - InstanceType: instance MaxCount: max_queue_size MinCount: max_queue_size Efa: Enabled: true CapacityReservationTarget: CapacityReservationResourceGroupArn: capacity_reservation_arn
警告
  • AWS ParallelCluster バージョン 3.3.0 以降では、このメソッドはお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。

  • このメソッドは Slurm による複数インスタンスタイプ割り当てとは互換性がありません。

のサポートtargetedODCRsが AWS ParallelCluster 3.1.1 に追加されました。このリリースでは、EC2RunInstancesパラメータを上書きし、 で設定された各コンピューティングリソースに使用する予約に関する情報を渡すメカニズムが導入されました AWS ParallelCluster。このメカニズムは targeted と互換性がありますODCR。ただし、 を使用する場合はtargetedODCR、run-instancesオーバーライド設定を指定する必要があります。ターゲットは AWS CLI Amazon EC2 run-instances コマンドで明示的に定義ODCRsする必要があります。ODCR が AWS CLI Amazon EC2 コマンド openであるか、targeted実行されているかどうかを判断するにはdescribe-capacity-reservation

リソースグループには複数の をグループ化ODCRsできます。これは、ランインスタンスオーバーライドで複数の ODCRs を同時にターゲットにするために使用できます。

を使用している場合はtargetedODCR、プレイスメントグループを指定できます。ただし、run-instances オーバーライド設定も指定する必要があります。

targetedODCRを AWS 作成した、または特定のリザーブドインスタンスのセットがあるとします。そうなると、プレイスメントグループを指定できなくなります。によって設定されたルールは AWS 、プレイスメントグループ設定と競合する可能性があります。したがって、アプリケーションにプレイスメントグループが必要な場合は、 CPG ODCRを使用します。いずれの場合も、run-instances オーバーライド設定を指定する必要があります。

を使用している場合はCPGODCR、run-instancesオーバーライド設定を指定し、クラスター設定で同じプレイスメントグループを指定する必要があります。

でのリザーブドインスタンスの使用 AWS ParallelCluster

予約されたインスタンスは、キャパシティ予約 () とは異なりますODCR。リザーブドインスタンスには 2 つのタイプがあります。リージョンのリザーブドインスタンスでは、キャパシティは予約されません。ゾーンのリザーブドインスタンスでは、指定されたアベイラビリティーゾーンでキャパシティが予約されます。

リージョンのリザーブドインスタンスがある場合、キャパシティが予約されず、容量不足エラーが発生する可能性があります。ゾーンリザーブドインスタンスがある場合は、キャパシティ予約がありますが、指定に使用できるrun-instancesAPIパラメータはありません。

リザーブドインスタンスは、どの AWS ParallelCluster バージョンでもサポートされています。で何も指定する必要はありません。 AWS ParallelCluster インスタンスは自動的に選択されます。

ゾーンのリザーブドインスタンスを使用するときは、クラスター設定でプレイスメントグループの指定を省略することで、発生する可能性のある容量不足エラーを回避できます。

警告
  • AWS ParallelCluster バージョン 3.3.0 以降では、このメソッドはお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。

  • このメソッドは Slurm による複数インスタンスタイプ割り当てとは互換性がありません。

クラスターキューに設定されている各コンピューティングリソースの Amazon EC2RunInstancesパラメータを上書きできます。そのためには、以下のコードスニペットコンテンツを含む /opt/slurm/etc/pcluster/run_instances_overrides.json ファイルをクラスターのヘッドノードに作成します。

  • ${queue_name} はオーバーライドを適用するキューの名前です。

  • ${compute_resource_name} オーバーライドを適用するコンピューティングリソースです。

  • ${overrides} は、キューとインスタンスタイプの特定の組み合わせに使用するRunInstancesオーバーライドのリストを含む任意のJSONオブジェクトです。オーバーライドの構文は、run_instances boto3 呼び出しで説明されているのと同じ仕様に従う必要があります。

{     "${queue_name}": {         "${compute_resource_name}": {             ${overrides}         },         ...     },     ... }

例えば、以下では、 my-queueおよび で設定されたp4d.24xlargeインスタンスgroup_arnに使用するODCRグループJSONを設定しますmy-compute-resource

{     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationResourceGroupArn": "group_arn"                 }             }         }     } }

このJSONファイルが生成されると、クラスタースケーリングを担当する AWS ParallelCluster デーモンは、インスタンス起動のオーバーライド設定を自動的に使用します。指定したパラメータがインスタンスのプロビジョニングに使用されていることを確認するには、以下のログファイルを確認してください。

  • /var/log/parallelcluster/clustermgtd (静的容量)

  • /var/log/parallelcluster/slurm_resume.log (動的容量)

パラメータが正しければ、次の内容を含むログエントリが見つかります。

Found RunInstances parameters override. Launching instances with: <parameters_list>
警告
  • AWS ParallelCluster バージョン 3.3.0 以降では、このメソッドはお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。

  • このメソッドは Slurm による複数のインスタンスタイプの割り当て と互換性がありません。

  1. リソースグループを作成し、容量をグループ化します。

    $ aws resource-groups create-group --name EC2CRGroup \   --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
    注記

    リソースグループは、他のアカウントが共有するリソースをサポートしていません。

    ターゲットODCRが別の アカウントで共有されている場合、リソースグループを作成する必要はありません。ステップ 3 では、リソースグループの代わりに CapacityReservationId を使用します。

    #!/bin/bash set -e # Override run_instance attributes cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF {     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationId": "cr-abcdef01234567890"                 }             }         }     } } EOF

    リソースグループにキャパシティ予約を追加します。新しい を作成するたびにODCR、グループ予約に追加します。置換 ACCOUNT_ID アカウント ID を使用して、PLACEHOLDER_CAPACITY_RESERVATION キャパシティ予約 ID、および REGION_ID AWS リージョン ID (us-east-1 など)。

    $ aws resource-groups group-resources --region REGION_ID --group EC2CRGroup \   --resource-arns arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION

    ローカルコンピュータでポリシードキュメントを作成します。置換 ACCOUNT_ID アカウント ID と REGION_ID AWS リージョン ID (us-east-1 など)。

    cat > policy.json << EOF {     "Version": "2012-10-17",     "Statement": [         {             "Sid": "RunInstancesInCapacityReservation",             "Effect": "Allow",             "Action": "ec2:RunInstances",             "Resource": [                 "arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/*",                 "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/*"             ]         }     ] } EOF
  2. 作成した JSON ファイル AWS アカウント を使用して、 にIAMポリシーを作成します。

    $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
  3. 次のポストインストールスクリプトをインスタンス上でローカルに作成し、postinstall.sh という名前を付けます。

    を AWS アカウント ID ACCOUNT_IDに、 を AWS リージョン ID (us-east-1 など) REGION_IDに置き換えます。

    #!/bin/bash set -e # Override run_instance attributes cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF {     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/EC2CRGroup"                 }             }         }     } } EOF

    Amazon S3 バケットにファイルをアップロードします。置換 amzn-s3-demo-bucket 特定の S3 バケット名。

    $ aws s3 mb s3://amzn-s3-demo-bucket aws s3 cp postinstall.sh s3://amzn-s3-demo-bucket/postinstall.sh
  4. プレースホルダーを独自の値に置き換えて、ローカルクラスター設定を作成します。

    Region: REGION_ID Image:   Os: alinux2 HeadNode:   InstanceType: c5.2xlarge   Ssh:     KeyName: YOUR_SSH_KEY   Iam:     S3Access:       - BucketName: amzn-s3-demo-bucket     AdditionalIamPolicies:       - Policy: arn:aws:iam::ACCOUNT_ID:policy/RunInstancesCapacityReservation   ## This post-install script is executed after the node is configured.   ## It is used to install scripts at boot time and specific configurations   ## In the script below we are overriding the calls to RunInstance to force   ## the provisioning of our my-queue partition to go through   ## the On-Demand Capacity Reservation   CustomActions:     OnNodeConfigured:       Script: s3://amzn-s3-demo-bucket/postinstall.sh   Networking:     SubnetId: YOUR_PUBLIC_SUBNET_IN_TARGET_AZ Scheduling:   Scheduler: slurm   SlurmQueues:     - Name: my-queue       ComputeResources:         - MinCount: 0           MaxCount: 100           InstanceType: p4d.24xlarge           Name: my-compute-resource           Efa:             Enabled: true       Networking:         ## PlacementGroup:         ##   Enabled: true ## Keep PG disabled if using targeted ODCR         SubnetIds:           - YOUR_PRIVATE_SUBNET_IN_TARGET_AZ
  5. クラスターを作成します。

    次のコマンドを使用してクラスターを作成します。置換 cluster-config.yaml 設定ファイル名を使用して、cluster-dl クラスター名、および REGION_ID リージョン ID (us-east-1 など) を使用します。

    $ pcluster create-cluster --cluster-configuration cluster-config.yaml --cluster-name cluster-dl --region REGION_ID

    クラスターが作成されると、ポストインストールスクリプトはヘッドノードで実行されます。このスクリプトは run_instances_overrides.json ファイルを作成し、RunInstances の呼び出しをオーバーライドして、パーティションのプロビジョニングがオンデマンドキャパシティ予約を経由するように強制します。

    クラスタースケーリングを担当する AWS ParallelCluster デーモンは、起動された新しいインスタンスに対してこの設定を自動的に使用します。指定したパラメータがインスタンスのプロビジョニングに使用されていることを確認するには、以下のログファイルを確認します。

    • /var/log/parallelcluster/clustermgtd (静的容量 - MinCount > 0)

    • /var/log/parallelcluster/slurm_resume.log (動的容量)

    パラメータが正しければ、ログエントリには以下が含まれます。

    Found RunInstances parameters override. Launching instances with: <parameters_list>

RunInstances オーバーライドの更新

生成されたJSON設定は、コンピューティングフリートを停止することなくいつでも更新できます。変更が適用されると、すべての新しいインスタンスは更新された設定で起動します。更新された設定を実行中のノードに適用する必要がある場合は、インスタンスの終了を強制してノードをリサイクルし、それらのノードが置き換えられる AWS ParallelCluster のを待ちます。これを行うには、Amazon EC2コンソールまたは からインスタンスを終了するか AWS CLI、Slurm DOWN または DRAIN状態のノード。

次のコマンドを使用して、 を設定します。Slurm ノードを DOWNまたは にDRAIN

$ scontrol update nodename=my-queue-dy-my-compute-resource-1 state=down reason=your_reason scontrol update nodename=my-queue-dy-my-compute-resource-1 state=drain reason=your_reason