令人尴尬的并行For循环,子进程调用

问题描述 投票:-1回答:1

我有一个像这样工作的python程序:

  1. 初始化数据
  2. 调用外部软件来计算数据结果(使用子进程),回读外部软件的输出
  3. 操纵输出,准备它回到第1步。

我想在群集环境(slurm)中并行化第2步,使用多节点环境。

我试图找到最简单的方法,因为我不认为如果在批处理文件中分配给python程序,子进程将自动使用多个节点。

我尝试使用dask-jobqueue,但是这依赖于为每个worker创建一个批处理文件,这意味着我必须进行10次批处理文件调用并等待它们全部赶上代码以便全部利用它们。

我想知道是否有人有任何建议,因为这似乎应该是一件容易的事情。

编辑:我认为这比仅使用多处理更复杂。 This question得到了我想要实现的目标,我想知道这类问题的理想包装是什么

python subprocess cluster-computing slurm
1个回答
0
投票

似乎解决此问题的最佳方法很大程度上取决于您正在使用的群集大小,环境等的容量。对我来说最好的情况是使用MPI4py,它将隔离我的子进程调用并在我的X节点数量中使用它们(步骤2),让我的头节点运行剩下的代码(步骤1和3)。这允许我的slurm预留保持不变,而不是必须在每个循环请求节点,或在程序运行期间请求节点(如dask-jobqueue)。

© www.soinside.com 2019 - 2024. All rights reserved.