繁体   English   中英

R 编程 - 使用 PBS 在多节点 linux 集群上提交作业

[英]R programming - submitting jobs on a multiple node linux cluster using PBS

我在多节点 Linux 集群上运行 R。 我想使用脚本或批处理模式在 R 上运行我的分析,而不使用 MPI 或 snow 等并行计算软件。

我知道这可以通过划分输入数据来完成,以便每个节点运行数据的不同部分。

我的问题是我该怎么做呢? 我不确定我应该如何编码我的脚本。 一个例子会很有帮助!

到目前为止,我一直在使用 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

这是一个 PBS 问题; 我通常会制作一个 R 脚本(在 #! 之后使用 Rscript 路径)并让它收集一个参数(使用commandArgs函数)来控制当前实例应该制作的“工作的一部分”。 因为我经常使用multicore ,所以我通常只需要使用 3-4 个节点,所以我只提交了一些使用每个可能的控制参数值调用这个 R 脚本的作业。
另一方面,你对pbsdsh的使用应该可以完成它的工作......然后PBS_TASKNUM的值可以用作控制参数。

这是对相关问题的回答 - 但它也是对上述评论的回答(也是)。

对于我们的大部分工作,我们确实使用 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
...

analyze_file.R:

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

然后我之后合并所有输出......

这个问题似乎非常适合使用 GNU 并行。 GNU parallel在这里有一个很好的教程。 我不熟悉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感到不安,例如,我不确定-j2选项。 (请参阅我的相关问题。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM