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

时间:2019-04-09 21:05:47

标签: python subprocess cluster-computing slurm

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

  1. 初始化数据

  2. 调用外部软件以计算数据结果(使用子过程),读回外部软件的输出

  3. 处理输出,为返回第1步做准备。

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

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

我尝试使用dask-jobqueue,但这依赖于为每个工作人员创建一个批处理文件,这意味着我将不得不进行10批批处理文件调用,并等待它们全部赶上代码以充分利用它们。

我想知道是否有人提出建议,因为这似乎应该很容易。

编辑:我认为这比仅使用多处理更为复杂。 This question掌握了我要完成的工作,我想知道对于此类问题理想的解决方案是什么

1 个答案:

答案 0 :(得分:0)

解决此问题的最佳方法似乎在很大程度上取决于正在使用的群集大小,环境等的容量。对我而言,最好的情况是使用MPI4py,它将隔离我的子流程调用,并在我的X个节点中使用它们(步骤2),并使我的头节点运行其余代码(步骤1&3)。这样一来,我的口语保留就可以保持不变,而不必每次循环都请求节点,或者在程序运行期间请求节点(例如dask-jobqueue)。