Próbuję uruchomić predict()
równolegle na moim komputerze z systemem Windows. Działa to na mniejszym zbiorze danych, ale nie skaluje się dobrze, ponieważ dla każdego procesu tworzona jest nowa kopia ramki danych. Czy istnieje sposób równoległego uruchamiania bez tworzenia tymczasowych kopii?Równoległe przewidywanie
mojego kodu (tylko nieliczne modyfikacje this oryginalnego kodu):
library(foreach)
library(doSNOW)
fit <- lm(Employed ~ ., data = longley)
scale <- 100
longley2 <- (longley[rep(seq(nrow(longley)), scale), ])
num_splits <-4
cl <- makeCluster(num_splits)
registerDoSNOW(cl)
split_testing<-sort(rank(1:nrow(longley))%%num_splits)
predictions<-foreach(i= unique(split_testing),
.combine = c, .packages=c("stats")) %dopar% {
predict(fit, newdata=longley2[split_testing == i, ])
}
stopCluster(cl)
Używam prostego replikacji danych, aby go przetestować. Z scale
10 lub 1000 działa, ale chciałbym, aby działał z scale <- 1000000
- ramka danych z 16 milionów wierszy (ramka danych 1,86 GB, jak wskazano przez object_size()
z pryr
. Zauważ, że w razie potrzeby mogę również użyć maszyny Linux, jeśli to jest jedyną opcją