r - 在 LSF 中指定作业数组

标签 r cluster-computing jobs hpc lsf

我的目标是重复运行 R 脚本,每次使用一组不同参数。

为此,我一直在使用 bash 脚本通过循环输入文件将命令行参数传递给 R 脚本,其中每一行包含 7 个参数的不同组合。

输入文件如下所示:

10 food 0.00005 0.002 1 OBSERVED 0
10 food 0.00005 0.002 1 OBSERVED 240
10 food 0.00005 0.002 1 OBSERVED 480
10 food 0.00005 0.002 1 OBSERVED 720
10 food 0.00005 0.002 1 OBSERVED 960
10 food 0.00005 0.002 1 OBSERVED 1200

传递命令行参数的 R 脚本是这样开始的:

commandArgs(trailingOnly=FALSE)
A <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -6 )]) 
B <-             commandArgs()[as.numeric(length(commandArgs()) -5 )]  
C <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -4 )]) 
D <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -3 )]) 
E <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -2 )])
F <-             commandArgs()[as.numeric(length(commandArgs()) -1 )]  
G <- as.numeric (commandArgs()[as.numeric(length(commandArgs())    )]) 

读取这些内容并调度 R 脚本的 bash 循环如下;

#!/bin/bash
N=0
cat Input.txt | while read LINE ; do
N=$((N+1))
echo "R --no-save < /home/trichard/Script.R" "$LINE" |  bsub  -N -q priority -R "select[model==Xeon5450]"  
done

但是,问题是 Input.txt 中有数百万行,所以这种方法太慢了(它会阻止其他 LSF 用户提交他们自己的作业)。

那么,问题是,如何使用 LSF 数组执行上述操作?

最佳答案

主要技巧是从输入文件中提取第 n 行。假设你在一个类 Unix 系统上,你可以使用“sed”命令来做到这一点。这是一个例子:

N=$(wc -l < input.txt)
echo 'R --no-save -f Script.R --args $(sed "${LSB_JOBINDEX}q;d" input.txt)' |
  bsub -J "R_Job[1-$N]" -N -q priority -R "select[model==Xeon5450]"

正确的参数引用有点棘手,但在这个例子中非常重要。

请注意,这使用 R“--args”选项来避免有关无法识别参数的警告消息。我还建议在 R 脚本中使用 commandArgs(trailingOnly=TRUE),这样您就只会看到感兴趣的参数。

关于r - 在 LSF 中指定作业数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422491/

相关文章:

r - 在 select_ 中构造变量名

r - 为 ggplot 中的堆积条形图着色 : what if my fill variable is comprised of several columns?

r - 如何从 clusGap 函数中获得最佳簇数作为输出?

powershell - powershell开始作业对脚本 block 不执行任何操作

linux - bash:什么是工作规范

Oracle:如何从 PL/SQL 使作业脱机?

r - 将日期刻度添加到 R 中的 ggplot

r - shinydasboard 未加载 R

docker - 配置GKE上节点的最大Pod数

hadoop - 为什么增加集群数量可以加快 Hadoop MapReduce 中的查询速度?