1

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

$ myScript <filename>

用于存储在filenames.txt.

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

我目前的解决方案是触发很多sbatch脚本,每个脚本都有一个指定的<filename>. 但是,这种方式squeue会显示我的很多工作,我担心这会被其他用户皱眉。

4

1 回答 1

3

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

#! /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。它将创建一个作业数组,文件中每行一个作业,myScript在 line 写入的文件上运行SLURM_ARRAY_TASK_ID。您只需要替换为例如<number of lines in filenames.txt>给出的文件中的实际行数wc -l filenames.txt

作业数组在 Slurmsqueue命令的输出中以压缩形式显示,所有挂起的作业仅显示为一行。您还可以限制同时运行的作业的数量

--array=1-16%4

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

于 2015-02-16T13:15:27.330 回答