AWS ParallelClusterのコンピュートノード最小起動数設定
AWS ParallelClusterのコンピュートノードの最小起動数設定
maintain_initial_size
の設定検証- 検証対象のParallelClusterのバージョンはv2.7とv2.8.1
- 最小起動数0から最小起動数2に変更した際のv2.7のエラー対応方法
[cluster] section - AWS ParallelCluster
コンピュートノードの増減
本題に入る前にコンピュートノードのスケールイン・アウトを簡単に説明します。
よくあるParallelClusterの利用方法
ヘッドノードにSSH接続してジョブをジョブスケジューラに登録します。
ジョブスケジューラがジョブを管理し、ジョブを処理するのに必要な数のコンピュートノード(インスタンス)を起動してジョブを処理させます。
処理するジョブがなければコンピュートノードを削除してヘッドノードのみ起動している最初の状態に戻ります。
コンピュートノードを常時起動
演算処理提供するサービスなどでParallelClusterを利用する場合、ジョブ登録後すぐに演算したいといった要望もあります。通常、素の状態のコンピュートノードで起動までに約10分かかります。ブートストラップの処理を追加すると起動時間は更に長くなります。
コンピュートノードを都度起動させるのではなく一定台数のインスタンスを常時起動し待機させることもできます。
もちろんジョブが増えるとコンピュートノードをスケールアウトして処理できます。
処理するジョブがなくても最低起動数以下にはスケールインしません。
検証内容
「よくあるParallelClusterの利用方法」の状態から「コンピュートノードを常時起動」に設定を切り替えを行います。そのときに出くわしたエラーと対応方法を残します。
検証環境構成
項目 | 値 |
---|---|
OS | Amazon Linux2 |
ジョブスケジューラ | Slurm |
ParallelClusterバージョン | 2.7 と 2.8.1 |
検証用コンフィグ
構築する環境に合わせて適時変更してください。とくに下記の項目は環境に依存します。
- aws_region_name
- key_name
- vpc_id
- master_subnet_id
- compute_subnet_id
tags
はParallelClusterのバージョン合わせてNameタグのみ変更し2つのバージョンで検証しました。
[aws] aws_region_name = ap-northeast-1 [global] cluster_template = default update_check = true sanity_check = true [aliases] ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS} [cluster default] key_name = sandbox-key base_os = alinux2 scheduler = slurm vpc_settings = custom # Instance Type master_instance_type = m5.large compute_instance_type = c5.large # Use Spot Instance cluster_type = spot # Use Placemant Group placement = compute placement_group = DYNAMIC # Cluster Size maintain_initial_size = false initial_queue_size = 0 max_queue_size = 4 # Enable CloudWatchLogs cw_log_settings = cluster_log # Tag tags = { "Name" : "Cluster-v27" } [vpc custom] # VPC Setting vpc_id = vpc-04dcdf74763d5c39d master_subnet_id = subnet-04c8f3243a402645c compute_subnet_id = subnet-03e507e27d135a555 use_public_ips = true [cw_log cluster_log] # CloudWatchLogs Setting enable = true retention_days = 7
クラスター作成
pcluster create [cluster-name] -c [config]
コマンドで構築します。ParallelClusterのバージョンはvenvで切り替えてクラスターを作成しています。
ParallelCluster v2.8.1の作成
> pcluster create cluster-v28 -c v28-config Beginning cluster creation for cluster: cluster-v28 Info: There is a newer version 2.9.1 of AWS ParallelCluster available. Creating stack named: parallelcluster-cluster-v28 Status: parallelcluster-cluster-v28 - CREATE_COMPLETE MasterPublicIP: 54.168.49.154 ClusterUser: ec2-user MasterPrivateIP: 10.1.10.130
ParallelCluster v2.7の作成
> pcluster create cluster-v27 -c v27-config Beginning cluster creation for cluster: cluster-v27 Info: There is a newer version 2.9.1 of AWS ParallelCluster available. Creating stack named: parallelcluster-cluster-v27 Status: parallelcluster-cluster-v27 - CREATE_COMPLETE MasterPublicIP: 54.178.19.101 ClusterUser: ec2-user MasterPrivateIP: 10.1.10.252
AutoScalingGroupの状態
ParallelClusterののスケールアウト・インは内部的にはAutoScalingGruopで管理されています。AutoScalingGroupを確認することでParallelClusterの裏の動きを把握できます。
クラスターの設定変更
設定ファイルを編集しpcluster update [cluster-name] -c [config]
コマンドで更新します。
設定ファイル編集箇所
コンピュートノード2台常時起動するべく以下の2箇所変更しました。
# Cluster Size maintain_initial_size = true initial_queue_size = 2 max_queue_size = 4
ParallelCluster v2.8.1の更新
v2.8.1では設定ファイル内でタグを指定の記述を書くと--force
をオプションを指定しないとupdate
をかけられません。設定変更箇所の差分を検出して実行前に確認できます。タグ指定は差分検出ができなく毎回表示されてしまいます。
> pcluster update cluster-v28 -c v28-config --force Validating configuration file v28-config... Retrieving configuration from CloudFormation for cluster cluster-v28... WARNING: Forced update applied. All safety checks will be skipped. Not all updates may be applied and your cluster may become unstable. Found Configuration Changes: # parameter old value new value --- --------------------- ----------- ----------------------- [cluster default] 01 initial_queue_size - 2 02 maintain_initial_size - True 03 tags - {'Name': 'Cluster-v28'} Do you want to proceed with the update? - Y/N: y Updating: cluster-v28 Calling update_stack Status: parallelcluster-cluster-v28 - UPDATE_COMPLETE
なにごともなく正常に設定が反映されます。
AutoScalingGroupの状態
EC2の状態
常時2台のコンピュートノードが起動しています。
ParallelCluster v2.7の更新
同様にupdate
をかけます。UPDATE_ROLLBACK_IN_PROGRESS
で失敗します。
> pcluster update cluster-v27 -c v27-config Updating: cluster-v27 Calling update_stack Status: parallelcluster-cluster-v27 - UPDATE_ROLLBACK_IN_PROGRESS
原因切り分け
CloudFormationのイベントログから原因を切り分けます。
Desired capacity:0 must be between the specified min size:2 and max size:4 (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: c5e94df6-af90-41cf-a62c-ec479a18e885; Proxy: null)
Desired capacityが0だから最小数2に変更できないと...
エラー対応
AutoScalingGroupのDesired capacityを手動で変更して回避します。
希望する容量が0のところを
2に変更しました。
こうなります。
再度、update
コマンドを打つとUPDATE_COMPLETE
で成功します。
> pcluster update cluster-v27 -c v27-config Updating: cluster-v27 Calling update_stack Status: parallelcluster-cluster-v27 - UPDATE_COMPLETE
AutoScalingGroupの状態
AutoScalingGroupは最終的にv2.8.1の結果と同じになります。
EC2の状態
v2.8.1同様に2台のコンピュートノードが常時起動します。
おわりに
v2.7のParallelClusterの設定変更時に調査しv2.8.1の結果も踏まえまとめました。ParallelCluster 2.7お使いでAutoScalingの動作に困った方の参考になれば幸いです。
ちなみにv2.9ではAutoScalingGroupは使われなくなりました。