Parallelism

SLURM:如何在作業腳本中送出多個 OpenMP 並行程式碼

  • October 2, 2020

我想執行 4 個 python 程式碼,每個程式碼使用 2 個處理器。(並行化在 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 個核心的單個程式碼時。生成 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

這個答案有點晚了,但這仍然可以為其他人服務:

我認為這裡的問題是您要求使用 –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是預設設置,但編寫它並沒有什麼壞處。如果這仍然不起作用,我們可以嘗試使用作業數組。

引用自:https://unix.stackexchange.com/questions/602506