

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

# マルチキューモードのクラスターでジョブを実行する
<a name="multi-queue-tutorial-v3"></a>

このチュートリアルでは、[複数のキューモードで](configuration-of-multiple-queues-v3.md) AWS ParallelCluster で最初のHello World「」ジョブを実行する方法について説明します。

 AWS ParallelCluster コマンドラインインターフェイス (CLI) または API を使用する場合、 AWS ParallelCluster イメージとクラスターを作成または更新したときに作成された AWS リソースに対してのみ料金が発生します。詳細については、「[AWS が使用する サービス AWS ParallelCluster](aws-services-v3.md)」を参照してください。

**前提条件**
+ AWS ParallelCluster [がインストールされます](install-v3-parallelcluster.md)。
+  AWS CLI [がインストールされ、設定されています。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Amazon EC2 のキーペア](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)がある。
+ [`pcluster`](pcluster-v3.md) CLI の実行に必要な[アクセス許可](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-example-user-policies)を持つ IAM ロールがある。

## クラスターを設定する
<a name="multi-queue-tutorial-v3-configure-cluster"></a>

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

```
$ pcluster version
```

`pcluster version` の詳細については、「[`pcluster version`](pcluster.version-v3.md)」を参照してください。

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

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

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

`pcluster configure` コマンドの詳細については、「[`pcluster configure`](pcluster.configure-v3.md)」を参照してください。

このステップを完了すると、`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
```

## クラスターを作成する
<a name="multi-queue-tutorial-v3-create-cluster"></a>

設定ファイルに基づいて `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.15.0",
   "clusterStatus": "CREATE_IN_PROGRESS"
 }
}
```

`pcluster create-cluster` コマンドの詳細については、「[`pcluster create-cluster`](pcluster.create-cluster-v3.md)」を参照してください。

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

```
$ 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.15.0",
   "clusterStatus": "CREATE_IN_PROGRESS"
 }
}
```

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

## ヘッドノードにログインします。
<a name="multi-queue-tutorial-v3-log-into-head-node"></a>

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

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

`pcluster ssh` の詳細については、「[`pcluster ssh`](pcluster.ssh-v3.md)」を参照してください。

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

`sinfo` の詳細については、*「Slurm ドキュメンテーション」*の[「sinfo」](https://slurm.schedmd.com/sinfo.html)を参照してください。

```
$ 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` 状態で存在し、クラスター内で利用可能であることがわかります。

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

## マルチキューモードでジョブを実行する
<a name="multi-queue-tutorial-v3-running-job-mqm"></a>

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

```
$ 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」](https://slurm.schedmd.com/sbatch.html)を参照してください。

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

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

```
$ 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-1` と `spot-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.list-clusters-v3.md)」および「[`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)」を参照してください。

```
$ 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"
 }
}
```