Python多处理在本地运行速度比在群集上运行更快(slurm)

时间:2015-11-20 01:53:35

标签: python multiprocessing slurm

我有以下代码

import multiprocessing as mp
import os

def funct(name):
    if nameisvalid:
        do_some_stuff_and_save_a_file
        return 1
    else:
        return 0

num_proc = 20 #or a call to slurm/mp for number of processors
pool = mp.Pool(processes=num_proc)
results = pool.map_async(makeminofname, [n for n in nameindex])
pool.close()
pool.join()

我已经在我的桌面上使用带有num_proc=mp.cpu_count()的6核处理器运行它,并且它运行良好且快速,但是当我尝试在我们的处理群集上的sbatch脚本中运行此脚本时,使用 -N 1 -n 20 (我们的节点每个都有24个处理器),或任意数量的处理器,它运行得非常慢,只能使用10-15个处理器。有没有办法优化多处理以使用slurm?

1 个答案:

答案 0 :(得分:1)

funct检查磁盘上的特定文件,然后加载文件,然后工作,然后保存文件。这导致我的各个进程等待输入/输出操作而不是工作。所以我在将所有初始数据传递给池之前加载了所有初始数据,并从Process添加了multiprocessing专用于保存池中进程将其输出放入Queue的文件,因此只有一个过程试图保存。