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
使用する例はありません。Slurm
PBS
スクリプトで(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
。