この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS ParallelCluster v3.0.0がリリースされました。v2.11.2からのメジャーアップデートです。
機能追加、変更が多すぎるため詳細はリリースノートをご確認ください。
Release AWS ParallelCluster v3.0.0 · aws/aws-parallelcluster
目立った機能追加
- Amazon API Gatewayから
pcluster
コマンドを呼び出せるようになりました。- 外部から容易にクラスターの管理ができるようになりました。
- 従来はAWS Systems Manager Run Commandや、Lambdaで頑張ってやってました。
- カスタムAMIの作成をサポート
- コンピュートノードで利用する設定済みアプリケーションを焼き込んだゴールデンAMIを作るのが容易になりました。
- 従来はカスタムAMIの利用はできたのですが非推奨となっていました。
- ハマって時間を溶かしたことがあるので非推奨たる所以を身を以て知りました。
個人的な注目ポイント
- コンフィグファイルの書式が刷新されてYAML形式になりました。
- 視認性が良くなった。
- 過去の設定ファイルを使いまわしができなくなった。
- 設定値の読み替えドキュメントは用意されています。
pcluster
コマンドのオプションが刷新された。- コマンドリファレンスみるか、
pcluster -h
でヘルプみないと何も打てない。
- コマンドリファレンスみるか、
- ヘッドノード、コンピュートノードのルートボリュームにgp3をついにサポート。
- デフォルトは
gp2
のため明示的にgp3
を指定する必要はある。 - 最低必要容量は35GBと変更なし。
- デフォルトは
- ヘッドノードのNFS共有していた追加EBS(
/share
)がなくなった。- 代りにルートボリュームの
/home
をNFS共有。 - デフォルトのEBS構成はルートボリュームの1本のみ
- 代りにルートボリュームの
- ヘッドノード、コンピュートノードで別々のセキュリティグループ、IAMロールを設定可能になった。
- 込み入った要件があるとき設計が大変だったのが解消されました。
- モニタリングツールGangliaが廃止された。
- CloudWatchダッシュボード自動生成機能があるので晴れて引退。
今回はコンフィグファイル移植が手間そうですね。マルチキューモードのコンフィグを紹介するために作ってみます。
クラスターを作ってみた
項目 | 値 |
---|---|
AWS ParallelCluster | 3.0.0 |
Slurm(sinfo -V) | 20.11.8 |
OS | Ubuntu 20.04 LTS |
CPU | AMD |
HeadNode | t3a.micro |
ComputeNode | t3a.small(Ondemand) and c5a.large(Spot) |
Multiple queue mode | Enable |
コンフィグファイル作成
クラスターを生み出すコンフィグファイルの設定値は以下のリンクを参考にサンプルを作成しました。移行ガイド見ても新しい設定項目名がよくわからないので、素直にドキュメント見ながら書き直した方が早いと判断しました。
設定概要
- マルチキューモード設定
- オンデマンド起動の
test-ondemand
- スポット起動の
cpu-spot
- プレイスメントグループ有効
- オンデマンド起動の
- ヘッドノードのルートボリューム
gp3
指定 - コンピュートノードのルートボリューム
gp3
指定
first-config.yml
Region: ap-northeast-1
Image:
Os: ubuntu2004
HeadNode:
InstanceType: t3a.micro
Networking:
ElasticIp: true
SubnetId: subnet-035be95eeaa091603
Ssh:
KeyName: sandbox-key
LocalStorage:
RootVolume:
Size: 35
Encrypted: false
VolumeType: gp3
Iops: 3000
Throughput: 125
Scheduling:
Scheduler: slurm
SlurmQueues:
- Name: test-ondemand
ComputeResources:
- Name: t3asmall
InstanceType: t3a.small
MinCount: 0
MaxCount: 5
Networking:
SubnetIds:
- subnet-035be95eeaa091603
- Name: cpu-spot
ComputeResources:
- Name: c5alarge
InstanceType: c5a.large
MinCount: 0
MaxCount: 10
ComputeSettings:
LocalStorage:
RootVolume:
Size: 35
Encrypted: false
VolumeType: gp3
Iops: 3000
Throughput: 125
CapacityType: SPOT
Networking:
SubnetIds:
- subnet-035be95eeaa091603
PlacementGroup:
Enabled: true
クラスター作成
pcluster create-cluster
コマンドを使用します。
> pcluster create-cluster --cluster-name sample-cluster --region ap-northeast-1 --cluster-configuration first-config.yml --debug
{
"cluster": {
"clusterName": "sample-cluster",
"cloudformationStackStatus": "CREATE_IN_PROGRESS",
"cloudformationStackArn": "arn:aws:cloudformation:ap-northeast-1:12345679012:stack/sample-cluster/7d248650-12e1-11ec-9487-0e61a8e4def9",
"region": "ap-northeast-1",
"version": "3.0.0",
"clusterStatus": "CREATE_IN_PROGRESS"
}
}
ヘッドノードへログイン
SSHで接続しました。
オンデマンドインスタンスが起動するパーティション指定でテストジョブを登録します。計算するわけではなくホスト名を返すだけのスクリプトを投げています。
sbatch -n 1 -p test-ondemand tesh.sh
コンピュートノードが起動してきました。
オンデマンドインスタンスで間違いないです。はじめてのコンフィグファイルだと意図通り設定されているかいつも不安です。
次はスポットインスタンスが起動するパーティション指定でテストジョブを登録してみます。せっかくなので-n 20
で20プロセス分指定しました。
$ sbatch -n 20 -p cpu-spot tesh.sh
コンピュートノードが10台起動してきました。
スポットインスタンスです。プレイスメントグループも設定も入っています。
クラスター構築と簡単な動作確認はできました。
クラウドHPCのよいところ
同時に大量のコンピュートノードを利用できて、インスタンスが起動していた時間分の従量課金です。計算リソースを気にせず、すぐに使えるのが魅力ですね。あと、スポットインスタンスを活用することで最大9割り引きで計算リソースを確保できます。ただ、インスタンスが中断する可能性があります。それでもHPCの計算ノードにスポットインスタンスは相性が良いと思います。
コンピュートノードは仕事を終えると削除されるテンポラリなインスタンスです。ここが従来のHPC環境と大きく異なる点です。v3.0.0からカスタムAMIが使いやすくなっていそうなので、旧来のParallelClusterとはまた違った構成を検討できそうです。追々検証しながら考えてみます。
おわりに
予想通りコンフィグファイル作成に難航しました。マルチキューモード、スポット利用、プレイスメントグループの最低限抑えたものを作りました。さっそく試してみたい方は環境作って検証してみてください。