2016-12-01 37 views
0

我有安装了SLURM的HPC群集。我可以为自己正确分配节点和内核。我希望能够使用所有分配的内核,而不管它们在哪个节点。正如我在此线程中看到的,Using the multiprocessing module for cluster computing这不能通过multiprocessing来实现。如何在HPC群集上使用python上的所有已分配节点

我的剧本是这样的(简单化版本):

def func(input_data): 
    #lots of computing 
    return data 

parallel_pool = multiprocessing.Pool(processes=300) 
returned_data_list = [] 
for i in parallel_pool.imap_unordered(func, lots_of_input_data) 
    returned_data_list.append(i) 
# Do additional computing with the returned_data 
.... 

这个脚本工作完全正常,但正如我所说多是不是对我的好工具,因为即使SLURM分配3个节点对我来说,多处理只能使用一个。据我了解这是多处理的限制。

我可以使用SLURM的srun协议,但是ust执行相同的脚本N次,我需要使用并行进程的输出进行额外的计算。我当然可以将输出存储在某个地方,然后让它恢复原状,但必须有一些更优雅的解决方案。

在提到的线程中有像jug这样的建议,但是当我正在阅读它时,我没有找到适合自己的解决方案。

也许py4mpi可以解决我的问题吗?这个教程看起来非常混乱,我也没有找到针对我的问题的具体解决方案。 (与mpi并行运行一个函数,然后继续脚本)。

我试过subprocess调用,但是看起来像调用multiprocess一样工作,所以它们只能在一个节点上运行。我还没有找到任何确认,所以这只是从我的反复猜测。

我该如何克服这个问题?目前我可以使用300多个内核,但一个节点只有32个,所以如果我能找到解决方案,那么我将能够以近10倍的速度运行我的项目。

感谢

+0

节点之间的通信通常是mpi,但是我不知道一个库将它封装在api中,就像多处理器 –

回答

1

了不少麻烦scoop之后是解决我的问题库。

相关问题