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/似乎我应该改变默认类型( sockMPI - 哪一个会工作UNIX?)

编辑

从这些作者的小插图来看:

默认情况下,doParallel在类Unix系统上使用多核功能,在Windows上使用雪功能。 请注意,多核功能只能在一台计算机上运行任务,而不是在一组计算机上运行。 但是,您可以使用下雪功能在群集上执行,使用类Unix操作系统,Windows或甚至组合。

you can use the snow functionality是什么意思? 我应该怎么做?


parallel程序包是multicoresnow包合并而成的,但如果要在多个节点上运行,则必须parallel使用“降雪功能”(也就是说,由snow产生的parallel部分) 。 实际上,这意味着您需要使用设置为“PSOCK”,“SOCK”,“MPI”或“NWS”的“type”参数调用makeCluster ,因为这些是目前版本的parallel支持的唯一群集类型,支持在多个节点上执行。 如果您使用的是由知识丰富的HPC系统管理员管理的群集,则应该使用“MPI”,否则使用“PSOCK”(或“SOCK”,如果您有特殊原因需要使用“snow”包)。

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

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

我已经在其他地方就这个问题写了更多,但希望这会帮助你开始。


以下是部分答案,可能会使您朝正确的方向发展

基于这个相当古老的(2013)帖子http://www.r-bloggers.com/the-wonders-of-foreach/似乎我应该改变默认类型(叉到MPI,但为什么?这将工作在unix ?)

fork是在POSIX系统上产生后台进程的一种方式。 在具有n核心的单个节点上,您可以并行生成n进程并开始工作。 这不适用于多台机器,因为它们不共享内存。 你需要一种方法来获取它们之间的数据。

MPI是一种便携式的节点群集通信方式。 MPI群集可以跨节点工作。

你可以使用雪的功能是什么意思? 我应该怎么做?

snow是一个单独的包。 要创建一个16节点的MPI集群,请执行cl <- makeCluster(16, type = "MPI")但是您需要在正确的环境中运行R,如Steve Weston的回答和他在此处回答类似问题时所述。 (一旦你运行了,你可能还需要修改你的循环以在每个节点上使用4个内核。)

链接地址: http://www.djcxy.com/p/53435.html

上一篇: R foreach: from single

下一篇: parallel regression in R (maybe with snowfall)