programming parallel r windows parallel-processing cluster-computing snowfall

parallel - ¿Cómo configurar trabajadores para el procesamiento paralelo en R usando nevadas y múltiples nodos de Windows?



r parallel programming (0)

He utilizado con éxito las nevadas para configurar un clúster en un solo servidor con 16 procesadores.

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))

Ahora, estoy buscando instrucciones completas sobre cómo pasar a un modelo distribuido . Tengo 4 máquinas de Windows diferentes con un total de 16 núcleos que me gustaría usar para un clúster de 16 nodos. Hasta ahora, entiendo que podría configurar manualmente una conexión SOCK o aprovechar MPI. Si bien parece posible, no he encontrado instrucciones claras y completas sobre cómo.

La ruta SOCK parece depender del código en un script de snowlib. Puedo generar un stub desde el lado principal con el siguiente código:

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)

Otorga lo siguiente:

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

Se siente como un comienzo razonable. Encontré el código para RSOCKnode.R en GitHub bajo el paquete de nieve:

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)) })

No está claro cómo iniciar realmente un oyente SOCK en los trabajadores, a menos que esté enterrado en la snow::recvData .

Mirando la ruta MPI , hasta donde puedo decir, Microsoft MPI versión 7 es un punto de partida. Sin embargo, no pude encontrar una alternativa de Windows para sfCluster. Pude iniciar el servicio MPI, pero parece que no escucha en el puerto 22 y no hay cantidad de ataques contra él con snowfall::makeCluster arrojó un resultado. Inhabilité el cortafuegos y probé con makeCluster y con el PuTTY para conectarme directamente al trabajador desde el maestro.

¿Existe una guía completa y paso a paso para configurar un conjunto de nevadas en los trabajadores de Windows que me he perdido? Me gusta snowfall::sfClusterApplyLB y me gustaría seguir usándolo, pero si hay una solución más fácil, estaría dispuesto a cambiar de rumbo. Al analizar Rmpi ​​y paralelamente, encontré soluciones alternativas para el lado maestro del trabajo, pero aún hay pocos detalles específicos sobre cómo configurar trabajadores que ejecutan Windows.

Debido a la naturaleza del entorno de trabajo, ni mudarse a AWS, ni Linux es una opción.

Preguntas relacionadas sin respuestas definitivas para los nodos de trabajo de Windows:

  • Cómo configurar nodos esclavos de clúster (en Windows)
  • Paralelo R en un clúster de Windows
  • ¿Cree un clúster de PC con Windows 7 para trabajar en paralelo en R?