Suelo trabajar un servidor con ocho CPUs. Cuando quiero paralelizar código en R, suelo utilizar parallel::mclapply
(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.