从R脚本中将作业提交到从属节点?

Dav*_*uer 14 parallel-processing hpc r qsub torque

为了得到myscript.R使用作业调度集群从属节点上运行(即,PBS)

目前,我使用以下命令将R脚本提交给从属节点

qsub -S /bin/bash -p -1 -cwd -pe mpich 1 -j y -o output.log ./myscript.R
Run Code Online (Sandbox Code Playgroud)

R中是否有函数允许我在头节点上运行myscript.R并将各个任务发送到从节点?就像是:

foreach(i=c('file1.csv', 'file2.csv', pbsoptions = list()) %do% read.csv(i)
Run Code Online (Sandbox Code Playgroud)

更新:qsub命令的替代解决方案是#/usr/bin/Rscript从第一行删除myscript.R并直接调用它,如@Josh所指出的

qsub -S /usr/bin/Rscript -p -1 -cwd -pe mpich 1 -j y -o output.log myscript.R
Run Code Online (Sandbox Code Playgroud)

Ste*_*ton 5

如果您想从R脚本中提交作业,我建议您查看"BatchJobs"包.以下是DESCRIPTION文件的引用:

提供Map,Reduce和Filter变体,以便在PBS/Torque,LSF,SLURM和Sun Grid Engine等批处理计算系统上生成作业.

BatchJobs似乎比之前的类似软件包(如Rsge和Rlsf)更复杂.有注册,提交和检索作业结果的功能.这是一个简单的例子:

library(BatchJobs)
reg <- makeRegistry(id='test')
batchMap(reg, sqrt, x=1:10)
submitJobs(reg)
y <- loadResults(reg)
Run Code Online (Sandbox Code Playgroud)

您需要配置BatchJobs以使用批处理排队系统.submitJobs"resource"参数可用于为作业请求适当的资源.

如果您的群集不允许长时间运行的作业,或者严重限制长时间运行的作业数量,则此方法非常有用.BatchJobs允许您通过将工作分解为多个作业来绕过这些限制,同时隐藏与手动执行相关的大部分工作.

文档和示例可在项目网站上获得.