マルチキューモードのクラスターでジョブを実行する - AWS ParallelCluster

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

マルチキューモードのクラスターでジョブを実行する

このチュートリアルでは、初めての「Hello World」ジョブをAWS ParallelCluster でマルチキューモードを使用して実行する方法について説明します。

AWS ParallelCluster コマンドラインインターフェイス (CLI) または API を使用する場合、AWS ParallelCluster イメージとクラスターを作成または更新するときに作成された AWS リソースに対してのみお支払いいただくだけで利用可能です。詳細については、「AWS ParallelCluster で使用されるサービス AWS」を参照してください。

AWS ParallelCluster UI はサーバーレスアーキテクチャに基づいて構築されており、ほとんどの場合、AWS 無料利用枠のカテゴリー内で使用できます。詳細については、「AWS ParallelCluster UI コスト」を参照してください。

前提条件

クラスターを設定する

まず、次のコマンドを実行して、AWS ParallelCluster が正しくインストールされていることを確認します。

$ pcluster version

pcluster version の詳細については、「pcluster version」を参照してください。

このコマンドは、AWS ParallelCluster の実行中のバージョンを返します。

次に、pcluster configure を実行して、基本的な設定ファイルを生成します。このコマンドに続くすべてのプロンプトに従います。

$ pcluster configure --config multi-queue-mode.yaml

pcluster configure コマンドの詳細については、「pcluster configure」を参照してください。

このステップを完了すると、multi-queue-mode.yaml という名前の基本設定ファイルが表示されます。このファイルには、基本的なクラスター設定が含まれています。

次のステップでは、新しい設定ファイルを変更して、複数のキューを持つクラスターを起動します。

注記

このチュートリアルで使用される一部のインスタンスは、無料利用枠の対象外です。

このチュートリアルでは、設定ファイルを以下の設定に合わせて変更します。赤で強調表示されている項目は、設定ファイルの値を表します。お客様の値をご使用ください。

Region: region-id Image: Os: alinux2 HeadNode: InstanceType: c5.xlarge Networking: SubnetId: subnet-abcdef01234567890 Ssh: KeyName: yourkeypair Scheduling: Scheduler: slurm SlurmQueues: - Name: spot ComputeResources: - Name: c5xlarge InstanceType: c5.xlarge MinCount: 1 MaxCount: 10 - Name: t2micro InstanceType: t2.micro MinCount: 1 MaxCount: 10 Networking: SubnetIds: - subnet-abcdef01234567890 - Name: ondemand ComputeResources: - Name: c52xlarge InstanceType: c5.2xlarge MinCount: 0 MaxCount: 10 Networking: SubnetIds: - subnet-021345abcdef6789

クラスターを作成する

設定ファイルに基づいて multi-queue-cluster という名前が付けられたクラスターを作成します。

