Paralelización en R con snow

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.