SLURM sbatch作业数组用于相同的脚本但具有不同的输入字符串参数并行运行

时间:2017-04-26 18:34:32

标签: arrays slurm sbatch

我的问题与this one类似,区别在于我的不同参数不是数字而是字符串。

如果我有一个脚本(myscript.R),它接受两个字符串作为参数:" text-a"," text-A"。我的sbatch shell脚本是:

#!/bin/bash

#SBATCH -n 1
#SBATCH -c 12
#SBATCH -t 120:00:00
#SBATCH --partition=main
#SBATCH --export=ALL

srun ./myscript.R "text-a" "text-A"

现在我有几个不同的输入字符串,我想与之一起运行:

first <- c("text-a","text-b","text-c","text-d")
second <- c("text-A","text-B","text-C","text-D")

我希望运行带有文本组合的myscript.R,例如:

srun ./myscript.R "text-a" "text-A"
srun ./myscript.R "text-b" "text-B"
srun ./myscript.R "text-c" "text-C"
srun ./myscript.R "text-d" "text-D"

但如果我把它们放在同一个shell脚本中,它们会按顺序运行。我只知道当参数是索引时我可以使用#SBATCH -a 0-10。如果我想同时提交四个脚本,并且每个脚本都具有完全相同的设置(特别是每个脚本需要分配-c 12),我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在数组中存储de参数值列表,并使用SLURM_ARRAY_TASK_ID env变量来索引该数组。

#!/bin/bash

#SBATCH -n 1
#SBATCH -c 12
#SBATCH -t 120:00:00
#SBATCH --partition=main
#SBATCH --export=ALL
#SBATCH --array=0-3

A=(text-{a..d}) # This is equivalent to A=(text-a text-b ... text-d)
B=(text-{A..D})

srun ./myscript.R "${A[$SLURM_ARRAY_TASK_ID]}" "${B[$SLURM_ARRAY_TASK_ID]}"

,只需使用sbatch提交。