$ pcluster create-cluster --cluster-name multi-queue-cluster --cluster-configuration multi-queue-mode.yaml { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.7.0", "clusterStatus": "CREATE_IN_PROGRESS" } }

pcluster create-cluster コマンドの詳細については、「pcluster create-cluster」を参照してください。

次のコマンドを実行して、クラスターのステータスを確認します。

$ pcluster list-clusters { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.7.0", "clusterStatus": "CREATE_IN_PROGRESS" } }

クラスターが作成されると、clusterStatus フィールドは、CREATE_COMPLETE を表示します。

ヘッドノードにログインします。

プライベート SSH キーファイルを使用して、ヘッドノードにログインします。

$ pcluster ssh --cluster-name multi-queue-cluster -i ~/path/to/yourkeyfile.pem

pcluster ssh の詳細については、「pcluster ssh」を参照してください。

ログインしたら、sinfo スケジューラキューがセットアップされ設定されていることを確認します。

sinfo の詳細については、「Slurm ドキュメンテーション」「sinfo」を参照してください。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 18 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[1-9] spot* up infinite 2 idle spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

この出力では、1 つの t2.micro コンピューティングノードと 1 つのc5.xlarge コンピューティングノードが idle 状態で存在し、クラスター内で利用可能であることがわかります。

他のノードは、ノードの状態に ~ サフィックスが表示されてすべて省電力状態になり、EC2 インスタンスはそれらのノードをサポートしません。デフォルトのキューには、キュー名の後に * というサフィックスが付きますので、spot はデフォルトのジョブキューとなります。

マルチキューモードでジョブを実行する

次に、しばらくの間、ジョブをスリープ状態にして実行してみます。このジョブは、後で自分のホスト名を出力します。このスクリプトが現在のユーザーで実行できることを確認します。

$ tee <<EOF hellojob.sh #!/bin/bash sleep 30 echo "Hello World from \$(hostname)" EOF $ chmod +x hellojob.sh $ ls -l hellojob.sh -rwxrwxr-x 1 ec2-user ec2-user 57 Sep 23 21:57 hellojob.sh

sbatch コマンドを使用してジョブを送信します。このジョブに対して -N 2 オプションで 2 つのノードを要求し、ジョブが正常に送信されることを確認します。sbatch の詳細については、「Slum ドキュメンテーション」「sbatch」を参照してください。

$ sbatch -N 2 --wrap "srun hellojob.sh" Submitted batch job 1

squeue コマンドでは、キューの表示やジョブの状態を確認することができます。特定のキューを指定していないため、デフォルトのキュー (spot) が使用されます。squeue の詳細については、「Slurm ドキュメンテーション」の「squeue」を参照してください。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 1 spot wrap ec2-user R 0:10 2 spot-st-c5xlarge-1,spot-st-t2micro-1

ジョブが現在実行ステータスであることが出力に示されます。ジョブが終了するまで待機してください。これには約 30 秒かかります。その後、もう一度 squeue を実行してください。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)

キュー内のジョブがすべて終了したので、カレントディレクトリで slurm-1.out という名前の出力ファイル探します。

$ cat slurm-1.out Hello World from spot-st-t2micro-1 Hello World from spot-st-c5xlarge-1

この出力では、spot-st-t2micro-1spot-st-c5xlarge-1 の各ノードでジョブが正常に実行されたことが示されています。

次のコマンドで特定のインスタンスに制約条件を指定して、同じジョブを送信します。

$ sbatch -N 3 -p spot -C "[c5.xlarge*1&t2.micro*2]" --wrap "srun hellojob.sh" Submitted batch job 2

これらのパラメータを sbatch に使用しました。

  • -N 3 — 3 つのノードを要求します

  • -p spot — ジョブを spot キューへ送信します また、-p ondemand を指定して ondemand キューにジョブを送信することもできます。

  • -C "[c5.xlarge*1&t2.micro*2]" — このジョブの特定のノード制約を指定します。これは、このジョブに使用される 1 つの c5.xlarge ノードと 2 つの t2.micro ノードを要求します。

sinfo コマンドを実行して、ノードとキューを表示します。AWS ParallelCluster のキューは Slurm ではパーティションと呼ばれます。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 1 alloc# spot-dy-t2micro-1 spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 1 mix spot-st-c5xlarge-1 spot* up infinite 1 alloc spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

ノードの電源が入っています。これは、ノードの状態に # というサフィックスが付いていることで示されます。squeue コマンドを実行して、クラスター内のジョブに関する情報を表示します。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user CF 0:04 3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1

ジョブは CF (CONFIGURING) の状態で、インスタンスがスケールアップしてクラスターに参加するのを待っています。

約 3 分後、ノードが利用可能になり、ジョブは R (RUNNING) の状態になります。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user R 0:07 3 spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1

ジョブが終了すると、3 つのノードはすべて idle の状態になります。

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 17 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

そして、キューにジョブが残っていない状態になってから、ローカルディレクトリに slurm-2.out があるかどうかを確認します。

$ cat slurm-2.out Hello World from spot-st-t2micro-1 Hello World from spot-dy-t2micro-1 Hello World from spot-st-c5xlarge-1

これがクラスターの最終的な状態です。

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST spot* up infinite 17 idle~ spot-dy-c5xlarge-[1-9],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-t2micro-1,spot-st-c5xlarge-1,spot-st-t2micro-1 ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10]

クラスターからログオフした後、pcluster delete-cluster を実行してクリーンアップすることができます。詳細については、pcluster list-clusters および pcluster delete-cluster を参照してください。

$ pcluster list-clusters { "clusters": [ { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "CREATE_COMPLETE", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.1.4", "clusterStatus": "CREATE_COMPLETE" } ] } $ pcluster delete-cluster -n multi-queue-cluster { "cluster": { "clusterName": "multi-queue-cluster", "cloudformationStackStatus": "DELETE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/multi-queue-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "eu-west-1", "version": "3.1.4", "clusterStatus": "DELETE_IN_PROGRESS" } }