加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 22:44:33 所属栏目:安全 来源:网络整理
导读:我可以访问一个强大的大型集群.我是一个不错的R程序员,但对于 shell命令(以及终端命令,除了使用ubuntu需要做的基本事情之外)都是全新的. 我想使用这个集群在R中运行一堆并行进程,然后我想将它们组合起来.具体来说,我遇到的问题类似于: my.function -functio
我可以访问一个强大的大型集群.我是一个不错的R程序员,但对于 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)

以上只是一个愚蠢的例子,但基本上我想要并行执行1000次,然后对1000个进程的所有结果做一些事情.

如何同时向群集提交1000个作业,然后合并所有结果,如代码的最后一行?

我也欢迎任何有关编写RTFM的精心编写的手册/参考资料的建议.不幸的是,我发现的文件并不是特别容易理解.

提前致谢!

解决方法

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

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

llply(1:1000,function(idx) {
    out <- my.function(.)
},.parallel = TRUE)

编辑:如果您正在谈论提交同时工作,那么你有没有LSF license?然后,您可以使用bsub根据需要提交任意数量的作业,它还可以处理负载平衡以及什么不是……!

编辑2:关于负载平衡的小注释(例如使用LSF的bsub):

你提到的是类似于我在这里写的东西=> LSF.您可以批量提交作业.例如:在LSF中使用,您可以使用bsub将作业提交到集群,如下所示:

bsub -m <nodes> -q <queue> -n <processors> -o <output.log> 
     -e <error.log> Rscript myscript.R

这将使您进入队列并为您分配您的作业将开始运行的处理器数量(如果可用)(取决于资源).你可以暂停,重启,暂停你的工作..还有更多.. qsub类似于这个概念.学习曲线可能有点陡峭,但值得.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读