それぞれ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
、書いて悪いことはありません。それでも問題が解決しない場合は、さまざまな操作を試すことができます。