DoSMP का उपयोग कर कैरेट पैकेज को समानांतर करना


10

अद्यतन: कैरेट अब foreachआंतरिक रूप से उपयोग करता है , इसलिए यह प्रश्न अब वास्तव में प्रासंगिक नहीं है। यदि आप इसके लिए काम करने वाले समानांतर बैकएंड को पंजीकृत कर सकते हैं foreach, तो कैरट इसका उपयोग करेगा।


मेरे पास आर के लिए कैरेट पैकेज है, और मैं trainअपने मॉडलों को पार करने के लिए फ़ंक्शन का उपयोग करने में दिलचस्प हूं। हालांकि, मैं चीजों को गति देना चाहता हूं, और ऐसा लगता है कि कैरेट समानांतर प्रसंस्करण के लिए समर्थन प्रदान करता है। विंडोज मशीन पर इस सुविधा का उपयोग करने का सबसे अच्छा तरीका क्या है? मेरे पास doSMP पैकेज है, लेकिन मैं यह पता नहीं लगा सकता कि foreachफ़ंक्शन को फ़ंक्शन में कैसे अनुवाद किया lapplyजाए, इसलिए मैं इसे trainफ़ंक्शन में पास कर सकता हूं ।

trainदस्तावेज़ से मैं क्या करना चाहता हूं, इसका एक उदाहरण है : यह वही है जो मैं करना चाहता हूं, लेकिन doSMPपैकेज के बजाय पैकेज का उपयोग कर रहा हूं doMPI

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

यहाँ mbq के फ़ंक्शन का एक संस्करण है जो 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)

जवाबों:


6

प्रयत्न

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

5

कैरेट पहले से ही आंतरिक रूप से आपके लिए train()फ़ंक्शन का हिस्सा है , शुरुआत के लिए कैरेट वेबपेज के निचले भाग को देखें ।


ट्रेन द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट कार्य संक्षिप्त है। यदि आप ट्रेन को समानांतर बनाना चाहते हैं, तो आपको एक समानांतर फ़ंक्शन की आवश्यकता है जो लंगोटी की नकल करता है, जैसे कि मल्टीकोर ::: mclapply। कम से कम, इस तरह से मैं चीजों को समझता हूं।
जच

@Zach, इस प्रश्न के लिए +1, मुझे आश्चर्य है वहाँ कैसे एक के साथ समानांतर प्रसंस्करण कर सकते हैं किसी भी अद्यतन है caret::train()के लिए Windows, के उदाहरण से ज्यादातर APMपुस्तक computationally महंगे हैं, मेरे लिए कम से कम 3GB RAM, 2.1 गीगा, दोहरे कोर, 32 बिट जीत । अगर मैं इस मुद्दे को पहले से जानता था, तो मैं बदल जाता Linux, लेकिन अब मुझे ऐसा करने में बहुत देर हो चुकी है। क्या आप किसी भी विचार को जानते हैं कि खिड़कियों में इस मुद्दे का मुकाबला कैसे किया जाए? यदि उत्तर mbqअभी भी सक्रिय है, तो क्या आप किसी भी मॉडल के ठोस उदाहरण का उपयोग करके कोड में दिखा सकते हैं कि कैसे लागू किया जाए computeFunction?
डॉक्टरेट

foreachपैकेज को आंतरिक रूप से उपयोग करने के लिए @doctorate कैरेट को अद्यतन किया गया है , जो आपके द्वारा पंजीकृत किसी भी समानांतर बैकएंड के साथ काम करता है। DoParallel पैकेज पर एक नज़र डालें। एक बार जब आप एक बैकएंड रजिस्टर कर लेते हैं, तो कैरेट स्वतः ही इसका उपयोग करेगा। यह भी ध्यान दें कि, विंडोज़ पर, प्रत्येक कोर को राम की स्वयं की प्रति की आवश्यकता होती है, इसलिए यदि आप 4 कोर रजिस्टर करते हैं, तो आपको 4 गुना रैम की आवश्यकता है।
Zach

@Zach, वास्तव में धन्यवाद, मैंने इसकी कोशिश की और यह काम कर गया। मुझे यह भी पता है कि आपने इसमें योगदान दिया है caret, क्या आप इस प्रश्न पर एक नज़र डाल सकते हैं, मैं बहुत आभारी रहूंगा। आँकड़े.स्टैकएक्सचेंज.com
डॉक्टरेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.