クラスター スケジューラの概念について説明する

完了

このユニットを完了すると、ジョブ スケジューラ、リソース マネージャー、ハイ パフォーマンス コンピューティング、ハイ スループット コンピューティングの基本的な機能について説明できるようになるはずです。

ジョブ スケジューラ

クラスター コンピューティング ジョブ スケジューラは、(CPU、メモリ、ディスクなどの) コンピューティング リソースを管理し、それらをクラスターに送信されたジョブに割り当てるソフトウェア コンポーネントです。 ジョブ スケジューラでは、リソースの可用性、ジョブの優先度、その他の要因に基づいて、特定のジョブを実行するクラスター内の最も適切なノードが決定されます。 ジョブ スケジューラにより、並列して実行される複数のジョブが相互に干渉しないことが保証されます。 ジョブ スケジューラには、保留中のジョブを保持するキューと、それらのスケジュールを設定するためのポリシーが含まれます。

ジョブ スケジューラの主な目標は次のとおりです。

  • ジョブの送信からジョブの完了までの時間を最小化する。
  • CPU 使用率を最適化します。
  • ジョブのスループットを最大化する。

ユーザーは、非対話型バッチ ジョブをスケジューラに送信します。 スケジューラでは、バッチ ジョブが格納され、リソース要件と優先順位が評価され、ジョブが適切なコンピューティング ノードに分散されます。

スケジューラを介して送信されたジョブ スクリプトによって、ジョブがジョブ キューに追加されます。 スケジューラは、ジョブで必要な利用可能なリソースに応じて、ジョブがキューから出るタイミングと、どのバックエンド ノード上でジョブが実行されるかを決定します。

次に実行するジョブを決定するためにスケジューラで使用できる基本戦略がいくつかあります。

  • 先着順:ジョブは、最初にキューに入った順序とまったく同じ順序で実行されます。 この利点はすべてのジョブが確実に実行されることですが、一部のジョブは実際の実行時間に比べて不適切に長い時間待機することになる場合もあります。

  • 最短ジョブ優先:スケジューラは、ジョブ スクリプト内で宣言された実行時間に基づいて、ジョブの実行時間を見積もります。 ジョブは実行時間の昇順にランク付けされます。 短いジョブは短い待機時間の後に開始されますが、実行時間の長いジョブ (または少なくともそのように宣言されたジョブ) は実際には開始されない場合もあります。

  • バックフィル:スケジューラは、実行時間の長いジョブの実行を妨げることなく、先着順の原則を維持します。 スケジューラは、キュー内の最初のジョブを実行できる場合にのみジョブを実行します。 それ以外の場合、スケジューラはキューの残りを確認して、最初のジョブのキュー内での待機時間を延長せずに別のジョブを実行できるかどうかをチェックします。 そのようなジョブが見つかると、スケジューラはそのジョブを実行します。 小さなジョブでは、通常、短いキュー時間が発生します。

Resource Manager

クラスターコンピューティング リソース マネージャーは、コンピューティング クラスター内のリソースの割り当てを行います。 リソース マネージャーは、クラスターで実行されているジョブに、メモリ、CPU、ストレージ、およびネットワーク帯域幅を割り当てる役割を担います。 このコンポーネントは、クラスター内のリソースの使用状況を監視し、アイドル状態または使用率の低いリソースを検出し、それらを必要とする他のジョブまたはタスクに再割り当てします。

Slurm の概要

Slurm は、Linux クラスターでワークロードを実行するためのオープンソースのジョブ スケジューラおよびリソース マネージャーです。 Slurm は、Linux クラスター環境でリソースを管理し、ジョブをスケジュールするための拡張可能なフレームワークを提供します。 このフレームワークでは、並列ジョブ、バッチ ジョブ、対話型ジョブなど、広範な種類のジョブがサポートされています。 Slurm を使用すると、ユーザーは、コマンドライン インターフェイス、Web ベースのインターフェイス、API など、さまざまなインターフェイスを介してジョブを送信できます。 Slurm は、最も強力なスーパーコンピューターやコンピューティング クラスターの多くで使用されている一般的なソリューションであり、Microsoft Azure でハイ パフォーマンス コンピューティング (HPC) を使用する際のオプションとして利用できます。

Slurm を使用すると、CPU、GPU、メモリなどのリソース条件に基づいて適切なコンピューティング リソースを照合できます。

