Slurmスケジューラを使用して2つ以上のノードでGNU Parallelを実行する

Slurmスケジューラを使用して2つ以上のノードでGNU Parallelを実行する

Slurm Workload Managerを使用して、HPCでGNU Parallelを使用してスタンドアロンプ​​ロセスを展開しようとしています。簡単に言えば、これはデータ分析のための設定です。

スクリプト#1: myCommands

./myscript --input infile.txt --setting 1 --output out1
./myscript --input infile.txt --setting 2 --output out2
./myscript --input infile.txt --setting 3 --output out3
./myscript --input infile.txt --setting 4 --output out4

スクリプト#2:run.sh

#SBATCH --time=00:02:00
#SBATCH --nodes=2
#SBATCH --cpus-per-task=2

cat myCommands | parallel -j 4

これは機能しますが、1つのノードのみを使用します。このノードの2つのコアは4つのスレッドに分割され、並列要求に応じて4つの作業用のスペースを確保します。これは望ましくありません。

nodefile私の検索によると、これを行うにはaとaが必要ですが、オンラインでシステムをsshloginfile使用する例はありません。SlurmPBS

スクリプトで(1)2つのノードを使用し、(2)コアをスレッドに分割しないようにするにはどうすればよいですか?

ベストアンサー1

srun次のラウンドロビン方式でこれを行うことができます。

jobs=({1..4})
nodes=($(scontrol show hostname $SLURM_NODELIST))
for ((n = 0; n < ${#jobs[@]}; n++)); do
  index=$(expr $n % ${#nodes[@]})
  srun --nodes=1 --ntasks=1 --nodelist=${nodes[$index]} \
       --exclusive ./myscript --input infile.txt \
       --setting $n --output out$n &
done
wait

--cpus-per-task=2与えられると思いますsrun。ご質問がございましたらお知らせください。今朝は並列処理作業をしていましたが、この問題を直接解決する方法がわかりません。また、scancelジョブにGNU並列ジョブが含まれている場合srun

おすすめ記事