2010-06-29 15 views
8

का उपयोग कर एकाधिक नोड लिनक्स क्लस्टर पर नौकरियां जमा करना मैं कई नोड लिनक्स क्लस्टर पर आर चला रहा हूं। मैं एमपीआई या बर्फ जैसे समांतर कंप्यूटिंग सॉफ्टवेयर का उपयोग किए बिना स्क्रिप्ट या बैच मोड का उपयोग कर आर पर अपना विश्लेषण चलाने के लिए चाहता हूं।आर प्रोग्रामिंग - पीबीएस

मुझे पता है कि यह इनपुट डेटा को विभाजित करके किया जा सकता है जैसे कि प्रत्येक नोड डेटा के विभिन्न हिस्सों को चलाता है।

मेरा सवाल यह है कि मैं इस बारे में बिल्कुल कैसे जा सकता हूं? मुझे यकीन नहीं है कि मुझे अपनी स्क्रिप्ट को कैसे कोड करना चाहिए। एक उदाहरण बहुत उपयोगी होगा!

मैं पीबीएस का उपयोग करके अब तक अपनी स्क्रिप्ट चला रहा हूं लेकिन यह केवल एक नोड पर चल रहा है क्योंकि आर एक एकल थ्रेड प्रोग्राम है। इसलिए, मुझे यह पता लगाने की आवश्यकता है कि मेरे कोड को कैसे समायोजित किया जाए ताकि यह सभी नोड्स में श्रम वितरित कर सके।

1) कमांड लाइन:

> qsub myjobs.pbs 

2) myjobs.pbs:

> #!/bin/sh 
> #PBS -l nodes=6:ppn=2 
> #PBS -l walltime=00:05:00 
> #PBS -l arch=x86_64 
> 
> pbsdsh -v $PBS_O_WORKDIR/myscript.sh 

3) myscript

यहाँ मैं अब तक क्या कर दिया गया है .sh:

#!/bin/sh 
cd $PBS_O_WORKDIR 
R CMD BATCH --no-save my_script.R 

4) my_script.R:

> library(survival) 
> ... 
> write.table(test,"TESTER.csv", 
> sep=",", row.names=F, quote=F) 

कोई सुझाव की सराहना की जाएगी! धन्यवाद!

-CC

+0

क्या आप निश्चित हैं कि पीबीएस कई उदाहरण लॉन्च करता है? जॉब बैच फ़ाइल – Anycorn

उत्तर

2

यह बजाय एक पीबीएस सवाल है, मैं आमतौर पर एक आर स्क्रिप्ट (# के बाद प्रतिलेख पथ के साथ) बना देता हूं और इसे पैरामीटर इकट्ठा करता हूं (commandArgs फ़ंक्शन का उपयोग करके) जो इस वर्तमान उदाहरण को "नौकरी का हिस्सा" नियंत्रित करता है। क्योंकि मैं multicore का उपयोग करता हूं, मुझे आमतौर पर केवल 3-4 नोड्स का उपयोग करना पड़ता है, इसलिए मैं इस आर स्क्रिप्ट को संभावित नियंत्रण तर्क मानों के साथ कॉल करने वाली कुछ नौकरियां सबमिट करता हूं।
दूसरी तरफ pbsdsh का उपयोग अपना काम करना चाहिए ... फिर PBS_TASKNUM का मान नियंत्रण पैरामीटर के रूप में उपयोग किया जा सकता है।

+2

में 'echo $ (hostname)' जोड़ने का प्रयास करें यह एक दिलचस्प सुझाव है। क्या आप कृपया "कमांडआर्ग" और "पीबीएस" स्क्रिप्ट का उपयोग करके कृपया अपनी प्रतिलिपि साझा कर सकते हैं? यह स्पष्ट नहीं है कि कोई इसके बारे में कैसे जाएगा। धन्यवाद – Tony

1

यह एक संबंधित प्रश्न का उत्तर था - लेकिन यह ऊपर टिप्पणी (जैसा भी) का उत्तर है।

हमारे अधिकांश कामों के लिए हम qsub (इसके बजाए) के समानांतर में एकाधिक आर सत्र चलाते हैं।

यदि यह एक से अधिक फ़ाइलों के लिए है मैं सामान्य रूप से कार्य करें:

while read infile rest 
do 
qsub -v infile=$infile call_r.pbs 
done < list_of_infiles.txt 

call_r.pbs:

... 
R --vanilla -f analyse_file.R $infile 
... 

analyse_file.R:

args <- commandArgs() 
infile=args[5] 
outfile=paste(infile,".out",sep="")... 

तब मैं गठबंधन सभी उत्पादन बाद में ...

1

यह समस्या जीएनयू समानांतर के उपयोग के लिए बहुत अच्छी तरह से अनुकूल लगती है। जीएनयू समांतर में उत्कृष्ट ट्यूटोरियल here है।मैं pbsdsh से परिचित नहीं हूं, और मैं एचपीसी के लिए नया हूं, लेकिन मेरे लिए ऐसा लगता है कि pbsdsh जीएनयू parallel के समान उद्देश्य प्रदान करता है। मैं भी तर्क के साथ कमांड लाइन से आर शुरू करने से परिचित नहीं हूँ, लेकिन यहां आपको अपने पीबीएस फ़ाइल लगेगा पर मेरा अनुमान है:

#!/bin/sh 
#PBS -l nodes=6:ppn=2 
#PBS -l walltime=00:05:00 
#PBS -l arch=x86_64 
... 
parallel -j2 --env $PBS_O_WORKDIR --sshloginfile $PBS_NODEFILE \ 
    Rscript myscript.R {} :::: infilelist.txt 

जहां infilelist.txt सूचियों आप कार्रवाई करने के लिए चाहते हैं डेटा फ़ाइलों, जैसे:

inputdata01.dat 
inputdata02.dat 
... 
inputdata12.dat 

आपका myscript.R निर्दिष्ट इनपुट फ़ाइल को लोड और संसाधित करने के लिए कमांड लाइन तर्क तक पहुंच जाएगा।

इस उत्तर के साथ मेरा मुख्य उद्देश्य जीएनयू समांतर की उपलब्धता को इंगित करना है, जो मूल प्रश्न पोस्ट करने के बाद आया था। उम्मीद है कि कोई और एक और मूर्त उदाहरण प्रदान कर सकता है। इसके अलावा, मैं अभी भी parallel के उपयोग के साथ wobbly हूँ, उदाहरण के लिए, मैं -j2 विकल्प के बारे में अनिश्चित हूँ। (मेरा related question देखें।)

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