
20分で構築できる AWS PCS サンプル HPC システム構築を試してみた
AWS Parallel Computing Service(PCS)のマネージメントコンソールからサンプル HPC システムを簡単に作成できるようになっていました。本記事では実際に環境を構築して動作確認した結果をご紹介します。
AWS PCSとは
AWS PCS は、HPC ワークロードの実行環境である HPC クラスターを提供するフルマネージドサービスです。従来の HPC クラスター構築に必要だった複雑な設定や運用管理の手間を大幅に削減し、研究者やエンジニアが計算処理に集中できる環境を提供します。
サンプルHPCシステムの作成手順
マネージメントコンソールから簡単にサンプルの HPC システムを作成できるようになりました。PCS のコンソール画面から「サンプル HPC システムの作成」を選択するだけです。
サンプル HPC システムに関する説明が表示されます。このサンプルでは、ログインノード 1 台と最大 4 台のコンピュートノードからなる HPC クラスターが構築されます。
「作成」ボタンをクリックすると、CloudFormation のスタック作成画面が表示されます。先日、最新のバージョンがリリースされた当日にそのバージョンが選択可能になっていました。AWS 管理の CloudFormation テンプレートは今のところメンテナンスが続いているようでした。
サンプルテンプレートで構築されるリソース
AWS から提供される CloudFormation テンプレートは以下のリソースを構築します。
- ネットワーク
- パブリックサブネットとプライベートサブネットを持つ新規 VPC の作成
- ストレージ
- 共有ストレージとしての EFS ファイルシステム
- 高速なストレージとしての FSx for Lustre ファイルシステム
- コンピューティングリソース
- AMI は標準で AWS から提供されているサンプルの AMI を使用
- 1 台のログインノード(パブリックサブネット上)
- 最大 4 台まで起動するコンピュートノード(プライベートサブネット上)
- ログインノードと、コンピュートノード用の起動テンプレート 2 種類
- スケジューラ
- Slurm バージョン選択可能
- セキュリティ設定
- セキュリティグループや、IAM ロールなど
地味に用意するのが手間な起動テンプレートを作成してくれるのはありがたいです。
実際に試してみた
サンプルテンプレートを使って PCS クラスターをデプロイしました。構築には約 20 分かかりました。デプロイ完了後、CloudFormation 出力タブに表示されるリンクから PCS コンソールと EC2 インスタンス情報にアクセスできます。
ログインノードにセッションマネージャーで接続も可能でした。ログインしてクラスターの状態を確認しました。
$ aws ssm start-session --target i-0d1f316a75e75a2f5
Starting session with SessionId: cm-sandbox-4pvof4pp2jh6n4s3bh9n36kxea
sh-4.2$
sh-4.2$ sudo su - ec2-user
[ec2-user@ip-10-3-4-199 ~]$
sinfo
コマンドの結果から、コンピュートノード 4 台が正常に構成されていることがわかります。また、df -h
コマンドで確認すると、共有ストレージとしての EFS マウントポイント(/home
)と FSx for Lustre マウントポイント(/shared
)が正しく設定されています。
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
demo up infinite 4 idle~ compute-1-[1-4]
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 3.8G 520K 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/nvme0n1p1 28G 15G 14G 52% /
/dev/nvme0n1p128 10M 3.8M 6.2M 38% /boot/efi
127.0.0.1:/ 8.0E 0 8.0E 0% /home
10.3.135.213@tcp:/tmhrrbev 1.2T 7.5M 1.2T 1% /shared
tmpfs 778M 0 778M 0% /run/user/0
簡単なジョブ実行テスト
サンプル HPC クラスター環境で並列計算を実行するため、MPI を使用した簡単なテストプログラムを作成します。
以下のコマンドでは、以下の手順を実行しています。
- テスト用のディレクトリを作成
- MPI を使用した簡単な C プログラムを作成
- コンパイル
- テストジョブスクリプトを作成
- ジョブをサブミット
mkdir -p ~/parallel_test && cd ~/parallel_test
# テスト用のMPIプログラムを作成
cat > mpi_hello.c << 'EOF'
#include <mpi.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
MPI_Init(&argc, &argv);
int world_size, world_rank;
char hostname[256];
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
gethostname(hostname, sizeof(hostname));
printf("Hello from processor %s, rank %d out of %d processors\n",
hostname, world_rank, world_size);
// 各プロセスのCPU情報を表示
printf("Rank %d - CPU Info: ", world_rank);
fflush(stdout);
char cmd[100];
sprintf(cmd, "lscpu | grep 'Model name' | sed 's/Model name://g' | tr -d ' \\t\\n'");
system(cmd);
printf("\n");
MPI_Finalize();
return 0;
}
EOF
# コンパイル
mpicc -o mpi_hello mpi_hello.c
# 実行スクリプトを作成
cat > run_mpi_test.sh << 'EOF'
#!/bin/bash
#SBATCH --nodes=2 # 2ノードを使用
#SBATCH --ntasks-per-node=4 # 各ノードで4タスク (c7g.xlargeの全vCPU)
#SBATCH --cpus-per-task=1 # 各タスクに1 CPU
#SBATCH --output=mpi_test_%j.out
#SBATCH --error=mpi_test_%j.err
#SBATCH --job-name=mpi_test
echo "ジョブ開始: $(date)"
echo "ノード一覧:"
scontrol show hostnames $SLURM_JOB_NODELIST
# ノード情報の詳細表示
echo "ノード詳細情報:"
scontrol show nodes $SLURM_JOB_NODELIST
# MPI実行
mpirun --map-by core --bind-to core ./mpi_hello
echo "ジョブ終了: $(date)"
EOF
# スクリプトに実行権限を付与
chmod +x run_mpi_test.sh
# ジョブを投入(demo キューを明示的に指定が必要)
sbatch -p demo run_mpi_test.sh
ジョブをサブミットした後、squeue
コマンドでジョブの状態を確認すると、2 台のコンピュートノードが割り当てられていることがわかります。コンピュートノードは初期状態ではすべて停止(EC2 未作成状態)していますが、ジョブ投入時に必要な数だけ自動的に起動されます。コンピュートノードが起動するまで時間かかるため放置します。
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
1 demo mpi_test ec2-user CF 0:02 2 compute-1-[1-2]
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
demo up infinite 2 alloc# compute-1-[1-2]
demo up infinite 2 idle~ compute-1-[3-4]
ジョブの実行が終わっていました。実行結果から、コンピュートノード 1 と 2 それぞれで実行できたことが確認できます。
$ cat mpi_test_1.out
ジョブ開始: Sun May 18 01:13:17 UTC 2025
ノード一覧:
compute-1-1
compute-1-2
ノード詳細情報:
NodeName=compute-1-1 Arch=aarch64 CoresPerSocket=1
CPUAlloc=4 CPUEfctv=4 CPUTot=4 CPULoad=0.38
AvailableFeatures=compute-1
ActiveFeatures=compute-1
Gres=(null)
NodeAddr=10.3.136.223 NodeHostName=ip-10-3-136-223 Version=24.11.5
OS=Linux 5.10.236-227.928.amzn2.aarch64 #1 SMP Sat Apr 19 16:55:31 UTC 2025
RealMemory=7782 AllocMem=0 FreeMem=6550 Sockets=4 Boards=1
State=ALLOCATED+CLOUD ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=demo
BootTime=2025-05-18T01:11:00 SlurmdStartTime=2025-05-18T01:13:15
LastBusyTime=2025-05-18T01:13:15 ResumeAfterTime=None
CfgTRES=cpu=4,mem=7782M,billing=4
AllocTRES=cpu=4
CurrentWatts=0 AveWatts=0
InstanceId=i-0a3d443644fc6c53d InstanceType=c7g.xlarge
NodeName=compute-1-2 Arch=aarch64 CoresPerSocket=1
CPUAlloc=4 CPUEfctv=4 CPUTot=4 CPULoad=0.60
AvailableFeatures=compute-1
ActiveFeatures=compute-1
Gres=(null)
NodeAddr=10.3.138.221 NodeHostName=ip-10-3-138-221 Version=24.11.5
OS=Linux 5.10.236-227.928.amzn2.aarch64 #1 SMP Sat Apr 19 16:55:31 UTC 2025
RealMemory=7782 AllocMem=0 FreeMem=6518 Sockets=4 Boards=1
State=ALLOCATED+CLOUD ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=demo
BootTime=2025-05-18T01:11:00 SlurmdStartTime=2025-05-18T01:13:16
LastBusyTime=2025-05-18T01:13:16 ResumeAfterTime=None
CfgTRES=cpu=4,mem=7782M,billing=4
AllocTRES=cpu=4
CurrentWatts=0 AveWatts=0
InstanceId=i-0ec2fe16a0b47f483 InstanceType=c7g.xlarge
Hello from processor ip-10-3-136-223.ap-northeast-1.compute.internal, rank 3 out of 8 processors
Rank 3 - CPU Info: Hello from processor ip-10-3-136-223.ap-northeast-1.compute.internal, rank 0 out of 8 processors
Rank 0 - CPU Info: Hello from processor ip-10-3-136-223.ap-northeast-1.compute.internal, rank 1 out of 8 processors
Rank 1 - CPU Info: Hello from processor ip-10-3-136-223.ap-northeast-1.compute.internal, rank 2 out of 8 processors
Rank 2 - CPU Info: Hello from processor ip-10-3-138-221.ap-northeast-1.compute.internal, rank 7 out of 8 processors
Rank 7 - CPU Info: Hello from processor ip-10-3-138-221.ap-northeast-1.compute.internal, rank 4 out of 8 processors
Rank 4 - CPU Info: Hello from processor ip-10-3-138-221.ap-northeast-1.compute.internal, rank 5 out of 8 processors
Rank 5 - CPU Info: Hello from processor ip-10-3-138-221.ap-northeast-1.compute.internal, rank 6 out of 8 processors
Rank 6 - CPU Info:
ジョブ終了: Sun May 18 01:13:26 UTC 2025
計算処理のテストも問題なく可能でした。
後片付け
比較的費用のかかるリソースですと、AWS PCS の利用料金、ログインノードの起動料金、FSx for Lustre の起動料金が発生します。検証後は不要であれば速やかに削除を推奨します。
CloudFormation のスタックからデフォルトのスタック名ですとget-started-cfn
という名前のスタックを削除します。これで今回構築されたリソースはすべて削除され課金も止まります。
まとめ
AWS PCS のサンプル HPC システム作成を使うことで、複雑な HPC クラスター環境を簡単に構築できました。
- HPC 環境構築の専門知識がなくても、AWS PCS の HPC クラスター環境を 20 分で準備可能
- 複数ノードにまたがる並列分散処理を実行可能
- HPC クラスターの削除は CloudFormation スタックを削除するだけで削除も簡単
- サンプル HPC システムの CloudFormation テンプレートは今のところメンテナスされている
おわりに
リリース当社は IaC での構築をサポートしていなく後に Terafform、CloudFormation からの構築をサポートしました。久しぶりに AWS PCS を触ったのですが、CloudFormation をサポートした後に今回のサンプル HPC システム作成がマネージメントコンソールに追加されたのだと思います。実用的なものなのか確認のために試してみた記録でした。普通に利用可能でしたし、アップデートへの追従も早いので PoC はこちらを利用するとよいのではないでしょうか。