如何在HPC集群上通过python使用所有分配的节点

如何在HPC集群上通过python使用所有分配的节点,python,python-3.x,subprocess,multiprocessing,hpc,Python,Python 3.x,Subprocess,Multiprocessing,Hpc,我有一个安装了SLURM的HPC群集。我可以为自己正确分配节点和核心。我希望能够使用所有分配的核心,无论它们位于哪个节点。正如我在这个线程中看到的,这不能通过多处理来实现 我的脚本如下所示(过于简化的版本): 这个脚本工作得非常好,但是正如我提到的,多处理对我来说不是一个好工具,因为即使SLURM为我分配了3个节点,多处理也只能使用一个。据我所知,这是多处理的一个限制 我可以使用SLURM的srun协议,但是ust会执行相同的脚本N次,并且我需要使用并行进程的输出进行额外的计算。当然,我可以将输

我有一个安装了SLURM的HPC群集。我可以为自己正确分配节点和核心。我希望能够使用所有分配的核心,无论它们位于哪个节点。正如我在这个线程中看到的,这不能通过
多处理来实现

我的脚本如下所示(过于简化的版本):

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

我可以使用SLURM的
srun
协议,但是ust会执行相同的脚本N次,并且我需要使用并行进程的输出进行额外的计算。当然,我可以将输出存储在某个地方,然后将它们重新扩孔,但必须有更优雅的解决方案

在上面提到的帖子中,有一些建议,比如
jug
,但当我阅读时,我还没有找到一个适合自己的解决方案

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

我尝试了
子进程
调用,但它们的工作方式似乎与
多进程
调用相同,因此它们只在一个节点上运行。我还没有找到任何关于这一点的证据,所以这只是我的试错猜测

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


谢谢

在经历了很多麻烦之后,
scoop
是解决我问题的库。

在经历了很多麻烦之后,
scoop
是解决我问题的库。

节点之间的通信通常是mpi,但我不知道有哪一个库会将其封装在api中,比如多处理oneCommunication,节点间的通信通常是mpi,但我不知道有哪一个库会将其封装在api中,比如多处理oneHello,我正在基于HPC集群PBS的基础上工作,并使用一个独家新闻,你能告诉我hostfile在命令python-msoop--hostfile hosts-vv-n6 your_program.py[你的参数]中的意思是什么吗?主机文件中应该显示什么?你好,我正在基于HPC集群PBS进行工作,并使用一个独家新闻,你能告诉我hostfile在命令python-msoop--hostfile hosts-vv-n6 your_program.py[your arguments]中的意思是什么吗?在这个主机文件中应该显示什么
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
....