如何在Linux集群中使用Rmpi来增加DEoptim可用的核心?

时间:2015-07-16 10:45:09

标签: linux r parallel-processing

我使用R开发的代码,使用DEoptim(一种旨在最小化目标函数的函数)校准具有8个参数的水文模型。 DEoptim代码使用'parallel'包来检测可用的内核数量,使用'DetectCores()'。在我的PC上,我有4个核心,每个核心有2个线程,因此它可以检测到8个核心,然后将水文模型发送到具有不同参数值的核心,并将结果返回到中心。它完成了数百次或数千次并迭代参数以尝试找到最佳集合。因此,可用的内核越多,它的工作速度就越快。

我在大学,可以访问Linux计算群集。它们的服务器最多有12个核心(即不是线程),如果我使用它,它的工作速度比我的PC快两到三倍。大。但是,理想情况下,我会将代码分布在其他服务器上,这样我就可以访问更多内核,并将所有信息发送回主服务器。

因此,我的问题是如何在我的代码中包含Rmpi以有效地增加可用内核。你可能会说,我对使用集群很新。

非常感谢,Antony

1 个答案:

答案 0 :(得分:1)

如果要在Linux群集的多个节点上执行DEoptim,我相信您需要在foreach参数中指定parallelType=2来使用control。您可以将doMPI并行后端或doParallel后端与MPI群集对象一起使用。例如:

library(doParallel)
library(Rmpi)
cl <- makeCluster(mpi.universe.size()-1, type='MPI')
registerDoParallel(cl)

# and eventually...
DEoptim(fn=Genrose, lower=rep(-25, n), upper=rep(25, n),
  control=list(NP=10*n, itermax=maxIt, parallelType=2))

除了其他软件包之外,您还需要安装snow软件包。另外,请确保使用-np 1选项使用mpirun执行脚本。如果你不使用mpirun,工作人员将全部在本地机器上生成。