例如,我有一个名为myScript
那个过程one输入文件,我有一个文件名列表。也就是说,我需要运行
$ myScript <filename>
对于存储在 a 中的文件名列表filenames.txt
.
分配我在 Slurm 中找到的工作的唯一方法是指定-n
参数,它会复制您的命令或批处理脚本。但请注意,我需要将一个可变参数传递到每次运行中。在 Slurm 中可以这样做吗?
我目前的解决方案是发射大量sbatch
脚本,每个都有一个指定的<filename>
。然而,这样squeue
将显示我的很多工作,但恐怕其他用户会对此不悦。
一种选择是使用作业数组。准备一个两行提交(未经测试)脚本,如下所示:
#! /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
。它将创建一个作业数组 http://www.schedmd.com/slurmdocs/job_array.html文件中每行一个作业,正在运行myScript
在行写入的文件上SLURM_ARRAY_TASK_ID
。你只需要更换<number of lines in filenames.txt>
文件中的实际行数由下式给出wc -l filenames.txt
例如。
作业数组在 Slurm 的输出中以压缩形式显示squeue
命令,所有挂起的作业仅显示为一行。您还可以限制同时运行的作业数量
--array=1-16%4
然后,Slurm 一次只允许该阵列中的 4 个作业。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)