0

私はSLURMが初めてです。私の問題は、ジョブが SLURM によって管理されるクラスターで実行する必要があるマルチステージ ジョブがあることです。具体的には、次のジョブをスケジュールしたいと考えています。

  1. N 個のノードを取得し、
  2. それらすべてにソフトウェアをインストールします
  3. (すべてのノードでインストールが正常に終了すると) ノードにデータベース インスタンスが作成されます。
  4. データベースをロードします
  5. (ロードが正常に完了すると)ベンチマークの目的で、一連のクエリを実行します
  6. データベースを削除し、ノードを返します

各ステップは、個別の bash スクリプトを使用して実行できます。スクリプトの実行とステージ間の遷移は、マスター ノードによって調整されます。

私の問題は、SLURM を使用してノードを割り当て、各ノードで単一のコマンドまたはスクリプト (各ノードでスタンドアロン ジョブとして実行される) を呼び出す方法を知っていることです。しかし、各ノードでコマンドが実行される (または呼び出されたスクリプトが終了する) とすぐに、ノードは空きリソースのプールに戻り、ジョブのために割り当てられたノード キューを残します。ただし、上記の使用例にはいくつかのステージ/スクリプトが含まれます。そしてそれらの間の調整が必要です。

SLURM を使用して、このようなユース ケースの一連のスクリプトを設計/実行する正しい方法は何だろうと思っています。提案や例は非常に役に立ち、高く評価されます。

4

1 に答える 1

2

送信するために、すべてのスクリプトを 1 つのスクリプトにカプセル化する必要があります。

#!/bin/bash
#SBATCH --nodes=4 --exclusive

# Setting Bash to exit whenever a command exits with a non-zero status.
set -e 
set -o pipefail

echo "Installing software on each of $SLURM_NODELIST"
srun ./install.sh

echo "Creating database instance"
./createDBInstance.sh $SLURM_NODELIST

echo "Loading DB"
./loadDB.sh params

echo Benchmarking
./benchmarks.sh params

echo Done.

空白を埋める必要があります...スクリプトが、エラー時にゼロ以外のステータスで終了するという標準に従っていることを確認してください。

于 2015-03-24T09:23:22.837 に答える