AWS ParallelCluster で構築する HPC 環境 - Slurm クラスタの自動構築とスケーリング

HPC クラスタを CloudFormation ベースで自動構築し、Slurm スケジューラでジョブを管理する。スポットインスタンスによるコスト最適化も紹介します。

ParallelCluster の概要

ParallelCluster は AWS が提供するオープンソースの HPC クラスタ管理ツールです。YAML 設定ファイルでクラスタの構成 (インスタンスタイプ、ノード数、ストレージ、ネットワーク) を定義し、pcluster create-cluster コマンドで CloudFormation スタックとして自動構築します。Slurm ジョブスケジューラが標準で構成され、既存の Slurm ジョブスクリプトをそのまま使用できます。計算流体力学 (CFD)、分子動力学、ゲノム解析、気象シミュレーション、金融リスク計算など、大規模な並列計算ワークロードに使用されています。バージョン 3 系では Multi-Queue モードにより、1 つのクラスタで複数のキューを定義でき、キューごとに異なるインスタンスタイプやストレージ構成を割り当てることが可能です。設定変更は pcluster update-cluster で既存クラスタを破壊せずに適用でき、ノード追加やストレージ変更を運用中に反映できます。

自動スケーリングとコスト最適化

ParallelCluster の自動スケーリングは Slurm のジョブキューと連動します。ジョブが投入されるとコンピュートノードが自動的に起動し、ジョブ完了後にアイドル状態が一定時間続くとノードが自動的に終了します (デフォルトのアイドルタイマーは 10 分)。ジョブがない時間帯はコンピュートノード数がゼロになり、ヘッドノードの料金のみが発生します。スポットインスタンスを使用すると HPC ワークロードのコストを大幅に削減できます。複数のインスタンスタイプを Allocation Strategy: capacity-optimized で指定すると、スポットの可用性が向上し中断率を低減できます。チェックポイント対応のアプリケーションでは、スポットの中断時にジョブを自動的に再キューイングする設定が可能です。ヘッドノードはオンデマンドインスタンスで稼働させ、コンピュートノードのみスポットにする構成が推奨されます。ScaledownIdletime パラメータでアイドルタイマーを調整し、短いジョブが頻繁に投入される環境では値を大きくしてノードの起動・終了オーバーヘッドを削減できます。

EFA と共有ストレージ

EFA (Elastic Fabric Adapter) は HPC ワークロード向けの高速ネットワークインターフェースで、ノード間通信のレイテンシを大幅に削減します。MPI (Message Passing Interface) ベースの並列計算で、ノード間のデータ交換がボトルネックになるワークロードに有効です。ParallelCluster の設定で EFA を有効化するだけで、コンピュートノードに自動的に EFA が構成されます。EFA を利用するにはプレイスメントグループ内にノードを配置する必要があり、ParallelCluster は Placement セクションの設定で自動的にクラスタープレイスメントグループを作成します。共有ストレージは FSx for Lustre、EFSEBS の中から選択できます。FSx for Lustre は大規模データセットの並列読み取りに最適で、S3 との統合により S3 上のデータを Lustre ファイルシステムに自動的にインポートし、計算結果を S3 にエクスポートできます。EFS は複数のクラスタ間でデータを共有する場合やノード数の変動が大きい環境で有効ですが、レイテンシは FSx for Lustre より高くなります。 ParallelCluster のアーキテクチャを網羅的に学ぶなら、技術書 (Amazon)を参照してください。

設計のベストプラクティスと落とし穴

ParallelCluster を本番運用する際に注意すべきポイントを整理します。ヘッドノードのサイジングでは、数百ノード規模のクラスタでは Slurm コントローラのメモリ消費が増加するため、c5.xlarge 以上を選択します。ヘッドノードが停止するとクラスタ全体が使用不能になるため、EBS スナップショットによる定期バックアップを設定してください。ネットワーク設計では、コンピュートノードをプライベートサブネットに配置し、S3 VPC エンドポイント (ゲートウェイ型) を使うと NAT ゲートウェイのデータ転送料金を回避でき、大規模データの入出力で大きなコスト差が生じます。カスタム AMI を使用する場合は、ParallelCluster が要求するパッケージ (Slurm、Munge、supervisord) を含む公式 AMI をベースにカスタマイズし、pcluster build-image コマンドで構築することで互換性の問題を回避します。OS は Amazon Linux 2、Ubuntu 20.04/22.04 から選択可能です。

AWS Batch との比較と使い分け

AWS には HPC/バッチ処理向けに ParallelCluster と AWS Batch の 2 つのサービスがあり、ワークロード特性によって最適な選択が異なります。ParallelCluster は Slurm をスケジューラとして使用するため、オンプレミスの HPC 環境で Slurm を利用していた組織がジョブスクリプトを変更せずにクラウド移行する場合に最適です。EFA による低レイテンシのノード間通信を必要とする密結合並列計算 (CFD、分子動力学など) では ParallelCluster が唯一の選択肢です。一方、AWS Batch はフルマネージドサービスでクラスタの管理が不要であり、コンテナベースのジョブ定義でワークロードをパッケージングします。独立したタスクを大量に並列実行するハイスループット計算 (ゲノムの配列アライメント、画像処理パイプライン) では AWS Batch の方がインフラ管理の負荷が低く適しています。ParallelCluster はユーザーがクラスタ構成を細かく制御でき、特定のインスタンス配置やストレージ構成を指定する必要がある研究計算用途に強みがあります。

まとめ

ParallelCluster は Slurm ベースの HPC クラスタを AWS 上に自動構築するツールです。自動スケーリングでジョブに応じたリソース管理を実現し、スポットインスタンスでコストを削減し、EFA で高速ノード間通信を提供します。オンプレミスの HPC クラスタからの移行や、バースト的な計算需要への対応に最適です。Multi-Queue モードで異なるワークロードを 1 クラスタに集約し、FSx for Lustre と S3 の連携で大規模データの入出力を効率化できます。