R脚本并行运行

来源:互联网 发布:火箭拳科技 知乎 编辑:程序博客网 时间:2024/05/18 02:20

执行mpirun时,指定hosts可以用选项-H或-host(逗号分割的hosts列表),或者用选项-hostfile指定一个host file。可以使用-n或-np选项指定在这些节点(即hosts)上运行的脚本的副本数量。

若-n或-np为1,指定只运行脚本的一个副本,在运行startMPIcluster时,doMPI会使用Rmpi的mpi.comm.spawn函数为你启动多个workers。

若-n或-np大于1,则doMPI不会spawn workers,而是假定你已使用mpirun启动了所需要的全部workers。这意味着,你的脚本将有多个实例开始运行。或者说,workers将要执行你的脚本。在这种情况下,你的脚本应该在开始时就调用startMPIcluster函数。当一个worker调用startMPIcluster时,该函数会发出通知,并执行workerLoop函数,以便执行由Master(即"rank0"过程,如上例中的localhost本机)提交的任务。


mpirun -H localhost,n2,n3 R --slave -f myscript.R

这一mpirun指令将在localhost, n2和n3上运行R解释器,R将在当前目录下运行名为myscript.R的脚本。myscript.R的副本(copy)在master("rank 0"过程,即localhost)上运行,并从startMPIcluster中返回。而另外2个workers(即主机n2和n3)因为运行workLoop函数而不返回。因此,应在脚本的开始就执行starMPIcluster,否则,workers将会执行本应由master执行的代码,从而导致问题。

mpirun -H n1,n2,n3 -n 1 R --slave -f myscript.R

在节点n1上启动master,将n2和n3也列入hosts,则MPI "universe"中将包含3个节点。因为指定了-n为1,mpirun指令只启动一个R解释器运行。startMPIcluster检测到mpi.universe.size()为3,因此它将spawn两个workers,他们分别在节点n2和n3上运行。

Open MPI建议使用non-spawn模式,因为其性能更好。在运行一个batch queueing系统(如slurm时),很可能也需要使用non-spawn模式。但是,如果脚本需要在startMPIcluster之前进行其他操作(可能会在worker processes上fail),或者需要创建多个cluster时,只能通过指定-n为1使用spawn(dynamic)模式。

mpirun -H localhost,n2,n3 -n 6 R --slave -f myscript.R

使用non-spawn(static)模式在hosts上启动多处理器。在每个host上启动2个处理器(共6个处理器)。master和一个worker在localhost上运行,而n2和n3上分别运行2个workers。你可以设置-n为1,在脚本中使用startMPIcluster时设置count参数为5,指定spawn五个workers。

通常不提倡使用starMPIcluster函数的count参数,除非要做些特别的事,如创建多个clusters。若要在non-spawn模式下指定count参数的值,应当设为mpi.comm.size()-1,否则startMPIcluster将产生错误。

原创粉丝点击