如何从单个分配中启动不同的MPI作业

时间:2016-01-11 14:21:16

标签: mpi slurm

假设我已经在16个节点上启动了256个核心的MPI作业。

我有一个MPI程序,但不幸的是并行一个参数。幸运的是,只有获取输出文件,我才能轻松创建自己的MPI程序,该程序可以处理该参数的并行化。

那么,我如何启动MPI作业(来自MPI作业),它使用这些核心的特定子集,即只使用特定节点?所以基本上我想在一个256核MPI作业中运行16个不同的MPI计算,所有这些都是16个核心。这些计算需要大约10分钟,有16个核心,外循环中大约有200次迭代。拥有256个核心,这是一个合理的32小时。重新提交200次或顺序运行这16次计算是不合理的。

更准确地说,这里有一些我想做的python-pseudo-code:

from ase.parallel import world, rank
from os import system, chdir
while 1:
    node = rank // 16
    subrank = rank % 16
    chdir(mydir+"Calculation_%d" % node)
    # This will not work, one needs to specify somehow that only ranks from node*16 to node*16+15 will be used
    os.system("mpirun -n 16 nwchem input.nw > nwchem.out") 
    analyse_output(mydir+"Calculation_%d/nwchem.out" % node)
    rewrite_input_files()

基本上,有16个核心和4个工作:

rank 0: start nwchem process in /calculation0/ as rank 0/4.
rank 1: start nwchem in /calculation0/ as rank 1/4.
rank 2: start nwchem in /calculation0/ as rank 2/4.
rank 3: start nwchem in /calculation0/ as rank 3/4.
rank 4: start nwchem in /calculation1/ as rank 0/4.
rank 5: start nwchem in /calculation1/ as rank 1/4.
rank 6: start nwchem in /calculation1/ as rank 2/4.
rank 7: start nwchem in /calculation1/ as rank 3/4.
rank 8: start nwchem in /calculation2/ as rank 0/4.
rank 9: start nwchem in /calculation2/ as rank 1/4.
rank 10: start nwchem in /calculation2/ as rank 2/4.
rank 11: start nwchem in /calculation2/ as rank 3/4.
rank 12: start nwchem in /calculation3/ as rank 0/4.
rank 13: start nwchem in /calculation3/ as rank 1/4.
rank 14: start nwchem in /calculation3/ as rank 2/4.
rank 15: start nwchem in /calculation3/ as rank 3/4.

Gather all the results.
Optimize all geometries (this requires knowledge of forces between the calculations).
Repeat until convergence (about 200 times).

背景:如果您有兴趣,我会在这里详细说明。但主要问题仍然是“如何通过M核心的单个MPI计算实例化N MPI计算,每个核心都有M / N核心。

NWChem没有图像平行的轻推弹性带计算器。以下是此过程的示例,其中包含不同的代码:GPAW。 https://wiki.fysik.dtu.dk/gpaw/tutorials/neb/neb.html

这里很顺利,因为使用GPAW和它的MPI接口创建子通信器非常容易。但是,我只有nwchem运行时MPI,我希望做同样的事情:创建许多计算器(一个带或几何链,它们都与'spring'链接,并优化该链。)

1 个答案:

答案 0 :(得分:0)

我想,您正在尝试在MPI中使用动态流程管理。我们可以为较小的作业生成新的进程,然后在计算之后我们可以连接生成的现有进程。

Detailed Explanation on DPM

Example program using DPM