【问题标题】:How to use all allocated nodes with python on a HPC cluster如何在 HPC 集群上将所有已分配的节点与 python 一起使用
【发布时间】:2016-12-01 09:58:23
【问题描述】:

我有一个安装了 SLURM 的 HPC 集群。我可以为自己正确分配节点和核心。我希望能够使用所有分配的内核,而不管它们位于哪个节点。正如我在这个线程Using the multiprocessing module for cluster computing 中看到的那样,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 倍。

谢谢

【问题讨论】:

  • 节点之间的通信通常是 mpi,但我不知道有一个库像多处理那样将它包装在 api 中

标签: python python-3.x subprocess multiprocessing hpc


【解决方案1】:

经过很多麻烦scoop 是解决我问题的库。

【讨论】:

  • 您好,我正在研究基于 PBS 的 HPC 集群,并使用勺子,您能告诉我命令中的 hostfile 是什么意思吗:python -m scoop --hostfile hosts -vv -n 6 your_program.py [您的参数] 以及该主机文件中应如何显示的内容
猜你喜欢
  • 2016-04-12
  • 1970-01-01
  • 2016-09-10
  • 2019-12-23
  • 1970-01-01
  • 2015-01-07
  • 2023-03-18
  • 1970-01-01
  • 2018-08-29
相关资源
最近更新 更多