AWS ParallelCluster Manager でコンピュートフリートの停止開始をやってみた

GUI でコンピュートフリートの停止・開始ができる!楽だ!!
2022.08.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンピュートフリートの停止・開始コマンドが長くていつになっても覚えられません。AWS ParallelCluster Manager なら Web コンソール(GUI)でコンピュートフリートの停止・開始ができるようなので試してみました。

ユースケース

クラスターの設定変更するときはだいたいコンピュートフリートを停止し、更新かけて、コンピュートフリートを開始する流れになります。一連の作業は以下のリンクで紹介しています。

コンピュートフリートの停止・開始コマンドのこの部分を ParallelCluster Manager から実行してみます。

# コンピュートフリート停止コマンド
$ pcluster update-compute-fleet --cluster-name ${CLUSTER_NAME} --status STOP_REQUESTED

# コンピュートフリート開始コマンド
$ pcluster update-compute-fleet --cluster-name ${CLUSTER_NAME} --status START_REQUESTED

前提知識

クラスターの設定変更する前にコンピュートフリートを停止の状態にする必要があります。コンピュートフリートの停止はヘッドノード(EC2 インスタンス)を停止することではありません。

コンピュートフリートとは

コンピュートフリートとはコンピュートノードの集まりのことを指しています。ParallelCluster で登場する EC2 インスタンスは大きく分けるとヘッドノードと、コンピュートノードの2種類あります。

ヘッドノードはジョブ管理をする EC2 インスタンスです。ユーザーからのジョブを受け付け計算リソースへ適切な割当を行いクラスターの管理をするのが役割です。

コンピュートノードは計算処理を実行する EC2 インスタンスです。ジョブスケジューラーにジョブがサブミットされるとヘッドノードからの指示で自動的に起動し計算処理を行い、計算が終わると終了(削除)されるインスタンス達です。

クラスターの設定変更する条件としてコンピュートノード達(コンピュートフリート)を利用できない状態にする必要があります。クラスターの設定変更でクラスター自体に処理更新かけている最中に計算処理を実行できないようになどの理由があるものかと思われます。

コンピュートフリートのステータス管理場所

コンピュートフリートのステータうは DynamoDB で管理されています。ParallelCluster 3.2 からは以下の2つテーブルが作られるようになりました。そのうち parallelcluster-[ClusterName]でコンピュートフリートのステータスが管理されています。

  1. parallelcluster-[ClusterName]
    • コンピュートフリートのステータス管理で使用
  2. parallelcluster-slum-[ClusterName]
    • コンピュートノードの管理で使用

COMPUTE_FLEETのキーにstatusが格納されています。

3.1.4以前は parallelcluster-[ClusterName]テーブル1つでコンピュートフリートのステータスの記録、コンピュートノードを記録されていました。

やってみた

コンピュートノード停止、開始操作はヘッドノードが起動中のときに実行できます。

computeFleetStatusは通常RUNNING状態です。

コンピュートフリートの停止操作

対象のクラスターを選択しStopボタンをクリックします。

コンピュートノード達を停止するため計算実行中の場合はお気をつけください。停止したいのでStop!をクリックします。

レスポンスはとくになく Detail タブからcomputeFleetStatusを確認して状態を確認できます。

DynamoDB テーブルの様子

2回目のStop!を実行するとSTOP_REQUESTED -> STOPPEDと遷移します。

{"lastStatusUpdatedTime":{"S":"2022-08-16 07:16:02.755656+00:00"},"status":{"S":"STOP_REQUESTED"}}

少し経ってからテーブルの内容を確認した様子。コンピュートフリートの停止状態です。

{"lastStatusUpdatedTime":{"S":"2022-08-16 07:16:35.022606+00:00"},"status":{"S":"STOPPED"}}

コンピュートフリートの停止操作

対象のクラスターを選択しStartボタンをクリックします。

確認画面も、レスポンスもとくになく Detail タブからcomputeFleetStatusを確認して状態を確認できます。

DynamoDB テーブルの様子

START_REQUESTED -> STARTING -> RUNNINGと遷移します。最後のRUNNINGだけサンプルに載せておきます。

{"lastStatusUpdatedTime":{"S":"2022-08-16 07:17:34.588511+00:00"},"status":{"S":"RUNNING"}}

ヘッドノード停止中に停止を実行したら?

ヘッドノードが停止中にStopをクリックして、コンピュートフリートの停止処理を実行してみました。ParallelCluster Manager から確認できるcomputeFleetStatusRUNNINGのまま変化しません。DynamoDB のテーブルを参照するとステータスはRUNNINGのままです。

次にヘッドノードを起動してみました。停止処理が実行されSTOPPEDと表示になりました。以上のことからヘッドノードが停止中で停止処理を実行できない場合は ParallelCluster Manager 側でリトライする仕組みを持っているものと思われます。実装まで追っていないため正確な仕組みを把握できていないですが、上記の挙動だったということだけ記しておきます。

おわりに

ParallelCluster 3.2 から追加になったアップデートポリシーで一部の設定項目はコンピュートフリートの停止が必須ではなくなりました。どの設定項目が対応しているのかは把握してはいないのですけども機会があれば別途紹介したいと思います。

Update policy: The compute fleet must be stopped or QueueUpdateStrategy must be set for this setting to be changed for an update.

Using pcluster update-cluster - AWS ParallelCluster

少し調べてみるとデフォルト設定QueueUpdateStrategyの設定値はCOMPUTE_FLEET_STOPでしたので、DRAINに変更するところからはじめないといけないようです。

Scheduling section - AWS ParallelCluster

参考