2014-05-08 19 views
11

parallel पैकेज का उपयोग कर क्लस्टर बनाने के दौरान मुझे धीमेपन का सामना करना पड़ रहा है।समानांतर पैकेज का उपयोग करके क्लस्टर बनाने के लिए समय को क्या प्रभावित करता है?

यहां एक ऐसा फ़ंक्शन है जो सिर्फ n नोड्स के साथ एक पीओओएसके क्लस्टर बनाता है और फिर रोकता है।

library(parallel) 
library(microbenchmark) 
f <- function(n) 
{ 
    cl <- makeCluster(n) 
    on.exit(stopCluster(cl)) 
} 
microbenchmark(f(2), f(4), times = 10) 
## Unit: seconds 
## expr  min  lq median  uq  max neval 
## f(2) 4.095315 4.103224 4.206586 5.080307 5.991463 10 
## f(4) 8.150088 8.179489 8.391088 8.822470 9.226745 10 

मेरे मशीन (चल रहा एक यथोचित आधुनिक 4 कोर कार्य केंद्र 7 विन प्रो) एक दो नोड क्लस्टर बनाने के बारे में 4 सेकंड और 8 सेकंड ले जा रहा है एक चार नोड क्लस्टर बनाने के लिए। इसने मुझे बहुत धीमी गति से मारा, इसलिए मैंने एक सहयोगी की समान रूप से specced मशीन पर एक ही प्रोफाइलिंग की कोशिश की, और क्रमशः दो परीक्षणों के लिए एक/दो सेकंड लग गए।

यह सुझाव दिया गया है कि मेरे पास मेरी मशीन पर कुछ अजीब कॉन्फ़िगरेशन स्थापित हो सकता है, या कोई अन्य समस्या है। मैंने ?makeCluster और socketConnection सहायता पृष्ठों को पढ़ा, लेकिन प्रदर्शन में सुधार से संबंधित कुछ भी नहीं देखा।

कोड चल रहा था, जबकि मैंने विंडोज टास्क मैनेजर में एक नज़र डाली थी: एंटी-वायरस या अन्य सॉफ़्टवेयर के साथ कोई स्पष्ट हस्तक्षेप नहीं था, केवल एक 17% (एक कोर से कम) पर चलने वाली एक प्रतिलेख प्रक्रिया थी।

मुझे नहीं पता कि समस्या का स्रोत कहां देखना है। विंडोज के तहत पीएसओकेके क्लस्टर निर्माण के साथ धीमेपन के ज्ञात कारण हैं?

4-नोड क्लस्टर वास्तव में धीमा (2014 मानकों के अनुसार) बनाने के लिए 8 सेकंड है, या मेरी अपेक्षाएं बहुत अधिक हैं?

+0

8 सेकंड बहुत धीमी है। मेरे 3 साल की Win7 वर्कस्टेशन में लगभग 1 सेकंड लगते हैं। – Roland

+0

मेरे नए win8 पीसी पर 11 सेकंड लेता है। W7 के साथ मेरे 3 साल पुराने i7 पर – JT85

+0

1.6 और 3.2 सेकंड। –

उत्तर

13

क्या हो रहा था इसकी निगरानी करने के लिए, मैंने Process Monitor (HT @qethanm) स्थापित और खोला। कम शोर उत्पन्न करने के लिए, मैंने ड्रॉपबॉक्स जैसे सिस्टम सिस्टम ट्रे में अधिकांश चीजों को भी छोड़ दिया। (हालांकि अंत में, इससे कोई फर्क नहीं पड़ता।)

फिर मैंने प्रश्न में आर कोड का सरलीकृत संस्करण फिर से चलाया, सीधे आरयूआई (आईडीई के बजाए) से।

microbenchmark(f(4), times = 5) 

कुछ खुदाई के बाद, मैंने देखा है कि आर जीयूआई प्रत्येक क्लस्टर है कि यह बनाता है (चित्र देखें) के लिए एक Rscript प्रक्रिया spawns।

the process tree shows an Rscript instance for each node in each cluster

कई मृत समाप्त होता है और जंगली हंस का पीछा करने के बाद, यह मेरे लिए हुआ है कि शायद इन Rscript उदाहरणों वेनिला आर नहीं थे मैं इसे छिपाने के लिए मेरी Rprofile.site फ़ाइल का नाम बदला और बेंचमार्क दोहराया।

इस बार, एक 4 नोड क्लस्टर औसतन एक सेकंड के नीचे, औसतन बनाया गया था।

एक चार नोड क्लस्टर के लिए, Rprofile.site फ़ाइल (और शायद व्यक्तिगत स्टार्टअप फ़ाइल, ~/.Rprofile, यदि वह मौजूद है) चार बार है, जो चीजों को काफी धीमा कर सकते हैं पढ़ा जाता है। इस व्यवहार से बचने के लिए rscript_args = c("--no-init-file", "--no-site-file", "--no-environ") से makeCluster पास करें।

+1

पर sfStop()} आगे निरीक्षण पर, ऐसा लगता है कि मेरे 'Rprofile के अंदर बिताए गए अधिकांश समय।साइट 'कॉल.pacages (पूछें = गलत) पर कॉल में है। –

+0

Rprofile.site का नाम बदलने से आप आगे के विश्लेषण को प्रभावित कर सकते हैं? क्या यह एक आवश्यक कदम नहीं है? अन्य उपयोगकर्ताओं ने समान परिणाम प्राप्त करने के लिए इस दृष्टिकोण को नहीं लिया। –

+0

'Rprofile.site' फ़ाइल का उपयोग या उपयोग करने का मतलब यह नहीं है कि आपके द्वारा सेट किए गए किसी भी विकल्प या फ़ाइल में परिभाषित चर को सेट/अस्तित्व नहीं दिया जाएगा। –

संबंधित मुद्दे