繁体   English   中英

在 Slurm 中使用作业数组并行化 Rscript

[英]Paralelizing an Rscript using a job array in Slurm

我想在 Slurm 中使用数组作业运行 Rscript.R,其中包含 1-10 个任务,作业中的任务 ID 将被定向到 Rscript,以编写一个名为“'task id'.out”的文件,其中包含'task id' 在它的正文中。 然而,事实证明这比我预期的更具挑战性哈哈我正在尝试以下方法:

~/bash_test.sh 看起来像:

#!/bin/bash -l
#SBATCH --time=00:01:00
#SBATCH --array=1-10
conda activate R
cd ~/test 
R CMD BATCH --no-save --no-restore ~/Rscript_test.R $SLURM_ARRAY_TASK_ID 

~/Rscript_test.R 看起来像:

#!/usr/bin/env Rscript
taskid = commandArgs(trailingOnly=TRUE)
# taskid <- Sys.getenv('SLURM_ARRAY_TASK_ID')
taskid <- as.data.frame(taskid)
# print task number
print(paste0("the number processed was... ", taskid))
write.table(taskid, paste0("~/test/",taskid,".out"),quote=FALSE, row.names=FALSE, col.names=FALSE)

在我提交我的工作( sbatch bash_test.sh )之后,看起来 R 并没有真正看到SLURM_ARRAY_TASK_ID 该脚本正在生成 10 个文件(1、2、...、10 - 只是数字 - 可能对应于任务 ID),但它没有写入扩展名为“.out”的文件:脚本写了一个空的“整数( 0).out”文件。

我想要的是用 10 个文件,1.out,2.out,...,10.out 填充文件夹~/test/ ,并且每个文件必须包含里面的任务 ID(只是数字 1、2 , ..., 或 10)。

PS:请注意,我也尝试过使用Sys.getenv() ,但我认为我无法正确设置。 该选项生成 10 个文件和一个 1.out 文件,其中包含数字 10。

PS2:这是 slurm 19.05.5。 我在 conda 环境中运行 R。

您应该避免使用“R CMD BATCH”。 它不像大多数函数那样处理 arguments。 “Rscript”一直是推荐的选项。 通过调用“R CMD BATCH”,您基本上忽略了脚本的“#./usr/bin/env Rscript”部分。

所以将你的脚本文件更改为

#!/bin/bash -l
#SBATCH --time=00:01:00
#SBATCH --array=1-10
conda activate R
cd ~/test 
Rscript ~/Rscript_test.R $SLURM_ARRAY_TASK_ID 

然后在你的脚本中小心你没有使用相同的变量作为字符串和data.frame。 例如,您不能轻松地将 data.frame 粘贴到文件路径中。 所以

taskid <- commandArgs(trailingOnly=TRUE)
# taskid <- Sys.getenv('SLURM_ARRAY_TASK_ID')  # This should also work

print(paste0("the number processed was... ", taskid))

outdata <- as.data.frame(taskid)
outfile <- paste0("~/test/", taskid, ".out")

write.table(outdata, outfile, quote=FALSE, row.names=FALSE, col.names=FALSE)

由于 R CMD BATCH 的用法是创建了仅包含数组编号的额外文件

R CMD BATCH [options] infile [outfile]

因此,您在命令行传递的$SLURM_ARRAY_TASK_ID值被视为输出文件名。 相反,该值需要作为选项传递。 但同样,最好使用具有更多标准参数约定的 Rscript。

暂无
暂无

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

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