在超级计算机上并行,然后合并并行结果(R)

在超级计算机上并行,然后合并并行结果(R),r,bash,statistics,cluster-computing,R,Bash,Statistics,Cluster Computing,我可以访问一个强大的集群。我是一个相当不错的程序员,但对shell命令(除了使用ubuntu需要做的基本事情外,一般来说还有终端命令)完全陌生 我想使用这个集群在R中运行一系列并行进程,然后我想将它们组合起来。具体来说,我有一个类似的问题: my.function <-function(data,otherdata,N){ mod = lm(y~x, data=data) a = predict(mod,newdata = otherdata,se.fit=TRUE)

我可以访问一个强大的集群。我是一个相当不错的程序员,但对shell命令(除了使用ubuntu需要做的基本事情外,一般来说还有终端命令)完全陌生

我想使用这个集群在R中运行一系列并行进程,然后我想将它们组合起来。具体来说,我有一个类似的问题:

my.function <-function(data,otherdata,N){
    mod = lm(y~x, data=data)
    a = predict(mod,newdata = otherdata,se.fit=TRUE)
    b = rnorm(N,a$fit,a$se.fit)
    b
    }

r1 = my.function
r2 = my.function
r3 = my.function
r4 = my.function
...
r1000 = my.function

results = list(r1,r2,r3,r4, ... r1000)

my.function您可以将
plyr
doMC
包(即
foreach
包的并行后端)组合,如下所示:

require(plyr)
require(doMC)
registerDoMC(20) # for 20 processors

llply(1:1000, function(idx) {
    out <- my.function(.)
}, .parallel = TRUE)
这会将您置于队列中,并为您分配作业将开始运行的处理器数量(如果可用)(取决于资源)。您可以
暂停
重新启动
暂停
作业。。还有更多
qsub
与此概念类似。学习曲线可能有点陡峭,但它是值得的。

做你想做的事,而且很容易做到。编译后,您需要运行:

mpirun -np [no.of.process] [executable]
您可以通过一个简单的文本文件选择运行它的位置,该文件包含主机ip字段,如:

node01   192.168.0.1
node02   192.168.0.2
node03   192.168.0.3

更多关于MPI的例子。

我们在《统计软件杂志》(Journal of Statistical Software,开放式杂志)上写了一篇调查论文。你可能会发现这是一个很有用的介绍。

检查
并行
软件包。如果你使用的是超级计算机,它很可能使用或类似的东西。如果是这种情况,您必须直接使用类似的东西(尽管新的并行库可能支持MPI)。我有关于如何设置R以便在俄亥俄州超级计算机上使用的说明,还有一个关于snow的简单介绍。@ACD如果您能提供有关您正在使用的系统类型和运行的软件的更多信息,将有助于我们回答您的问题。这很有效,谢谢!至于LSF和bsub,我不知道你们在说什么,而维基百科的链接对我来说是无法理解的,到目前为止。还是个大傻瓜!但比几天前少了一个。嗯,事实上,我对你的答案投了更高的票,因为这是一个即时的帮助。但事实证明还有更多。显然,我需要弄清楚如何使用名为“PBS”的东西和名为“qsub”的命令将我的R脚本变成“作业”。doMC并没有真正让我达到目的,而且似乎计算机管理员已经限制了我?昨天速度更快了。@ACD还可以查看我在对您的问题的评论中提供的链接。我有关于如何为运行MPI的超级计算机设置PBS文件等的说明。
node01   192.168.0.1
node02   192.168.0.2
node03   192.168.0.3