AKTUALIZACJA: daszek używa teraz foreach
wewnętrznie, więc to pytanie nie jest już tak naprawdę istotne. Jeśli możesz zarejestrować działający backend równoległy foreach
, Caret go użyje.
Mam pakiet karetki dla R i jestem ciekawy w użyciu train
funkcji do krzyżowej weryfikacji moich modeli. Chcę jednak przyspieszyć i wydaje się, że daszek zapewnia obsługę przetwarzania równoległego. Jaki jest najlepszy sposób uzyskania dostępu do tej funkcji na komputerze z systemem Windows? Mam pakiet doSMP , ale nie wiem, jak przełożyć foreach
funkcję na lapply
funkcję, więc mogę przekazać ją do train
funkcji.
Oto przykład tego, co chcę zrobić z train
dokumentacji: To jest dokładnie to, co chcę zrobić, ale używając doSMP
pakietu, a nie doMPI
pakietu.
## A function to emulate lapply in parallel
mpiCalcs <- function(X, FUN, ...)
}
theDots <- list(...)
parLapply(theDots$cl, X, FUN)
{
library(snow)
cl <- makeCluster(5, "MPI")
## 50 bootstrap models distributed across 5 workers
mpiControl <- trainControl(workers = 5,
number = 50,
computeFunction = mpiCalcs,
computeArgs = list(cl = cl))
set.seed(1)
usingMPI <- train(medv ~ .,
data = BostonHousing,
"glmboost",
trControl = mpiControl)
Oto wersja funkcji mbq, która używa tych samych nazw zmiennych co dokumentacja lapply:
felapply <- function(X, FUN, ...) {
foreach(i=X) %dopar% {
FUN(i, ...)
}
}
x <- felapply(seq(1,10), sqrt)
y <- lapply(seq(1,10), sqrt)
all.equal(x,y)
źródło
caret::train()
ponieważWindows
większość przykładówAPM
książki jest drogo obliczeniowa, przynajmniej dla mnie 3 GB pamięci RAM, 2,1 GHz, dwurdzeniowy, 32-bitowy Win . Gdybym znał ten problem wcześniej, zmieniłbym się naLinux
, ale jest już za późno, abym mógł zrobić coś takiego. Czy wiesz, jak walczyć z tym problemem w systemie Windows? jeśli odpowiedź przezmbq
jest nadal aktywna, czy możesz po prostu pokazać w kodzie na konkretnym przykładzie dowolnego modelu o umiarkowanym rozmiarze danych, jak zaimplementowaćcomputeFunction
?foreach
pakietu wewnętrznie, który działa z dowolnym równoległym backendem, który możesz zarejestrować. Spójrz na pakiet doParallel. Gdy zarejestrujesz backend, Caret automatycznie go użyje. Zauważ też, że w systemie Windows każdy rdzeń potrzebuje własnej kopii pamięci RAM, więc jeśli zarejestrujesz 4 rdzenie, potrzebujesz 4x więcej pamięci RAM.caret
, czy możecie przyjrzeć się temu pytaniu, byłbym bardzo wdzięczny. stats.stackexchange.com/questions/81962/…