R foreach:从单机到集群

以下(简化)脚本在unix集群的主节点(4个虚拟核心)上正常工作.

library(foreach)
library(doParallel)

nc = detectCores()
cl = makeCluster(nc)
registerDoParallel(cl)

foreach(i = 1:nrow(data_frame_1), .packages = c("package_1","package_2"), .export = c("variable_1","variable_2"))  %dopar% {     

    row_temp = data_frame_1[i,]
    function(argument_1 = row_temp, argument_2 = variable_1, argument_3 = variable_2)

}

stopCluster(cl)

我想利用集群中的16个节点(总共16 * 4个虚拟核心).

我想我需要做的就是改变makeCluster指定的并行后端.但是我应该怎么做呢?文档不是很清楚.

基于这个相当古老的(2013)http://www.r-bloggers.com/the-wonders-of-foreach/帖子,似乎我应该更改默认类型(袜子或MPI – 哪一个可以在unix上工作?)

编辑

从这个vignette由foreach的作者:

By default, doParallel uses multicore functionality on Unix-like
systems and snow functionality on Windows. Note that the multicore
functionality only runs tasks on a single computer, not a cluster of
computers. However, you can use the snow functionality to execute on
a cluster, using Unix-like operating systems, Windows, or even a
combination.

你可以使用雪功能意味着什么?我该怎么做?

并行包是多核和雪包的合并,但如果要在多个节点上运行,则必须并行使用“雪功能”(即从雪中获取的并行部分) .实际上,这意味着您需要调用makeCluster,并将“type”参数设置为“PSOCK”,“SOCK”,“MPI”或“NWS”,因为这些是当前支持的并行版本支持的唯一集群类型在多个节点上执行.如果您使用的是由知识渊博的HPC系统管理员管理的群集,则应使用“MPI”,否则可能更容易使用“PSOCK”(或“SOCK”,如果您有特殊原因使用“雪”包).

如果选择创建“MPI”集群,则应使用带有“-n 1”选项的mpirun命令通过R执行脚本,并将makeCluster的第一个参数设置为应生成的工作器数. (如果你不知道这意味着什么,你可能不想使用这种方法.)

如果选择创建“PSOCK”或“SOCK”集群,则makeCluster的第一个参数必须是主机名的向量,并且makeCluster将在执行makeCluster时通过“ssh”命令启动这些节点上的工作程序.这意味着您必须在所有指定的主机上运行ssh守护程序.

我在其他地方写了很多关于这个主题的文章,但希望这会帮助你开始.

相关文章
相关标签/搜索