使用slurm在单个节点上与python进行多处理



我正在尝试在集群上运行一些并行代码。集群使用slurm,我的代码是python。当我在自己的机器上运行代码时,它使用多个内核。然而,当我尝试在集群上运行代码时,速度非常慢,而且似乎没有使用多个核心。

以下是python的相关代码:

from multiprocessing import Pool
Nz_i=range(1,13)
p=Pool()
p.map(Err_Calc,Nz_i)
p.close()
p.join()

函数Err_Calc是前面定义的。我认为它的定义不相关。

我用来在集群上运行代码的SBATCH如下:

#!/bin/bash
#SBATCH -N 1
#SBATCH -p RM-shared
#SBATCH --ntasks-per-node 13
#SBATCH -t 03:10:00
module load python/intel_2.7.14
python Err_vs_Nz_Cl.py 

文件Err_vs_Nz_Cl.py包含我上面显示的代码。我希望这个SBATCH能为我提供13个核心,但代码似乎只使用了1个核心,或者可能由于其他原因速度较慢。有人知道出了什么问题吗?

这可能是错误的(我是这方面的新手(,但如果将--ntasksper-node 13参数更改为--cpus-per-task 13,会发生什么?我认为文档中说,您需要以这种方式明确指定cpu的数量,否则它将只使用一个cpu运行。

来源:https://slurm.schedmd.com/sbatch.html

因为您在没有srun -n的情况下运行(这对于具有基于进程的"线程"模型的multiprocessing来说是正确的(,所以您需要另一种方法来告诉它要使用多少CPU。这是在sbatch脚本中使用--ntasks=1--cpus-per-task=13(或者无论节点有多少核心(完成的。

谨慎使用multiprocessing。如果您没有在整个节点上运行,或者没有明确指定内核数量,它将尝试在所有可见的CPU内核上运行,无论它们是否已分配给您!

相关内容

  • 没有找到相关文章

最新更新