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

관련 정보