gpt4 book ai didi

r - 在 super 计算机上并行化,然后合并并行结果 (R)

转载 作者:行者123 更新时间:2023-11-29 09:02:20 24 4
gpt4 key购买 nike

我可以访问一个强大的大集群。我是一个半正经的 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。不幸的是,我找到的文档并不是特别容易理解。

提前致谢!

最佳答案

您可以将 plyrdoMC 包(即 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

这会将您置于队列中并为您分配处理器数量(如果可用),您的作业将开始运行(取决于资源)。你可以pause, restart, suspend 你的工作..等等.. qsub 类似于这个概念。学习曲线可能有点陡峭,但这是值得的。

关于r - 在 super 计算机上并行化,然后合并并行结果 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com