我正在使用以下代码(示例)在集群中进行并行处理。 通过键入以下命令,它可以使用节点中的所有可用核心在群集中完美运行: python test.py
from multiprocessing import Pool
import glob
from astropy.io import fits
def read(files):
data=fits.open(files)
if __name__ == '__main__':
files= glob.glob("*.fits*")
nfiles = len(files)
pool = Pool()
pool.map(read, files)
但是,当我使用提交批处理作业时 srun -N 1 python test.py 似乎仅使用1个核心,而不是该节点中的所有可用核心。 我应该更改什么以在节点中的所有内核之间分配nfile,以便每个内核都可以获取nfiles / ncores。
答案 0 :(得分:0)
那是因为您要指定-N 1
,这意味着1个节点已分配给呼叫python test.py
。另外,另一个标志-n
的默认值为1。将其更改为-N nnodes
,其中nnodes
等于要在其上运行脚本的节点数,并指定-n ncores
其中ncores
等于每个节点上的核心数。如果您的节点是异构的,那么您可能会面临设置任务多于每个节点上的核心或节点上的空闲核心的风险。
有关上述标志的更多文档,请参见here。