[英]How to use all allocated nodes with python on a HPC cluster
我有一个安装了SLURM的HPC群集。 我可以为自己正确分配节点和核心。 我希望能够使用所有分配的核心,而不管它们位于哪个节点。正如我在此线程中看到的那样, 使用多处理模块进行集群计算无法通过multiprocessing
实现。
我的脚本如下所示(简化版):
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
协议,但是必须执行相同的脚本N次,并且我需要使用并行进程的输出进行额外的计算。 我当然可以将输出存储在某个地方,然后重新输入,但是必须有一些更优雅的解决方案。
在提到的主题中,有一些建议,例如jug
,但是当我阅读它时,我还没有为自己找到解决方案。
也许py4mpi
对我来说可以解决方案? 该教程似乎非常混乱,我也没有找到解决我的问题的具体解决方案。 (与mpi并行运行一个函数,然后继续执行脚本)。
我尝试了subprocess
调用,但似乎与multiprocess
调用的工作方式相同,因此它们仅在一个节点上运行。 我尚未找到任何确认,因此这仅是基于我的反复试验猜测。
我该如何克服这个问题? 目前,我可以使用300多个核,但是一个节点只有32个核,因此,如果我能找到解决方案,那么我将能够以近10倍的速度运行我的项目。
谢谢
很多麻烦的后scoop
是解决我的问题库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.