例如,我有一个名为myScript
的脚本来处理一个输入文件,我有一个文件名列表。也就是说,我需要运行
$ myScript <filename>
以获取存储在filenames.txt
。
分发我在Slurm中找到的作业的唯一方法是指定-n
参数,该参数复制您的命令或批处理脚本。但请注意,我需要将变量参数传入每次运行。是否可以在Slurm中这样做?
我目前的解决方案是激活许多sbatch
个脚本,每个脚本都有一个指定的<filename>
。但是,这种方式squeue
将显示我的大量工作,我担心这会被其他用户所鄙视。
答案 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个作业。