この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、吉井です。
いかがお過ごしでしょうか。
今回はCfnClusterを取り上げます。
CfnClusterは、HPC(ハイパフォーマンスコンピューティング)のワークロードを実行する環境を素早く簡単に作成出来るAWS製のツールです。
使いたい時に使いたい分だけコンピューティングリソースを作成し
計算が終わったら削除する、といった運用が可能です。
構成図
CfnClusterを使って以下のようなHPCクラスターをデプロイします。
左側の”作業ノード”はご自身の端末になります。
はじめに
以下は事前に作っておきます。
- VPC
- サブネット
- ルートテーブル
- インターネットゲートウェイ
- IAMユーザー(※)
- EC2 キーペア
(※)IAMユーザーにはAdministatorのポリシーをアタッチし、アクセスキーを発行しておきます。
CfnClusterの準備
CfnClusterインストール
作業ノードにCfnClusterをインストールします。
作業ノードのOSはLinux(Ubuntu)を想定しています。
CfnClusterはpythonで書かれています。まずはpythonをインストールしておきます。
$ sudo apt install python python-pip
CfnClusterをインストールします。
helpが表示されればOKです。
$ sudo pip install cfncluster
$ cfncluster --help
usage: cfncluster [-h] [--config CONFIG_FILE] [--region REGION] [--nowait]
{create,update,delete,start,stop,status,list,instances,configure,version}
...
~~省略~~
CfnCluster初期設定
CfnCluster初期設定用のコマンドを実行し、ご自身の環境に合わせた値を入力します。
$ cfncluster configure
Cluster Template [default]: <クラスター名を入力>
AWS Access Key ID []: <Access Keyを入力>
AWS Secret Access Key ID []: <Secret Access Keyを入力>
Acceptable Values for AWS Region ID:
ap-south-1
eu-west-3
eu-west-2
eu-west-1
ap-northeast-2
ap-northeast-1
sa-east-1
ca-central-1
ap-southeast-1
ap-southeast-2
eu-central-1
us-east-1
us-east-2
us-west-1
us-west-2
AWS Region ID []: <リージョンを入力>
VPC Name [public]: <CfnCluster設定ファイル内で定義する任意のVPC名を指定。実際のVPC名ではありませんのでご注意>
Acceptable Values for Key Name:
your_keypair
Key Name []: <キーペア名を入力>
Acceptable Values for VPC ID:
vpc_yourvpc
VPC ID []: <VPC IDを入力>
Acceptable Values for Master Subnet ID:
subnet-yoursubnet1
subnet-yoursubnet2
subnet-yoursubnet3
Master Subnet ID []: <Subnet IDを入力>
ホームディレクトリに設定ファイルが出来ているはずです。
$ ls ~/.cfncluster/
config
CfnClusterの起動
クラスター作成
cfncluster create <クラスター名>を実行するとクラスターが作成されます。(10~15分程度要する)
今回は「default」というクラスター名を設定しています。ご自身の環境に合わせてクラスター名を指定してください。
$ cfncluster create default
Beginning cluster creation for cluster: default
Creating stack named: cfncluster-default
Status: cfncluster-default - CREATE_COMPLETE
MasterPublicIP: nn.nn.nn.nn
MasterPrivateIP: mm.mm.mm.mm
GangliaPublicURL: http://nn.nn.nn.nn/ganglia/
GangliaPrivateURL: http://mm.mm.mm.mm/ganglia/
裏側ではCloudFormationが走っています。
AWSマネジメントコンソールからCloudFormationを見るとスタックが出来ています。
クラスター状態確認
cfncluster statusコマンドで状態を確認します。
$ cfncluster status default
Status: CREATE_COMPLETE
MasterServer: RUNNING
MasterPublicIP: nn.nn.nn.nn
MasterPrivateIP: mm.mm.mm.mm
GangliaPublicURL: http://nn.nn.nn.nn/ganglia/
GangliaPrivateURL: http://mm.mm.mm.mm/ganglia/
cfncluster instancesコマンドでクラスター内のインスタンスを確認します。
今回の例ではマスターノード1台、計算ノード2台が起動していることが確認出来ます。
$ cfncluster instances default
MasterServer i-xxxxxxxxxxxxxxxxx
ComputeFleet i-xxxxxxxxxxxxxxxxx
ComputeFleet i-xxxxxxxxxxxxxxxxx
テストジョブの実行
クラスターが出来たところでテストジョブを実行してみます。
マスターノードにsshで接続します。
/sharedというマウントポイントが出来ています。ここはNFSで計算ノードに共有されています。
全ノードへ見せたいデータ、例えば実行プログラムなどはここに配置します。
それでは、Hello Wolrdプログラムを作っていきましょう。
$ cd /shared
$ mkdir hw_work
$ cd hw_work
$ vi hellojob.sh
#!/bin/bash
sleep 30
echo "Hello World from $(hostname)"
Hello Worldプログラムをスケジューラーのキューに投入します。
qsub <プログラムパス>で投入、qstatでキューの状態確認です。
$ qsub hellojob.sh
Your job 1 ("hellojob.sh") has been submitted
$ qstat
job-ID prior name user state submit/start at queue slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
1 0.00000 hellojob.s ec2-user qw 07/13/2018 09:38:23 1
ホームディレクトリに結果が出力されています。
$ cat ~/hellojob.sh.o1
Hello World from <計算ノードホスト名>
クラスターの停止
計算が終わったらクラスターを停止しておきます。
作業ノードから cfncluster stop コマンドを実行します。
$ cfncluster stop default
Stopping compute fleet : default
$ cfncluster instances default
MasterServer i-xxxxxxxxxxxxxxxxx
計算ノードが停止しました。
cfncluster stopコマンドでは、マスターノードは停止しないのでご自身でシャットダウンします。
クラスターの削除
不要になったクラスターは削除します。
cfncluster deleteコマンドで削除出来ます。
$ cfncluster delete default
Deleting: default
Status: DynamoDBTable - DELETE_COMPLETE
Cluster deleted successfully.
最後に
ますは入門として初期設定でのクラスター作成~テストジョブ実行~削除までを試してみました。
インフラにそれほど詳しくない方でも簡単にHPCクラスターが実行出来そうです。