Amazon Web Services ブログ

AWS ParallelCluster に於けるログインノードの紹介

Slurm ベースの HPC クラスターを利用している場合、ログインノードを使用してクラスターとやり取りを行なっている可能性が高いでしょう。ログインノードは、膨大な計算リソースを備えたクラスターにアクセスするための入口です。ファイルの参照、ジョブの投入と状態確認、コードのコンパイルなどにログインノードを利用した経験がおありかもしれません。

ヘッドノードを使用してこれらの事を全て行なうことが出来ますが、クラスターがある企業内や研究室の複数のユーザ間で共有されている場合、ヘッドノード上でコードをコンパイルしている人は、ジョブの送信を試みている他のユーザや自分の作業を行なっている人の邪魔になる可能性があります。 一部の AWS ParallelCluster の利用者は、ユーザ向けに手動でログインノードを作成する事でこの制限に対処してきましたが、これには多くの非公開の手順が含まれており、管理者が ParallelCluster の内部構造を知っている事を前提としていました。

AWS ParallelCluster 3.7 では、クラスターにログインノードを追加する事が出来る様になりました。これはすぐに設定する事ができます。この記事では、クラスターへのログインノードの設定例と、調整する為の幾つかの重要なチューニングオプションを紹介します。

AWS ParallelCluster のログインノードのはじめかた

ログインノードは、コンピュートノード同じ様に単一の目的を持つ「ノードのプール」として指定します。クラスター用に構成したいログインノードのインスタンス数だけ、1 つのログインノードプールを指定出来ます。

この機能を試してみたい場合や、クラスターの設計を行なう事無く動作検証したい場合は、HPC Recipes for AWS からワンクリックで起動できるスタックを使用出来ます (このチャンネルの最近の投稿で説明した非常に便利なリソースです)。

または以下に示す手順に従って、既存の構成ファイルを拡張し、新しいクラスターでのログインノードの有効化や、既存のクラスターの更新を行なう事も出来ます。

ステップ1: ParallelCluster をログインノード付きで設定する

まず、この新機能が追加された ParallelCluster 3.7.0 (もしくはそれ以降のバージョン) を使用していることを確認して下さい。次に、ログインノードを備えた新しいクラスターを作成するか、既存のクラスターを更新します。

ログインノードの有効化は、ParallelCluster の設定を記述する YAML 構成ファイルでそれらを構成する事から始まります。 pcluster describe コマンドを使用して、実行中のクラスターのYAML構成を取得する事が出来ます (ドキュメントに例があります)。

SlurmQueues の一部として ComputeResources を定義した時、インスタンスタイプ、セキュリティグループ、その他幾つかの詳細設定をしたと思います。

ログインノードの場合も同様に、これらのパラメータを LoginNodes という新しいセクションで定義します。ログインノード固有の設定も幾つかあります。例えば、Count はノード数を指定するもので、GraceTimePeriod は ParallelCluster がノードを停止しようとしている時に、そのノードにログインしているユーザへのカウントダウンタイマを設定出来ます。使用可能なオプションの一覧は LoginNodesドキュメントを参照して下さい。

以下のスニペット (設定ファイルの末尾に追加できます) は、CFDCluster というプールに属する 3 つのログインノードからなるクラスターの設定方法を示しています。このログインノードは、クラスターへの入口として機能し、ユーザがログインして流体力学のジョブを実行出来る様にします。

LoginNodes:
   Pools:
    - Name: CFDCluster
      Count: 3  # Specify the number of login nodes you need
      InstanceType: t2.micro  # Choose an appropriate instance type
      Ssh:
         KeyName: CFSClusterKey # The key pair setup in your AWS account
      Networking: 
        SubnetId: 
          - subnet-XXXXXXXXX  # Specify the subnet for your login nodes
        SecurityGroups:
          - sg-XXXXXXXXX  # security groups your EC2 Login nodes will be within

ユーザの要件に応じて、インスタンスタイプ、サブネット、セキュリティグループを含む設定をカスタマイズ出来ます。IAM のロールとポリシー、追加のセキュリティグループ等を指定出来る追加の設定もあります。ユーザがログインした時に実行可能な事をより詳細に定義したい場合は、カスタム AMI を定義する事も出来ます (例えば、コンパイラやライセンスのあるデバッガへのアクセスを提供する等)。これらの詳細は全て ParallelCluster のドキュメントの LoginNodes プロパティで確認出来ます。

ステップ2: クラスターの更新

ParallelCluster 設定ファイルの編集が完了したら、クラスターの更新または新規作成の準備が完了です。

ログインノードを使用して新規クラスターをセットアップする場合は、設定を含む設定ファイルと共に次のコマンドを使用して下さい:

pcluster create-cluster —cluster-configuration your_config_file_name —cluster-name your_cluster_name

もし既存のクラスターを更新するならば次のコマンドです。

pcluster update-cluster --cluster-configuration your_config_file_name --cluster-name your_cluster_name

