SLURM:ジョブスクリプトから複数のOpenMPパラレルコードを送信する方法

SLURM:ジョブスクリプトから複数のOpenMPパラレルコードを送信する方法

それぞれ2つのプロセッサを使用する4つのPythonコードを実行したいと思います。 (並列化はMKL内で行われます。)

#!/bin/bash
#SBATCH -N 1
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=2

export OMP_NUM_THREADS=2

srun -n 2 python doSVD 1 &
srun -n 2 python doSVD 2 &
srun -n 2 python doSVD 3 &
srun -n 2 python doSVD 4 &

wait

これを試みると、2つのコアを使用する単一のコードではなく、各コードの2つのコピーが実行されます。 4つのコード(それぞれ2つのプロセッサを使用)を生成する正しい方法は何ですか?

以下はうまくいきます。ただし、各コードを順番に実行します。

#!/bin/bash
#SBATCH -N 1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=2

export OMP_NUM_THREADS=2

srun python doSVD 1 
srun python doSVD 2 
srun python doSVD 3 
srun python doSVD 4 

wait

ベストアンサー1

この回答は少し遅れていましたが、まだ他の人に役立つ可能性があります。

ここで問題は、 --ntasks-per-node=4 を使用して4つのタスクとPythonプロセスごとに2つのタスク(srun -n 2)を要求することです。代わりに、各Pythonプロセスが2つのスレッドを実行する1つのタスクになることを望みます。

以下を試してください。

#!/bin/bash
#SBATCH -N 1
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=2

export OMP_NUM_THREADS=2

srun -n 1 -c 2 python doSVD 1 &
srun -n 1 -c 2 python doSVD 2 &
srun -n 1 -c 2 python doSVD 3 &
srun -n 1 -c 2 python doSVD 4 &

wait

これが基本だと思いますが-n 1、書いて悪いことはありません。それでも問題が解決しない場合は、さまざまな操作を試すことができます。

おすすめ記事