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

SLURM sbatch job array for the same script but with different input string arguments run in parallel

我的问题和类似,不同的是我的不同参数不是数字而是字符串。

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

#!/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),怎么办?

谢谢!

您可以将参数值的列表存储在一个数组中,并使用 SLURM_ARRAY_TASK_ID 环境变量来索引该数组。

#!/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 提交。