Slurm ジョブ スケジューラには、次の重要な機能があります。

  • HPC クラスター内のコンピューティング ノードへのアクセスをユーザーに割り当てて、ユーザーのタスクを実行できるようにする
  • 割り当てられた一連のノード上で作業の開始、実行、監視を行うためのフレームワークを提供する
  • 保留中のジョブのキューを管理することで、リソースの競合を仲裁する

Slurm ジョブ

Slurm を使用して Linux HPC クラスターでジョブを実行する際には、大まかに以下のステップが発生します。

  1. ジョブの送信:最初のステップは、ユーザーがリソース要件とジョブに必要な一連のコマンドを含むジョブ スクリプトを作成することで、ジョブを Slurm スケジューラに送信することです。
  2. ジョブの割り当て:次のステージでは、Slurm スケジューラがジョブのリソース要件 (必要なノードや CPU の数、メモリ量など) と、パーティションや制限時間などの他の制約を調査します。 スケジューラでは、これらの要件に基づき、現在のクラスターの使用状況や保留中の他のジョブを考慮に入れて、使用可能なリソースのうちジョブに割り当てるための最適なリソースが決定されます。
  3. ジョブのキューイング:スケジューラは、要求されたリソースが使用できるかどうかを確認します。 リソースがすぐに使用できる場合、ジョブが実行されます。 要求されたリソースがすぐに使用できない場合、ジョブはキューに入れられます。 スケジューラでは、キューに登録されているジョブとその優先度を継続的に評価して、リソースが使用可能になった時点でそれらを割り当てます。
  4. ジョブの実行:必要なリソースがジョブに割り当てられると、Slurm ジョブが、割り当てられたノード上で実行を開始します。 スクリプトで指定されたタスクがノードで実行されます。
  5. ジョブの完了:最後のステップはジョブの完了です。ここでは、コンピューティング リソースがクラスターに解放され、スケジューラがジョブの状態を完了に更新します。 ジョブ出力と、ジョブの実行中に生成された可能性のあるエラー メッセージはすべて、指定された出力ファイルに保存されます。
  6. ジョブ アカウンティングとレポート:Slurm は、リソースの使用状況や実行時間などの完了したジョブに関するアカウンティング データを生成します。

Slurm コマンド

Slurm を通して管理されるコンピューティング クラスターでアクションを実行するには、コマンドライン ユーティリティのセットを使用します。 一般的な Slurm ユーザー コマンドを以下に示します。

コマンド 機能
sacct このコマンドはアクティブまたは完了したジョブに関して、ジョブおよびジョブ ステップのアカウンティング情報をレポートします。
salloc このコマンドを使用して、ジョブに対してリソースをリアルタイムで割り当てます。 並列タスクを開始する方法として、シェルを生成し srun コマンドを実行することを可能にします。
sattach このコマンドは標準入力、出力、エラー信号の機能を、現在実行中のジョブまたはジョブ ステップにアタッチします。
sbatch このコマンドを使用して、ジョブ スクリプトを後で実行するために送信します。 通常、これらのスクリプトには、並列タスクを開始するための 1 つ以上の srun コマンドが含まれます。
scancel このコマンドを使用して、必要なノード上のファイルを転送します。
scontrol これは Slurm の状態を表示して変更することを可能にする Slurm 管理ツールです。 ほとんどの scontrol コマンドには、ルート特権が必要です。
sinfo このコマンドは Slurm が管理するパーティションとノードに関する情報を表示します。
sprio このコマンドを使用してジョブの優先度に影響を与えるコンポーネントに関する情報を表示します。
squeue このコマンドを使用してジョブまたはジョブ ステップの状態を表示します。
srun このコマンドを使用して、実行のためにジョブを送信するか、ジョブ ステップをリアルタイムでトリガーします。 srun を使用することで、最小および最大ノード数、プロセッサ数、ノード特性などのリソース要件を指定できます。
sstat このコマンドを使用して、ジョブまたはジョブ ステップを実行することで使用されるリソースに関する情報を表示します。
strigger このコマンドを使用して、ノードが失敗した場合やジョブが制限時間に近づいた場合に何を実行するべきかなどのイベント トリガーを構成または表示します。
sview このコマンドを使用して、Slurm が管理するジョブ、パーティション、ノードに関する状態情報を表示します。

Slurm コマンドの詳細については、「Slurm クイック スタート ユーザー ガイド」で確認できます。