AWS ParallelCluster で OS は Ubuntu 22.04 を利用し、 Mountpoint for Amazon S3 を利用できるクラスター環境を構築手順を紹介します。
ヘッドノード、コンピュートノードから直接 S3 バケットのデータを取得できます。大容量のデータを読み取ることの多い機械学習、ゲノム解析(リファレンスゲノムなど)のワークロードで ParallelCluster を利用する場合は本構成もご検討ください。
Inventory icons created by Freepik - Flaticon
経緯
Mountpoint for Amazon S3 がリリース時点で最新だった ParallelCluster 3.6 + Ubuntu 20.04 でクラスターを構築手順は以前ご紹介しました。
その後に ParallelCluster 3.7 代がリリースされ、Ubuntu 22.04 を新たにサポートしました。
Ubuntu 22.04 を利用する場合、以前に紹介したクラスターの構築手順では失敗することがわかりました。原因切り分けについては以下のブログを参照ください。
運悪く ParallelCluster 3.7.0 以前のバージョンは脆弱性を抱えました。脆弱性対応済みのバージョンとして ParallelCluster 3.7.1 がリリースされています。
今後は ParallelCluster 3.7.1 以降のバージョンかつ、Ubuntu ユーザーは Ubuntu 22.04 への切り替えが進むことでしょう。そして Mountpoint for Amazon S3 の組み合わせの需要が見込まれます。
改めて構築手順を整理しました。
クラスター構築手順
全体の流れや、マウント用の S3 バケット、IAM ポリシーを事前に作成する Cloudformation テンプレートも以下のブログの通りで問題ありませんでした。比較的丁寧に設定方法を紹介していることもあり、必要な変更点のみをこちらの記事で紹介します。
AWS ParallelCluster に Mountpoint for Amazon S3 を使って S3 バケットをマウントする方法 | DevelopersIO
想定する要件
- ParallelCluster のバージョンは CVE-2023-41915 脆弱性対応済みの v3.7.1 または、それ以降
- 現時点で最新版は v3.7.1 です
- ※ 以降の動作保証はできないのですが問題を確認したらブログをアップすると思います
- OS は Ubuntu 22.04
- Ubuntu ユーザーは機をみて 20.04 からの移行をご検討されているのではないでしょうか
- Mountpoint for Amazon S3 をヘッドノード、コンピュートノードにマウントしたい
変更点: カスタムブートストラップアクションの準備
重要なポイントです。mount-s3
で必要なライブラリ(libfuse2
)を事前インストールする必要があります。
mount.sh
#! /bin/bash
sudo apt update
sudo apt install libfuse2 -y
wget -P /tmp https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb
sudo apt-get install /tmp/mount-s3.deb -y
sudo mkdir /mnt/s3
sudo mount-s3 --allow-delete --allow-other [マウントする S3 バケット名] /mnt/s3/
ParallelCluster 3.7.1 + Ubuntu 22.04 対応で大きな変更点だったのは、カスタムブートストラップアクションのスクリプト修正でした。
変更点: クラスターコンフィグ作成
Ubuntu 22.04 からは SSH 接続に必要なキーペアは ED25519 タイプが必須です。RSA タイプのキーペアだと接続できません。セッションマネージャーで運用される場合は気になりませんが仕様変更が入ったことはご認識しておいてください。
v371released.yaml
Region: ap-northeast-1
Image:
Os: ubuntu2204
Tags:
- Key: Name
Value: v371-cluster
# ----------------------------------------------------------------
# Head Node Settings
# ----------------------------------------------------------------
HeadNode:
InstanceType: t3.micro
Networking:
ElasticIp: false
SubnetId: subnet-0cc9326cae7a514a3
Ssh:
KeyName: sandbox-keypair
LocalStorage:
RootVolume:
Size: 40
Encrypted: true
VolumeType: gp3
Iops: 3000
Throughput: 125
# CustomActions:
# OnNodeConfigured:
Iam:
AdditionalIamPolicies:
- Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
- Policy: arn:aws:iam::123456789012:policy/hpc-dev-AllowMountpointForS3
S3Access:
- BucketName: hpc-dev-postinstall-files
EnableWriteAccess: false
# ----------------------------------------------------------------
# Compute Node Settings
# ----------------------------------------------------------------
Scheduling:
Scheduler: slurm
SlurmSettings:
ScaledownIdletime: 5
SlurmQueues:
# ------ Compute 1 ------
- Name: queue1
ComputeResources:
- Name: queue1
Instances:
- InstanceType: c6i.large
- InstanceType: m6i.large
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: true
ComputeSettings:
LocalStorage:
RootVolume:
Size: 40
Encrypted: true
VolumeType: gp3
Iops: 3000
Throughput: 125
CapacityType: SPOT
AllocationStrategy: lowest-price
Networking:
SubnetIds:
- subnet-0cc9326cae7a514a3
PlacementGroup:
Enabled: false
CustomActions:
OnNodeConfigured:
Script: s3://hpc-dev-postinstall-files/mount-moutpoint-for-s3/mount.sh
Iam:
AdditionalIamPolicies:
- Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
- Policy: arn:aws:iam::123456789012:policy/hpc-dev-AllowMountpointForS3
S3Access:
- BucketName: hpc-dev-postinstall-files
EnableWriteAccess: false
# ----------------------------------------------------------------
# Other Settings
# ----------------------------------------------------------------
Monitoring:
Logs:
CloudWatch:
Enabled: true
RetentionInDays: 180
DeletionPolicy: "Delete"
Dashboards:
CloudWatch:
Enabled: false
動作確認
クラスターをデプロイ後、ヘッドノードへログインしコンピュートノードに Mountpoint for Amazon S3 を通して S3 バケットをマウントできているのか確認します。
テストジョブの内容
カスタムブートストラップのスクリプトでコンピュートノードは/mnt/s3
ディレクトリに S3 バケットをマウントする設定にしています。/mnt/s3
のディレクトリのファイルを確認するテストジョブを投げます。
test.sh
#! /bin/bash
hostname
ls -l /mnt/s3
マウントした S3 バケットにあるオブジェクトはこんな感じです。ベンチマークのテストで生成されたファイルが転がっています。
実行結果
ジョブの実行結果を確認します。コンピュートノードから S3 バケットのオブジェクトを参照できています。
slurm-1.out
queue1-dy-queue1-1
total 39014400
-rw-r--r-- 1 root root 1073741824 Aug 27 04:38 SEQ8M-Q128T1-1G-Read.0.0
-rw-r--r-- 1 root root 524288000 Aug 27 07:29 SEQ8M-Q128T1-500M-Read.0.0
-rw-r--r-- 1 root root 1073741824 Aug 27 04:39 SEQ8M-Q128T16-1G-Read.0.0
-rw-r--r-- 1 root root 1073741824 Aug 27 04:42 SEQ8M-Q128T16-1G-Read.1.0
-rw-r--r-- 1 root root 1073741824 Aug 27 04:40 SEQ8M-Q128T16-1G-Read.10.0
-rw-r--r-- 1 root root 1073741824 Aug 27 04:40 SEQ8M-Q128T16-1G-Read.11.0
これで Ubuntu 22.04 対応の Moutpoint for Amazon S3 の動作確認がとれました。
おわりに
ゲノム解析のワークロードで Mountpoint for Amazon S3 ご利用の方は意見交換したいので仕事関係なしにご連絡お待ちしております。