是否有可能向slurm提交一系列不同的工作?

时间:2015-02-14 01:46:45

标签: slurm

例如,我有一个名为myScript的脚本来处理一个输入文件,我有一个文件名列表。也就是说,我需要运行

$ myScript <filename>

以获取存储在filenames.txt

中的文件名列表

分发我在Slurm中找到的作业的唯一方法是指定-n参数,该参数复制您的命令或批处理脚本。但请注意,我需要将变量参数传入每次运行。是否可以在Slurm中这样做?

我目前的解决方案是激活许多sbatch个脚本,每个脚本都有一个指定的<filename>。但是,这种方式squeue将显示我的大量工作,我担心这会被其他用户所鄙视。

1 个答案:

答案 0 :(得分:1)

一种选择是使用作业数组。准备一个两行提交(未经测试)的脚本,如下所示:

#! /bin/bash
#SBATCH --array=1-<number of lines in filenames.txt>
myScript "$(tail -n+$SLURM_ARRAY_TASK_ID filenames.txt | head -n1)"

并使用sbatch mySubmissionScript.sh提交。它将创建一个job array,文件中每行一个作业,在myScript行写入的文件上运行SLURM_ARRAY_TASK_ID。您只需要将<number of lines in filenames.txt>替换为wc -l filenames.txt给出的文件中的实际行数。

作业数组在Slurm squeue命令的输出中以压缩形式显示,所有待处理作业仅显示为一行。您还可以使用

限制同时运行的作业的数量
--array=1-16%4

然后,Slurm一次只允许来自该阵列的4个作业。