Python 使用 slurm 进行多处理

Vic*_*yyy 5 python multiprocessing python-3.x slurm

我想使用多重处理来运行一个简单的任务(我认为这与在 matlab 中使用 parfor 相同,正确吗?)

例如:

from multiprocessing import Pool
def func_sq(i):
    fig=plt.plot(x[i,:])     #x is a ready-to-use large ndarray, just want
    fig.save(....)           #to plot each column on a separate figure

pool = Pool()
pool.map(func_sq,[1,2,3,4,5,6,7,8])
Run Code Online (Sandbox Code Playgroud)

但我很困惑如何使用 slurm 提交我的工作。我一直在寻找答案,但找不到好的答案。目前,虽然不使用多处理,但我正在使用 slurm 作业 sumit 文件,如下所示:(名为 test1.sh)

#!/bin/bash

#SBATCH -N 1
#SBATCH -n 1
#SBATCH -p batch
#SBATCH --exclusive

module load anaconda3
source activate py36
srun python test1.py
Run Code Online (Sandbox Code Playgroud)

然后,我在提示窗口中输入 sbatch test1.sh。

那么如果我想使用多处理,我应该如何修改我的sh文件?我自己尝试过,但似乎只需将 -n 更改为 16 和 Pool(16) 就会使我的工作重复 16 次。

或者,如果多重处理不合适,是否有办法最大化我的性能(我听说过多重威胁,但不知道它到底是如何工作的)

我该如何有效地利用我的记忆力才不会被压垮?(我的x矩阵很大)

谢谢!

对于 GPU 来说,是否可以做同样的事情?我当前没有多重处理的提交脚本是:

#!/bin/bash

#SBATCH -n 1
#SBATCH -p gpu
#SBATCH --gres=gpu:1
Run Code Online (Sandbox Code Playgroud)

多谢!

Col*_*lin 7

“-n”标志设置您的批量提交将要执行的任务数量,这就是您的脚本多次运行的原因。您要更改的是“-c”参数,它表示每个任务分配的 CPU 数量。您的脚本会生成其他进程,但它们将是父进程的子进程并共享分配给它的 CPU。只需将“#SBATCH -c 16”添加到您的脚本中即可。至于内存,每个 CPU 都会为您的作业分配默认的内存量,因此增加 CPU 数量也会增加可用内存量。如果您没有获得足够的金额,请添加“#SBATCH --mem=20000M”之类的内容来请求特定金额。