如何在R中使用降雪和多个Windows节点设置并行处理工作人员?

我已经成功地使用降雪在一台配有16个处理器的服务器上设置集群。

require(snowfall) if (sfIsRunning() == TRUE) sfStop() number.of.cpus <- 15 sfInit(parallel = TRUE, cpus = number.of.cpus) stopifnot( sfCpus() == number.of.cpus ) stopifnot( sfParallel() == TRUE ) # Print the hostname for each cluster member sayhello <- function() { info <- Sys.info()[c("nodename", "machine")] paste("Hello from", info[1], "with CPU type", info[2]) } names <- sfClusterCall(sayhello) print(unlist(names)) 

现在,我正在寻找如何转移到分布式模型的完整说明。 我有4个不同的Windows机器,总共有16个内核,我想用于16个节点的群集。 到目前为止,我明白我可以手动设置SOCK连接或利用MPI。 虽然看起来有可能,但我还没有find明确而完整的方向。

SOCK路线似乎取决于snowlib脚本中的代码。 我可以用下面的代码从主端生成一个存根:

 winOptions <- list(host="172.01.01.03", rscript="C:/Program Files/R/R-2.7.1/bin/Rscript.exe", snowlib="C:/Rlibs") cl <- makeCluster(c(rep(list(winOptions), 2)), type = "SOCK", manual = T) 

它产生以下内容:

 Manually start worker on 172.01.01.03 with "C:/Program Files/R/R-2.7.1/bin/Rscript.exe" C:/Rlibs/snow/RSOCKnode.R MASTER=Worker02 PORT=11204 OUT=/dev/null SNOWLIB=C:/Rlibs 

这感觉像是一个合理的开始。 我在GitHub上find了在雪包下的RSOCKnode.R代码:

 local({ master <- "localhost" port <- "" snowlib <- Sys.getenv("R_SNOW_LIB") outfile <- Sys.getenv("R_SNOW_OUTFILE") ##**** defaults to ""; document args <- commandArgs() pos <- match("--args", args) args <- args[-(1 : pos)] for (a in args) { pos <- regexpr("=", a) name <- substr(a, 1, pos - 1) value <- substr(a,pos + 1, nchar(a)) switch(name, MASTER = master <- value, PORT = port <- value, SNOWLIB = snowlib <- value, OUT = outfile <- value) } if (! (snowlib %in% .libPaths())) .libPaths(c(snowlib, .libPaths())) library(methods) ## because Rscript as of R 2.7.0 doesn't load methods library(snow) if (port == "") port <- getClusterOption("port") sinkWorkerOutput(outfile) cat("starting worker for", paste(master, port, sep = ":"), "\n") slaveLoop(makeSOCKmaster(master, port)) }) 

目前还不清楚如何真正启动一个SOCK的工作人员,除非它被埋在snow::recvData

纵观MPI路线 ,据我所知,微软MPI版本7是一个起点。 但是,我找不到sfCluster的Windows替代品。 我能够启动MPI服务,但是它并没有在22端口上收听,也没有在snowfall::makeCluster上产生结果。 我已经禁用了防火墙,并尝试使用makeCluster进行testing,并使用PuTTY直接连接到主服务器。


有没有一个全面的,一步一步的指导,build立一个Windows工作人员,我已经错过了一个降雪集群? 我喜欢snowfall::sfClusterApplyLB并希望继续使用,但如果有一个更简单的解决scheme,我会愿意改变方向。 纵观Rmpi和平行,我find了工作主方的替代解决scheme,但是对于如何设置运行Windows的工作人员还没有具体的细节。

由于工作环境的性质,既不移动到AWS也不移动Linux。

没有Windows工作者节点的确切答案的相关问题:

  • 如何设置群集从属节点(在Windows上)
  • Windows群集上的并行R
  • 在R中创build一个同事的Windows 7 PC群并行处理