AWS PCS入門 最小構成の PCS クラスターで共有ストレージは存在するのか確認してみた
AWS Parallel Computing Service(以降 AWS PCS)の最小構成でログインノードと、コンピュートノード間を共有できるストレージはあるのでしょうか?確認する機会がありましたので共有します。
確認結果
デフォルト設定ではログインノードと、コンピュートノード間で共有可能なストレージはありません。
起動テンプレートを利用して EFS などの共有ストレージをマウントする設定が必要になります。
例: EFS ファイルシステムを の共有ホームディレクトリとして使用する AWS PCS - AWS PCS
AWS PCS クラスターを作成するための前提事項
AWS PCS のドキュメントには、クラスター作成の前提条件として以下が記載されています。
- VPC の設定
- セキュリティグループの設定
- EFS の作成
- FSx for Lustre の作成
当初、FSx for Lustre はオプション扱いで共有ストレージは必須ではないと考えていました。ParallelCluster と似た感じで AWS PCS ならばログインノードの EBS がコンピュートノードへ共有されるのか疑問になりました。
検証用 PCS クラスターの構成
最小構成で PCS クラスターを作成しました。
- AMI は AWS がサンプルで用意している AMI をログインノードと、コンピュートノードで利用
- AMI 名:
aws-pcs-sample_ami-amzn2-x86_64-slurm-23.11-2024-10-21T13-53-16.112Z
- AMI ID:
ami-0236253926d9266ae
- AMI 名:
- 起動テンプレートはセキュリティグループのみ指定
- (おそらく)必要最低限の設定の起動テンプレートを用意
ジョブの実行結果はどこに保存されるのか確認してみた
コンピュートノードでジョブを実行し、実行結果はどこに保存されるのか。コンピュートノードのローカルなのか、どこかの共有ストレージなのか確認してみました。
ログインノードの確認
セッションマネージャーを使用してログインノードにアクセスしました。EC2 の EBS のみがマウントされていました。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 181M 0 181M 0% /dev
tmpfs 216M 0 216M 0% /dev/shm
tmpfs 216M 432K 215M 1% /run
tmpfs 216M 0 216M 0% /sys/fs/cgroup
/dev/nvme0n1p1 24G 18G 6.9G 72% /
tmpfs 44M 0 44M 0% /run/user/0
echo
で文字列を返すだけの簡単なスクリプト(test.sh
)をジョブとしてサブミットして、コンピュートノードを起動させます。
$ pwd
/home/ec2-user
$ sbatch test.sh
コンピュートノードの確認
ジョブ実行後、コンピュートノードにセッションマネージャーでログインしました。ログインノードと同様、EBS のみがマウントされていました。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 181M 0 181M 0% /dev
tmpfs 216M 0 216M 0% /dev/shm
tmpfs 216M 432K 215M 1% /run
tmpfs 216M 0 216M 0% /sys/fs/cgroup
/dev/nvme0n1p1 24G 18G 6.9G 72% /
tmpfs 44M 0 44M 0% /run/user/0
Slurm のデフォルト設定だと実行したスクリプトの標準出力・標準エラー内容が保存される.out
ファイルは、ホームディレクトリに保存されていました。ログインノードでジョブをサブミットしたパスが/home/ec2-user
だったため、コンピュートノードも同じくパスに実行結果が保存されました。とはいえど、デフォルトで利用可能なマウントされている共有ストレージはありませんでした。
$ pwd
/home/ec2-user
$ ls -l
total 4
-rw-rw-r-- 1 ec2-user ec2-user 6 Nov 9 06:33 slurm-3.out
総括
スクリプトの実行結果はコンピュートノードの EBS に保存されました。つまり、実行終了後のアイドルタイム(デフォルト 10 分)を経過するとコンピュートノードは削除されるため、EBS に保存されている実行結果も削除されます。
実行結果を永続的に保存するには、以下のいずれかの方法を採用する必要があります。
- スクリプト内で S3 などの外部ストレージにファイルを転送する
- EFS などの外部の共有ストレージをマウントする
起動テンプレートのuserData
を使用して、EFS をマウントする方法がドキュメントに記載されています。実運用では、共有ストレージのマウントが事実上必須となります。
例: EFS ファイルシステムを の共有ホームディレクトリとして使用する AWS PCS - AWS PCS
おわりに
AWS PCS では起動テンプレートのカスタマイズが必須スキルであることを学びました。