RNG, R, mclapply y cluster de computadoras

10

Estoy ejecutando una simulación en R y un grupo de computadoras y tengo el siguiente problema. En cada una de las X computadoras que ejecuto:

fxT2 <- function(i) runif(10)
nessay <- 100
c(mclapply(1:nessay, fxT2), recursive=TRUE)

Hay 32 computadoras, cada una con 16 núcleos. Sin embargo, alrededor del 2% de los números aleatorios son idénticos. ¿Qué estrategias adoptarías para evitar esto?

He podido evitar este problema para fxT2 estableciendo una latencia (es decir, retrasando por un segundo el tiempo en que cada trabajo se envía a cada una de las computadoras X). Pero parece muy ad-hoc para fxt2.

El problema es que, en realidad, fxT2 es una tarea larga que involucra números pseudoaleatorios. Al final del proceso, espero obtener una reproducción X * nessay del mismo experimento estadístico, no reproducciones nessay. ¿Cómo asegurarse de que este sea el caso y hay una manera de verificar esto?

usuario603
fuente
Buena pregunta. Eche un vistazo a esta pregunta sobre números aleatorios y el paquete multinúcleo
csgillespie
@CSgillepsie:> gracias por el puntero, pero no estoy seguro de que sea el mismo problema: por la forma en que entiendo la pregunta que apuntaste, mclapply genera todos los procesos. Aquí es un poco diferente: en cada una de las máquinas, mclapply genera todos los procesos, pero este no es el caso en todas las máquinas.
usuario603

Respuestas:

6

La nieve tiene un soporte explícito para inicializar el número dado de secuencias RNG en un cómputo de clúster.

Puede emplear una de dos implementaciones de RNG:

De lo contrario, debe hacer la coordinación a mano.

Dirk Eddelbuettel
fuente
3

Debe usar un RNG diseñado específicamente para la computación paralela. Consulte la sección "Computación paralela: números aleatorios" de la Vista de tareas de computación de alto rendimiento .

Joshua Ulrich
fuente
También necesita coordinar entre las secuencias RNG. Snow hace eso, multinúcleo puede ahora.
Dirk Eddelbuettel