AWS ParallelClusterについて調べた時の備忘録です。
環境
ParallelClusterとは
ParallelClusterとは、AWS上にHPC環境を作成するためのソリューション、または環境作成用のCLIツールとなります。
AWS ParallelCluster is an AWS-supported open source cluster management tool that helps you to deploy and manage High Performance Computing (HPC) clusters in the AWS Cloud.
Blackbeltでの説明スライドです。
20200408 AWS Black Belt Online Seminar AWS ParallelCluster ではじめるクラウドHPC
HPC環境の作成
ハンズオンやチュートリアル資料を参考に、ParallelClusterを利用してHPC環境を作成してみます。
ParallelClusterのインストール
ParallelClusterのCLIツールを、CLIを実行したい環境(今回はUbuntu)にインストールします。公式手順のマニュアルを参考に、pip経由でインストールしています。
Install AWS ParallelCluster on Linux
$ python3 -m pip install aws-parallelcluster --upgrade --user $ pcluster version 2.9.1
ParallelClusterにてコンフィグの作成
ParallelClusterにて、HPC作成用のコンフィグファイルを作成します。このコンフィグファイルの情報を元に、ParalleClusterがCloudFormationテンプレートを生成し、HPC環境を作成してくれます。
ParallelClusterは、CloudFormationテンプレートを生成し、CloudFormation Stackを実行する訳で、そのためのIAM権限が必要とあります。AWS CLIに登録されているDefault ProfileのIAM User情報を参照することで、ParallelClusterはそのIAM権限(IAMユーザー)を取得するようです。それを踏まえて、AWS CLIのDefault Profileに AdministratorAccess
IAMポリシーをもったIAM Userを登録しておきます。(参照されるProfileをDefault Profileでなく、指定したProfileを利用できないか調べたのですが、見つかりませんでした。)
以下のコマンドにより、コンフィグ作成処理が開始されます。以降、ターミナル上で選択肢が表示されるため、利用したい設定を選択していきます。
$ pcluster configure --config sample
利用するリージョンを指定します。
Allowed values for AWS Region ID: 1. ap-east-1 2. ap-northeast-1 3. ap-northeast-2 4. ap-south-1 5. ap-southeast-1 6. ap-southeast-2 7. ca-central-1 8. eu-central-1 9. eu-north-1 10. eu-west-1 11. eu-west-2 12. eu-west-3 13. sa-east-1 14. us-east-1 15. us-east-2 16. us-west-1 17. us-west-2 AWS Region ID [us-east-1]: 2
作成されるEC2で利用されるEC2 Key Pairを指定します。
Allowed values for EC2 Key Pair Name: 1. aws-key-tech 2. eks-key-tech EC2 Key Pair Name [aws-key-tech]: 1
利用するジョブスケジューラーを指定します。選択できるスケジューラーは表示されているものですが、 SGE
と Torque
は、今後のUpdateで利用できなくなる発表がされています。
Starting on December 31, 2021, AWS will no longer include SGE and Torque support for all released versions of AWS ParallelCluster. Previous versions of AWS ParallelCluster that support SGE and Torque will still be available for download and use. However, these versions will not be eligible for future updates or troubleshooting support from AWS service and customer support teams. Moreover, future releases of AWS ParallelCluster made before and after December 31, 2021 will not include support for either SGE or Torque.
Schedulers supported by AWS ParallelCluster
今回は Slurm
を選択しています。
Allowed values for Scheduler: 1. sge 2. torque 3. slurm 4. awsbatch Scheduler [slurm]: 3
作成されるEC2で利用されるLinux ディストリビューションを指定します。今回は Amazon Linux2
を指定しています。
Allowed values for Operating System: 1. alinux 2. alinux2 3. centos6 4. centos7 5. ubuntu1604 6. ubuntu1804 Operating System [alinux2]: 2
Clusterで利用されるEC2の数と、Instance Typeを指定します。
Minimum cluster size (instances) [0]: 0 Maximum cluster size (instances) [10]: 5 Master instance type [t2.micro]: t3.micro Compute instance type [t2.micro]: t3.micro
ClusterのMaster NodeとCompute Nodeを配置するネットワーク情報を指定します。今回は、AWS推奨構成であるMaster NodeをPublic Subnetに配置し、Compute NodeをPrivate Subnetに配置する以下の構成としています。
Public Subnet + Private Subnet構成
Automate VPC creation? (y/n) [n]: n Allowed values for VPC ID: # id name number_of_subnets --- --------------------- ---------- ------------------- 1 vpc-XXXXXXXXXXXXXXXXX vpc-aaaa 9 2 vpc-XXXXXXXXXXXXXXXXX vpc-bbbb 8 VPC ID [vpc-XXXXXXXXXXXXXXXXX]: 2 Automate Subnet creation? (y/n) [y]: n Allowed values for Master Subnet ID: # id name size availability_zone --- ------------------------ ----------- ------ ------------------- 1 subnet-XXXXXXXXXXXXXXXXX public-a 4096 ap-northeast-1a 2 subnet-XXXXXXXXXXXXXXXXX public-c 4096 ap-northeast-1c 3 subnet-XXXXXXXXXXXXXXXXX public-d 4096 ap-northeast-1d 4 subnet-XXXXXXXXXXXXXXXXX protected-a 4096 ap-northeast-1a 5 subnet-XXXXXXXXXXXXXXXXX protected-c 4096 ap-northeast-1c 6 subnet-XXXXXXXXXXXXXXXXX protected-d 4096 ap-northeast-1d 7 subnet-XXXXXXXXXXXXXXXXX private-a 4096 ap-northeast-1a 8 subnet-XXXXXXXXXXXXXXXXX private-c 4096 ap-northeast-1c Master Subnet ID [subnet-XXXXXXXXXXXXXXXXX]: 1 Allowed values for Compute Subnet ID: # id name size availability_zone --- ------------------------ ----------- ------ ------------------- 1 subnet-XXXXXXXXXXXXXXXXX public-a 4096 ap-northeast-1a 2 subnet-XXXXXXXXXXXXXXXXX public-c 4096 ap-northeast-1c 3 subnet-XXXXXXXXXXXXXXXXX public-d 4096 ap-northeast-1d 4 subnet-XXXXXXXXXXXXXXXXX protected-a 4096 ap-northeast-1a 5 subnet-XXXXXXXXXXXXXXXXX protected-c 4096 ap-northeast-1c 6 subnet-XXXXXXXXXXXXXXXXX protected-d 4096 ap-northeast-1d 7 subnet-XXXXXXXXXXXXXXXXX private-a 4096 ap-northeast-1a 8 subnet-XXXXXXXXXXXXXXXXX private-c 4096 ap-northeast-1c Compute Subnet ID [subnet-XXXXXXXXXXXXXXXXX]: 4
入力が完了すると、コマンドを実行したカレントディレクトリに、指定したコンフィグファイル名(今回の場合は sample
)にてファイルが作成されています。
コンフィグファイルの編集
生成されたコンフィグファイルを編集することで、より詳細なCluster設定を可能となります。コンフィグファイルで利用されているパラメーターは、以下の公式サイトに記載されています。
以下は、今回作成したコンフィグ内容となります。
[global] cluster_template = default update_check = true sanity_check = true [aws] aws_region_name = ap-northeast-1 [aliases] ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS} [cluster default] base_os = alinux2 disable_hyperthreading = false # EC2のHyper Thredingを無効としたい時に指定 # enable_efa = compute Elastic Fabric Adapter (EFA) を有効化したい時に指定 key_name = aws-key-tech master_instance_type = t3.micro # placement = compute 指定するとCompute NodeのEC2が、同一Placement Groupに所属します # placement_group = DYNAMIC 利用するPlacement Groupを指定 scheduler = slurm vpc_settings = default queue_settings = compute [compute_resource default] initial_count = 0 instance_type = t3.micro max_count = 5 min_count = 0 [queue compute] compute_resource_settings = default compute_type = spot # spotインスタンスを利用したい時に指定 enable_efa = false [vpc default] vpc_id = vpc-54244133 master_subnet_id = subnet-d3cdf99a compute_subnet_id = subnet-0c1d897338ba64f8a
上記コンフィグに記載していないものとして、以下のような設定も可能です。
[cw_log XXXXX]
Node上のログをCloudwatch Logsに連携することができます。連携されるログ情報等は、以下より確認できます。
Integration with Amazon CloudWatch Logs
[dcv xxxxx]
正直このツールの利用イメージが良く分かっていないのですが。。。
作成するHPC環境に NICE DCV(NICE Desktop Cloud Visualization)
を構築することができます。NICE DCVとは、以前にAWSが買収したクラウドやデータセンター環境での機器を管理したり、3D グラフィカルツールを提供してくれるもの、らしいです。
NICE DCV is a high-performance remote display protocol that provides customers with a secure way to deliver remote desktops and application streaming from any cloud or data center to any device, over varying network conditions. With NICE DCV and Amazon EC2, customers can run graphics-intensive applications remotely on EC2 instances, and stream the results to simpler client machines, eliminating the need for expensive dedicated workstations. Customers across a broad range of HPC workloads use NICE DCV for their remote visualization requirements.
Connect to the head node through NICE DCV
[ebs XXXXX]/[efs XXXXX]/[fsx XXXXX]
Cluster内で利用できるStorageを指定できます。
EBSを指定した場合、指定したEBSがMaster Nodeにアタッチされ、Compute NodeからNFSとして利用されます。
EFSを指定した場合、同時作成された/既存のEFSファイルシステムをマウントして利用できます。
FSXを指定した場合、同時作成された/既存のFSx for Lusterファイルシステムをマウントして利用できます。
post_install/post_install_args/pre_install/pre_install_args
EC2作成時に、事前用意したシェルスクリプトをEC2上で実行することができます。
Clusterの作成
作成したコンフィグを指定して、Clusterを作成します。CloudFormationテンプレートが作成され、必要となるAWSリソースが作成されます。作成には10分くらいかかります。
$ pcluster create --config sample cluster01 Beginning cluster creation for cluster: cluster01 Creating stack named: parallelcluster-cluster01 Status: parallelcluster-cluster01 - CREATE_COMPLETE MasterPublicIP: 54.XXX.XXX.XXX ClusterUser: ec2-user MasterPrivateIP: 172.31.XXX.XXX
作成されているClusterの一覧を表示。コンフィグ単位で管理できます。
$ pcluster list --config sample cluster01 CREATE_COMPLETE 2.9.1
Clusterのステータスを確認するコマンド。
$ pcluster status --config sample cluster01 Status: CREATE_COMPLETE MasterServer: RUNNING MasterPublicIP: 54.XXX.XXX.XXX ClusterUser: ec2-user MasterPrivateIP: 172.31.XXX.XXX ComputeFleetStatus: RUNNING
指定Cluster内で、利用されるInstance情報を確認できます。
$ pcluster instances --config sample cluster01 MasterServer i-11111111111111111
ジョブの実行
作成したHPC環境にて処理を実行してみます。
実行スクリプトの作成
job.sh
という名前でスクリプトを作成します。
job.sh
#!/bin/bash # #SBATCH --job-name=sample #SBATCH --output=out.log # #SBATCH --nodes=2 #SBATCH --ntasks=2 #SBATCH --time=00:10:00 srun sleep 60 srun hostname srun date
SBATCH
というコマンドは、Slurmへジョブを投入するためのコマンドとなります。スクリプト内で #SBATCH
と記述することで、ジョブ実行時のパラメーターをスクリプト内で指定できるようなります。上記で指定している内容は「2台のNode上で2つのタスク(プロセス)を10分以内に実行する」というものになります。
srun
というコマンドは、Slurm管理上のクラスタで並列ジョブを実行するためのコマンドです。実際の環境では、このsrunコマンドを利用してMPIプログラムのコードを実行する事になるようです。
ジョブの実行
作成したスクリプトを実行してみます。
HPC環境のMasterServerにSSH接続します。ParallelCluster側でもSSHコマンドへのエイリアスにあたるオプションを用意しているようですが、僕の試した環境では動きませんでした。(config指定してClusterを作成していると動作しないぽい?)HPC作成時に指定したKey Pairが秘密鍵となっているため、通常通りSSHに接続します。
$ ssh ec2-user@XX.XX.XX.XX -i XXXX.pem
作成したスクリプトをMasterServer上にもってきて、ジョブを投入します。
$ sbatch job.sh
Submitted batch job 9
Slurm内のキューを確認すると、ジョブが投入されたことが分かります。Compute Node用SPOTインスタンス起動処理が走るため、実際の実行されるまでには若干のラグがあります。
$ squeue --long JOBID PARTITION NAME USER STATE TIME TIME_LIMI NODES NODELIST(REASON) 9 compute sample ec2-user CONFIGUR 0:34 10:00 2 compute-dy-t3micro-[1-2]
sinfo
とは、Slurm側で用意されているCompute Node確認用のコマンドです。新しく2台のNodeが起動されたことが分かります。
$ sinfo --long PARTITION AVAIL TIMELIMIT JOB_SIZE ROOT OVERSUBS GROUPS NODES STATE NODELIST compute* up infinite 1-infinite no NO all 2 mixed# compute-dy-t3micro-[1-2] compute* up infinite 1-infinite no NO all 3 idle~ compute-dy-t3micro-[3-5]
ParallelCluster側のコマンド結果からも、Compute NodeにあたるEC2が起動していることを確認できます。
$ pcluster instances --config sample cluster01
MasterServer i-11111111111111111
ComputeFleet i-22222222222222222
ComputeFleet i-33333333333333333
しばらくすると処理が環境します。以下は出力ファイルの結果です。
$ cat out.log compute-dy-t3micro-1 compute-dy-t3micro-2 Mon Oct 12 07:41:33 UTC 2020 Mon Oct 12 07:41:33 UTC 2020
HPC環境の削除
以下のコマンドにて、作成したHPC環境を削除できます。
$ pcluster delete --config sample cluster01