我有以下代码

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吗?

最佳答案

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

关于python - Python多重处理在本地运行的速度比在群集上运行的速度快(slurm),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33817691/

10-16 20:45