我想使用多进程来运行一个简单的任务(我认为这与在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])
但是我很困惑如何使用 slurm 提交作业。我一直在寻找答案,但没有找到一个好的解决方案。 目前,在不使用多进程的情况下,我正在使用类似于这样的 slurm 作业提交文件:(命名为 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
然后,在命令行窗口中输入 sbatch test1.sh。
如果我想使用多进程,我应该如何修改我的 sh 文件?我已经尝试过自己修改,但似乎只是将我的 -n 改为 16 和 Pool(16),这样会使我的作业重复 16 次。
或者,如果多进程不适用,有没有一种方法可以最大化我的性能(我听说过多线程,但不知道它的确切工作原理)。
如何有效地使用内存,以免崩溃?(我的 x 矩阵非常大)
谢谢!
对于 GPU,是否可以做同样的事情?我的当前提交脚本不使用多进程:
#!/bin/bash
#SBATCH -n 1
#SBATCH -p gpu
#SBATCH --gres=gpu:1
非常感谢!