相同脚本的 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
提交。
我的问题和
如果我有一个将两个字符串作为参数的脚本 (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
提交。