각각 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
, 써서 나쁠건 없습니다. 그래도 문제가 해결되지 않으면 다양한 작업을 사용해 볼 수 있습니다.