DoSMP kullanarak düzeltme paketi paketini paralelleştirme


10

GÜNCELLEME: şapka artık foreachdahili olarak kullanıldığından, bu soru artık gerçekten alakalı değildir. İçin çalışan bir paralel arka uç kaydedebilirseniz foreach, caret bunu kullanır.


R için düzeltme paketi var ve trainmodellerimi çapraz doğrulamak için işlevi kullanmakta ilginçim. Ancak, işleri hızlandırmak istiyorum ve görünüşe göre, caret paralel işleme için destek sağlıyor. Bir Windows makinesinde bu özelliğe erişmenin en iyi yolu nedir? Ben doSMP paketi, ama çevirmek için nasıl bilemiyorum foreachbir içine fonksiyonu lapplyben bunu geçebilir, böylece fonksiyonu trainişlevi.

trainBelgelerden ne yapmak istediğime bir örnek : İşte tam olarak bunu yapmak istiyorum, ancak doSMPpaket yerine doMPIpaketi kullanmak.

## 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)

İşte mbq işlevinin lapply belgeleriyle aynı değişken adlarını kullanan bir sürümü:

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)

Yanıtlar:


6

Deneyin

computeFunction=function(onWhat,what,...){foreach(i=onWhat) %do% what(i,...)},

5

Caret zaten bu train()işlevi sizin için dahili olarak yapar , yeni başlayanlar için caret web sayfasının alt bölümüne bakın .


Tren tarafından kullanılan varsayılan fonksiyon lapply'dir. Eğer treni paralel hale getirmek istiyorsanız, lapply'i taklit eden, multicore ::: mclapply gibi bir paralel fonksiyona ihtiyacınız vardır. En azından ben böyle anlıyorum.
Zach

@Zach, bu soru için 1, ben merak biri ile paralel işlem nasıl yapabilirim herhangi güncelleme olup caret::train()için Windows, örnekler çoğu APMkitabı, hesaplama pahalı benim için en azından 3 GB RAM, 2.1GHz, çift çekirdekli, 32 bit Win . Bu sorunu daha önce biliyor olsaydım, değişirdim Linux, ama şimdi böyle bir şey yapmak benim için çok geç. Pencerelerde bu sorunla nasıl mücadele edeceğiniz hakkında bir fikriniz var mı? eğer cevap mbqhala aktif ise, pls sadece nasıl uygulamak için orta veri boyutu ile herhangi bir modelin somut bir örnek kullanarak kod gösterebilir computeFunction?
doktora

@doctorate caret, foreachpaketi dahili olarak kullanacak şekilde güncellendi; bu, kaydedebileceğiniz paralel arka uçlarla çalışır. DoParallel paketine bir göz atın. Bir arka ucu kaydettiğinizde, düzeltme işareti otomatik olarak kullanır. Ayrıca, pencerelerde, her çekirdeğin kendi koç kopyasına ihtiyacı olduğunu unutmayın, bu nedenle 4 çekirdeği kaydederseniz, 4x RAM'e ihtiyacınız vardır.
Zach

@Zach, gerçekten teşekkürler, denedim ve işe yaradı. Ayrıca katkıda bulunduğunuzu da biliyorum caret, lütfen bu soruya bir göz atabilir misiniz, çok minnettar olurum. stats.stackexchange.com/questions/81962/…
doktora
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.