2010-06-29 98 views
8

我在多節點Linux集羣上運行R。我想在不使用並行計算軟件(如MPI或雪)的情況下使用腳本或批處理模式在R上運行我的分析。R編程 - 使用PBS在多節點linux集羣上提交作業

我知道這可以通過劃分輸入數據,使每個節點運行不同部分的數據。

我的問題是我該如何解決這個問題?我不知道我應該如何編寫我的腳本。一個例子會非常有幫助!

我一直在使用PBS運行我的腳本,但它似乎只運行在一個節點上,因爲R是單線程程序。因此,我需要弄清楚如何調整我的代碼,以便將勞動力分配給所有節點。

這是我到目前爲止已經做的:

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

您確定pbs啓動多個實例嗎? 嘗試在作業批處理文件 – Anycorn 2010-06-29 21:25:35

回答

2

這是一個PBS問題;我通常會創建一個R腳本(在#!後面帶有Rscript路徑),並使其收集一個參數(使用commandArgs函數),該參數控制當前實例應該創建哪個「部分作業」。因爲我使用multicore很多,我通常只需要使用3-4個節點,所以我只提交幾個作業,調用這個R腳本,並使用每個可能的控制參數值。
另一方面,您使用pbsdsh應該完成它的工作......然後PBS_TASKNUM的值可以用作控制參數。

+2

中添加'echo $(主機名)'這是一個有趣的建議。你能不能請使用「commandArgs」和「PBS」腳本與我們分享你的Rscript?關於如何去做它並不明顯。謝謝 – Tony 2011-01-11 15:40:16

1

這是一個相關問題的答案 - 但它是對上述評論(以及)的回答。

對於我們的大部分工作,我們都使用qsub(替代)並行運行多個R會話。

如果是多個文件,我通常做:

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

This問題似乎非常適合使用GNU並行。 GNU並行有一個很好的教程here。我不熟悉pbsdsh,我是HPC的新手,但對我來說,它看起來像pbsdsh與GNU parallel有類似的用途。我也不熟悉,從參數從命令行啓動R,但這裏是我的猜測在你的PBS文件會怎樣看:

#!/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將訪問命令行參數來加載和處理指定的輸入文件。

我的這個答案的主要目的是指出GNU parallel的可用性,它是在原始問題發佈後提供的。希望別人能夠提供更具體的例子。另外,我仍然搖擺不定地使用parallel,例如,我不確定-j2選項。 (請參閱我的related question。)

相關問題