翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
オンデマンドキャパシティ予約 (ODCR) を使用してインスタンスを起動する
オンデマンドキャパシティ予約 (ODCR) を使用すると、特定のアベイラビリティーゾーンでクラスターの Amazon EC2 インスタンスのキャパシティを予約できます。これにより、Savings Plans
open
または targeted
の ODCR を設定できます。オープン ODCR は、ODCR 属性に一致するすべてのインスタンスを対象としています。これらの属性はインスタンスタイプ、プラットフォーム、およびアベイラビリティーゾーンです。ターゲット ODCR はクラスター設定で明示的に定義する必要があります。ODCR が open
または targeted
であるかどうかを確認するには、AWS CLI の Amazon EC2 describe-capacity-reservation
コマンドを実行します。
クラスタープレイスメントグループオンデマンドキャパシティ予約 (CPG ODCR) と呼ばれるクラスタープレイスメントグループに ODCR を作成することもできます。
複数の ODCR を 1 つのリソースグループにまとめることができます。これはクラスター設定ファイルで定義できます。リソースグループの詳細については、「Resource Groups とタグのユーザーガイド」の「What are resource groups?」を参照してください。
AWS ParallelCluster で ODCR を使用する
AWS ParallelCluster はオープン ODCR をサポートしています。オープン ODCR を使用する場合は、AWS ParallelCluster で何も指定する必要はありません。インスタンスはクラスター用に自動的に選択されます。既存のプレイスメントグループを選択するか、AWS ParallelCluster に新しいプレイスメントグループを作成させることができます。
クラスター設定の ODCR
AWS ParallelCluster バージョン 3.3.0 以降、クラスター設定ファイルで ODCR を定義できるようになり、Amazon EC2 実行インスタンスのオーバーライドを指定する必要がなくなりました。
まず、それぞれのリンク先のドキュメントで説明されている方法を使用して、キャパシティ予約とリソースグループを作成します。AWS CLI メソッドを使用してキャパシティ予約グループを作成する必要があります。AWS Management Console を使用する場合、タグベースまたはスタックベースのリソースグループしか作成できません。キャパシティ予約でインスタンスを起動する場合、AWS ParallelCluster または AWS CLI では、タグベースおよびスタックベースのリソースグループはサポートされません。
キャパシティ予約とリソースグループを作成したら、以下のクラスター設定例に示すように、SlurmQueues/CapacityReservationTarget または SlurmQueues/ComputeResources/CapacityReservationTarget で指定します。赤で強調表示されている値
を有効な値に置き換えます。
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 による複数インスタンスタイプ割り当てとは互換性がありません。
targeted
ODCRのサポートは AWS ParallelCluster 3.1.1 で追加されました。このリリースでは、EC2 の RunInstances
パラメータをオーバーライドして、設定されている AWS ParallelCluster の各コンピューティングリソースに使用する予約に関する情報を渡すメカニズムが導入されました。このメカニズムは targeted
ODCR と互換性があります。ただし、targeted
ODCR を使用する場合は、run-instances
オーバーライド設定を指定する必要があります。ターゲット ODCR は AWS CLI の Amazon EC2 run-instances
コマンドで明示的に定義する必要があります。ODCR が open
または targeted
であるかどうかを判断するには、AWS CLI の Amazon EC2 コマンド describe-capacity-reservation
を実行します。
複数の ODCR を 1 つのリソースグループにまとめることができます。これを実行インスタンスオーバーライドで使用すると、同時に複数の ODCR をターゲットにすることができます。
targeted
ODCR を使用している場合は、プレイスメントグループを指定できます。ただし、run-instances
オーバーライド設定も指定する必要があります。
AWS が targeted
ODCR を作成したとします。または、特定のリザーブドインスタンスセットがあるとします。そうなると、プレイスメントグループを指定できなくなります。AWS によって設定されるルールは、プレイスメントグループの設定と競合する可能性があります。そのため、アプリケーションにプレイスメントグループが必要な場合は、CPG ODCR を使用してください。いずれの場合も、run-instances
オーバーライド設定を指定する必要があります。
CPG ODCR を使用している場合は、run-instances
オーバーライド設定を指定し、クラスター設定でも同じプレイスメントグループを指定する必要があります。
AWS ParallelCluster でのリザーブドインスタンスの使用
リザーブドインスタンスはキャパシティ予約 (ODCR) とは異なります。リザーブドインスタンスには 2 つのタイプがあります。リージョンのリザーブドインスタンスでは、キャパシティは予約されません。ゾーンのリザーブドインスタンスでは、指定されたアベイラビリティーゾーンでキャパシティが予約されます。
リージョンのリザーブドインスタンスがある場合、キャパシティが予約されず、容量不足エラーが発生する可能性があります。ゾーンのリザーブドインスタンスがある場合、キャパシティ予約はできますが、その指定に使用できる run-instances
API パラメータはありません。
リザーブドインスタンスはどの AWS ParallelCluster バージョンでもサポートされています。AWS ParallelCluster では何も指定する必要はなく、インスタンスは自動的に選択されます。
ゾーンのリザーブドインスタンスを使用するときは、クラスター設定でプレイスメントグループの指定を省略することで、発生する可能性のある容量不足エラーを回避できます。
警告
-
AWS ParallelCluster バージョン 3.3.0 以降では、この方法はお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。
-
このメソッドは Slurm による複数インスタンスタイプ割り当てとは互換性がありません。
クラスターキューに設定されているコンピューティングリソースごとに Amazon EC2 の RunInstances
パラメータをオーバーライドできます。そのためには、以下のコードスニペットコンテンツを含む /opt/slurm/etc/pcluster/run_instances_overrides.json
ファイルをクラスターのヘッドノードに作成します。
-
${queue_name}
はオーバーライドを適用するキューの名前です。 -
${compute_resource_name}
オーバーライドを適用するコンピューティングリソースです。 -
${overrides}
は、キューとインスタンスタイプの特定の組み合わせに使用するRunInstances
オーバーライドのリストを含む任意の JSON オブジェクトです。オーバーライドの構文は、run_instancesboto3 呼び出しで説明されているのと同じ仕様に従う必要があります。
{ "${queue_name}": { "${compute_resource_name}": { ${overrides} }, ... }, ... }
例えば、次の JSON は、my-queue
と my-compute-resource
で設定された p4d.24xlarge
インスタンスに ODCR グループ group_arn
を使用するように設定します。
{
"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 による複数のインスタンスタイプの割り当て と互換性がありません。
-
リソースグループを作成し、容量をグループ化します。
$
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 を作成するたびに、それをグループ予約に追加します。
はアカウント ID に、ACCOUNT_ID
はキャパシティ予約 ID に、PLACEHOLDER_CAPACITY_RESERVATION
は AWS リージョン ID (us-east-1 など) に置き換えてください。REGION_ID
$
aws resource-groups group-resources --region
REGION_ID
--groupEC2CRGroup
\ --resource-arns arn:aws:ec2:REGION_ID
:ACCOUNT_ID
:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION
ローカルコンピュータでポリシードキュメントを作成します。
をアカウント ID に、ACCOUNT_ID
を AWS リージョン ID (us-west-2 など) に置き換えます。REGION_ID
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 -
作成した JSON ファイルを使用して、AWS アカウントに IAM ポリシーを作成します。
$
aws iam create-policy --policy-name
RunInstancesCapacityReservation
--policy-document file://policy.json -
次のポストインストールスクリプトをインスタンス上でローカルに作成し、
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
" } } } } } EOFAmazon 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 -
プレースホルダーを独自の値に置き換えて、ローカルクラスター設定を作成します。
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
-
クラスターを作成します。
次のコマンドを使用してクラスターを作成します。
を構成ファイル名に、cluster-config.yaml
をクラスター名に、cluster-dl
REGION_ID
をリージョン ID (us-east-1 など) に置き換えます。$
pcluster create-cluster --cluster-configuration
cluster-config.yaml
--cluster-namecluster-dl
--regionREGION_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