こんにちは。ネットアップ合同会社のSales Specialistの小寺です。
今回は、少し前になりますが、理化学研究所 和光地区一般公開 2025に参加し、RIKENといえばスパコンということで、バーチャル富岳を構築してみました。
元々はAmazon FSx for Lusterなのですが、CloudFormationテンプレートを少し変更して、Amazon FSx for ONTAPにしています。
以下を参考にしています。
「プライベート富岳」の基本構成例
「バーチャル富岳」は、AWS が提供する Graviton3/3E ベースのインスタンス上で動作検証が行われています。
なぜ「共有ストレージ」利用するのか?
アーキテクチャではAmazon FSx for Lusterが利用されています。Compute Nodeからも共有される仕組みです。
共有ストレージを利用するメリットをまとめてみました。
ジョブ間でデータ共有が容易
Head Nodeと計算ノード間で同じファイルシステムを利用できるため、ジョブの入出力ファイルを
簡単に共有可能。
ワークフローの効率化
コード、ライブラリ、入力データを一度配置すれば、複数ノードで再利用できるのでセットアップ時間を削減。
スケーリング時の一貫性
ノードを追加しても同じストレージを参照できるため、分散計算やMPIジョブでデータ整合性を保てる。
クラスタ削除前のデータ保護が容易
外部ストレージへのエクスポートと組み合わせることで、長期保存やバックアップが簡単。
アプリケーション互換性
HPCアプリケーションは通常共有ファイルシステムを前提としているため、互換性を確保できる。
構築の流れ
以下の流れで構築します。
- EC2インスタンスの作成
- ParallelClusterのセットアップ
- クラスタの構築
- Singularityのインストール
- アプリケーションの実行
ParallelClusterのセットアップ
1. AWS ParallelClusterのインストール
(1)事前に作成しておいたParallelCluster実行用インスタンスにログインし下記コマンドを実行してpipをインストールします。
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py
pip --versionでバージョン確認ができました。
pip 25.2 from /home/ec2-user/.local/lib/python3.9/site-packages/pip (python 3.9)
(2) 下記コマンドを実行し、Pythonの仮想環境構築ライブラリvirtualenvをインストールします。
$ python3 -m pip install --upgrade pip
$ python3 -m pip install --user --upgrade virtualenv
(3) 以下のコマンドを実行して仮想環境を作成します。
$ python3 -m virtualenv ~/apc-ve
(4) 以下のコマンドを実行して仮想環境をアクティブ化します。
$ source ~/apc-ve/bin/activate
(5) ParallelClusterをインストールします。
(apc-ve) $ pip3 install aws-parallelcluster==3.10.1
(6) pcluster versionでバージョン確認します。
{
"version": "3.10.1"
}
(7) 以下のコマンドを実行してNode.jsのインストールをします。
(apc-ve) $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
(apc-ve) $ chmod ug+x ~/.nvm/nvm.sh
(apc-ve) $ source ~/.nvm/nvm.sh
(apc-ve) $ nvm install --lts
2. AWS ParallelClusterのセットアップ
(1) aws configure コマンドで認証情報を入力します。
(2) 以下のコマンドを実行してセットアップを行います。
(apc-ve)$ mkdir ~/pcluster-config
(apc-ve)$ pcluster configure --config ~/pcluster-config/cluster-config-01.yaml
・リージョンの選択:AWS Region ID [ap-northeast-1]:ap-northeast-1
・キーペアの選択:EC2 Key Pair Name [aws-pcluster-XXXXX]
・スケジューラの選択:Slurm
・OSの選択:rhel8
・Head Nodeのインスタンスタイプの選択:Graviton3/3Eベースのインスタンスとして、m7g.mediumを選択
| 項目 | 設定値 | 設定内容 |
|---|---|---|
| Number of queues [1] | 1 | queueの数を設定する |
| Name of queue 1 [queue1] | queue1 | queue名を設定する |
| [queue1]: queue1 Number of compute resources for queue1 [1]: | 1 | Queue1に割り当てる計算リソース数を設定 |
| Compute instance type for compute resource 1 in queue1 | m7g.2xlarge | 計算ノードのインスタンスタイプ |
| Maximum instance count [10]: | 10 | 最大利用できるnode数を設定 |
クラスタの構築
AWS ParallelCluster のセットアップが完了し、S3のバケット作成後に、クラスタ構築用のyamlを設定します。
(1) pcluster-configディレクトリ中に生成されたcluster-config-01.yamlに下記のストレージ設定を追記する。
LocalStorage:
RootVolume:
Size: 64
Encrypted: true
VolumeType: gp2
DeleteOnTermination: true
SharedStorage:
- MountDir: /shared/ontap
Name: ontap-storage
StorageType: FsxOntap
FsxOntapSettings:
FileSystemId: fs-12345678901234567
StorageVirtualMachine: svm-12345678901234567
VolumeName: pcluster-volume
VolumeSize: 1024 # GiB単位
SecurityStyle: unix
TieringPolicy:
CoolingPeriod: 31
Name: AUTO
MountOptions: nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2
AutoImportPolicy: NEW_CHANGED_DELETED
ExportPath: s3://pcluster-prod-ontap
ImportPath: s3://pcluster-prod-ontap
CF実行後に指定したマウントポイントでマウントされていることを確認します。
Singularityのインストール
Singularityをこちらからインストールします。
Singularityの特長
・イメージが単一ファイルで作成されるため、コンテナイメージの管理が直感的で容易
・イメージを展開せず、単一ファイルのまま利用できるため、アプリケーション稼働時の
共有ファイルシステムへの I/O を 抑制できる。
・ 起動したユーザーのID・権限がコンテナ内部で継承され、同一ユーザーとして
ファイル・ハードウエア・プロセスにアクセス可能
・イメージ作成やコンテナ実行に際して、root 権限やデーモンを一切介在させないため、
セキュアな運用が可能である。
テストアプリケーションを試してみる
提供されている手順では、Genesis、gromacs、scaleが紹介されています。
gromactで試してみましたが、ジョブ投入から1分以内に、Computeノードとしてm7g.2xlargeのインスタンスが起動しました。

以上が試してみた結果となります。
AWS ParallelClusterとAmazon FSx for NetApp ONTAPについては、以下の記事もありますので、興味あるかたはぜひご一読いただければ幸いです。3回シリーズです。
