RNG, R, mclapply i klaster komputerów

10

Korzystam z symulacji na R i klastrze komputerów i mam następujący problem. Na każdym z X komputerów uruchamiam:

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

Jest 32 komputerów, każdy z 16 rdzeniami. Jednak około 2% liczb losowych jest identycznych. Jakie strategie zastosowałbyś, aby tego uniknąć?

Udało mi się uniknąć tego problemu dla fxT2, ustawiając opóźnienie (tj. Opóźnienie o sekundę czasu, w którym każde zadanie jest wysyłane do każdego z X komputerów). Ale wydaje się bardzo ad hoc do fxt2.

Problem polega na tym, że w rzeczywistości fxT2 jest długim zadaniem obejmującym pseudolosowe liczby. Pod koniec tego procesu spodziewam się, że otrzymam X * nessay tego samego eksperymentu statystycznego, a nie nessay reprodukcji. Jak upewnić się, że rzeczywiście tak jest i czy istnieje sposób, aby to sprawdzić ?.

użytkownik603
źródło
Dobre pytanie. Spójrz na to pytanie dotyczące liczb losowych i pakietu wielordzeniowego
csgillespie
@CSgillepsie:> dziękuję za wskaźnik, ale nie jestem pewien, czy to ten sam problem: sposób, w jaki rozumiem pytanie, na które wskazałeś, wszystkie procesy są tworzone przez mclapply. Tutaj jest trochę inaczej: na każdym z komputerów wszystkie procesy są odradzane przez mclapply, ale nie dzieje się tak na różnych komputerach.
user603

Odpowiedzi:

6

Śnieg ma wyraźne poparcie dla zainicjowania podana liczba RNG strumieni w obliczeniach klastra.

Może wykorzystywać jedną z dwóch implementacji RNG:

W przeciwnym razie koordynację należy wykonać ręcznie.

Dirk Eddelbuettel
źródło
3

Musisz użyć RNG specjalnie zaprojektowanego do obliczeń równoległych. Zobacz sekcję „Obliczenia równoległe: liczby losowe” w widoku zadań obliczeń o wysokiej wydajności .

Joshua Ulrich
źródło
Musisz także koordynować strumienie RNG. Snow to robi, teraz może być wielordzeniowy.
Dirk Eddelbuettel