もちろん、your_config_file_name を設定ファイルの名前に、your_cluster_name をクラスターの名前に置き換えて下さい。

ステップ3: ログインノードへのアクセス

クラスターの準備が出来たら、適切なアクセス権限を持つユーザは SSH を使ってログインノードにアクセス出来ます。 しかしまず、接続したいノードのアドレスを見つける必要があります。

ログインノードは、ログインノードのプール専用に設定されたネットワークロードバランサ (Elastic Load Balancer の機能の 1 つ) への単一の接続用アドレスを持った状態でプロビジョニングされています。 正確なアドレスは、LoginNodes プールの構成で指定したサブネットのタイプによって異なります。全ての接続リクエストは、ネットワークロードバランサによってラウンドロビンルーティングを使用して管理されます。

ログインノードにアクセスするためにプロビジョニングされた単一の接続用アドレスを取得するには、pcluster describe-cluster コマンドを使用します。

pcluster describe-cluster --cluster-name your_cluster_name

このコマンドは、ログインノードのステータスについてもより詳細な情報を提供します。以下は、ログインノードについて返される出力の例です:

"loginNodes": 
{ "status": "active", 
  "address": "8af2145440569xyz.us-east-1.amazonaws.com", 
  "scheme": "internet-facing|internal", 
  "healthyNodes": 3, 
  "unhealthyNodes": 0 },

後はそのアドレスに SSH 接続するだけの簡単な作業です。

ssh username@8af2145440569xyz.us-east-1.amazonaws.com

)

ユーザはジョブを送信したり、管理したりする事が出来、クラスターが使用する共有ストレージにもアクセス出来るので、ファイルを管理し、ジョブの出力を確認する事も出来ます。

describe-cluster の出力には、ログインノードのステータスと健全性に関する情報も含まれていた事に気づくかもしれません。pcluster describe-cluster-instances コマンドを使用して、ノードタイプを LoginNodes と指定する事で、プール内の個々のログインノードの状態、IP アドレス、起動時間等、より詳細な情報を取得出来ます。

pcluster describe-cluster-instances --node-type LoginNode --cluster-name your_cluster_name

より詳細はドキュメントを御覧下さい。

ログインノード全体の管理

一度設定されると、ログインノードはプールから削除されるまで実行され続けます。

ログインノードの追加と削除

ログインノードをプールに追加したり削除するのは簡単です。 ParallelCluster の YAML ファイルの LoginNodes 設定の Count パラメータを希望する数に設定します。その後、前と同じように pcluster update-cluster コマンドを使って実行中のクラスター設定を更新して下さい。

pcluster update-cluster --cluster-configuration your_config_file_name --cluster-name your_cluster_name

ログイン ノードを全て削除するには、Count を 0 に設定してクラスターを更新するだけです。

ログインノードを停止した時の警告文の設定

ログインノードをプールから Count パラメータを使用して削除すると、ParallelCluster はそれらを稼働させている Amazon EC2 インスタンスを終了させます。ノードの終了処理中、ログインしているユーザは SSH ウィンドウに終了予告の通知を受け取ります。メッセージには新しい接続を許可しない猶予期間が指定されますが、クラスターのデフォルトユーザからの接続は除外されます。このメッセージは、ヘッドノードやログインノードから /opt/parallelcluster/shared_login_nodes/loginmgtd_config.json ファイルを編集する事で、クラスター管理者がカスタマイズ出来ます。 デフォルトでは以下の様になっています:

{
  "termination_script_path": "/opt/parallelcluster/shared_login_nodes/loginmgtd_on_termination.sh",
  "termination_message": "The system will be terminated within 10 minutes.",
  "gracetime_period": "10"
}

まとめ

AWS ParallelCluster 3.7 では、ログインノードが導入されました。これは、HPC クラスターに対するユーザのアクセス管理やユーザの使用感をより注意深く定義する為の強力で柔軟な方法です。

対話的なユーザセッションを専用のログインノードのプールに分散することで、クラスターのパフォーマンスを改善し、エンドユーザが利用可能なツールを拡張し、全員のデータアクセスをストリームライン化出来ます。注意深い設定と管理により、ログインノードはクラウドベースの HPC インフラストラクチャの不可欠な部分となり、組織の効率的かつスケーラブルなコンピューティングを可能にします。

すぐに開始したい場合は、HPC Recipes for AWS からワンクリックで立ち上げ可能なスタックを使用して、完全なテスト環境を迅速に立ち上げる事が出来ます。これは後でカスタマイズ (又は削除) する事が出来ます。信頼性の高い HPC デプロイメントを迅速に実現し、様々なワークロードを実行する準備が出来ている HPC Recipes for AWS によるものです。どの様な環境から設定開始するかは関係ありません。

この記事は 2023 年 10 月 23 日に投稿された「Introducing Login nodes in AWS ParallelCluster」をソリューションアーキテクトの小野が翻訳したものです。