利用多个多核Linux服务器在R中进行计算

时间:2018-03-13 07:14:59

标签: r cluster-computing sparkr dompi

我有四个32核Linux服务器(CentOS 7),我想用它来进行R中的并行计算

到目前为止,我一直只使用doMC软件包和registerDoMC(cores = 32)来利用单个服务器的多核功能。我想将其扩展到所有四个服务器(即128 = 32x4,如果可能的话)

我已经在线搜索了一些,看起来有很多选择:PSOCK,MPI,SNOW,SparkR等。尽管如此,我还是无法在线提出任何建议。

我知道有一些先决条件,这是我到目前为止所做的: 1)所有服务器都是“连接”的,即。可以通过无密码登录相互SSH 2)NFS安装,所以所有服务器都可以访问(读,写和执行访问) 3)所有服务器都运行在相同的R二进制文件上(在所有服务器都可以执行的共享位置上的anaconda构建下) 4)安装了openmpi,Rmpi,snow,doSNOW,Spark,SparkR(虽然我不知道如何使用它)

另一个人可以建议下一步我能做些什么吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

查看future包(我是作者)。它提供了一个生态系统,可以在统一的API中包含各种并行后端。对于您已经获得SSH“批量”访问权限的四台多台32核机器的特殊情况,您可以将您的4 * 32工作人员指定为:

library("future")

## Set up 4 * 32 workers on four machines
machines <- c("node1", "node2", "node3", "node4")
workers <- rep(machines, each = 32L)
plan(cluster, workers = workers)

如果您的计算机没有主机名,则可以改为指定其IP号。

接下来,如果您想使用foreach,请继续:

library("doFuture")
registerDoFuture()

y <- foreach(i = 1:100) %dopar% {
  ...
  value
}

如果您更喜欢lapply,可以使用future.apply作为:

library("future.apply")

y <- future_lapply(1:100, FUN = function(i) {
  ...
  value
})

技术细节:
以上设置了'并行'包定义的PSOCK群集。这些基本上与SNOW集群相同,并且我认为同样的作者也会考虑使用SNOW集群来代替“并行”提供的内容。换句话说,AFAIK再没有使用snow / doSNOW了; parallel / doParallel代替了那些日子。

我将MPI群集置于“高级使用”部分,即除非你已经设置并运行,或者除非你真的认为你需要MPI,否则我会拒绝这些。 MPI还鼓励采用不同的算法设计,以充分利用它们。 PSOCK集群带你走很长的路,只有你认为你已经筋疲力尽了,你应该看看MPI。

Spark是一个完全不同的生物。它是围绕分布式数据(在RAM中)进行分布式计算而设计的。您的分析可能需要这样,但是,我再次建议您从上面的PSOCK群集开始 - 它们会带您走很长的路。

最终的PS,如果你有一个HPC调度程序(听起来不像),只需使用plan(future.batchtools::batchtools_sge)代替。您的代码中的其他任何内容都不需要更改。

相关问题