Paralelización en R con snow
Suelo trabajar un servidor con ocho CPUs. Cuando quiero paralelizar código en R, suelo utilizar [parallel::mclapply](https://stat.ethz.ch/R-manual/R-devel/library/parallel/html/mclapply.html)
(como aquí). Pero no tengo una máquina. Tengo varias. Y antes, de hecho, muchas.
¿Cómo paralelizar en distintas máquinas?
Se puede usar Spark (y SparkR), por ejemplo. Pero una ruta que no había ensayado jamás es la de la vieja escuela, i.e., MPI, snow
y demás.
Pero si
- tienes varios servidores corriendo un sistema operativo decente,
- instalas R y
snow
(y todo lo que necesites) en todos ellos y - configuras los servidores para poder acceder a través de ssh sin contraseña desde uno central,
y, entonces, ejecutas
cluster.def <- list(user = "linux_user_name", nodes = data.frame(
host = c("localhost", "10.65.243.58"), cores = c(2,4)))
cluster.nodes <- as.character(rep(cluster.def$nodes$host,
times = cluster.def$nodes$cores))
cl <- makeSOCKcluster(cluster.nodes, user = cluster.def$user)
res <- clusterApply(cl, 1:10, Sys.sleep)
stopCluster(cl)
dormirás (en el sentido de Sys.sleep
) como tal vez nunca: en varios hilos simultáneos a la vez que corren en las dos máquinas indicadas en la especificación del clúster.