如何解决如何使用 Slurm/Sbatch 提交/运行多个并行作业?
我正在尝试向 Slurm 服务器提交大量作业(数百个),并希望避免为我想要运行的每个作业提交一个新的 shell 脚本。提交的代码是一个 Python 脚本,它在 shell 脚本中接受两个输入变量,而这些变量是作业之间唯一改变的东西。适用于单个作业的简短 shell 脚本的示例是:
#!/bin/bash
#SBATCH -n 1
#SBATCH -t 01:00:00
srun python retrieve.py --start=0 --end=10
我想要的是使用相同的python脚本提交大量作业,并且只更改作业之间的“开始”和“结束”变量。我读了一些关于增加所需内核数量('-n')并在每个 srun 命令后写一个 & 符号的内容,但到目前为止我一直无法让它工作。
如果有人知道快速完成此操作的方法,我将非常感谢您的帮助!
解决方法
要从您当前的解决方案开始构建,您可以转而使用两个 CPU 而不是一个:
#!/bin/bash
#SBATCH -n 2
#SBATCH -t 01:00:00
srun -n1 --exclusive python retrieve.py --start=0 --end=10 &
srun -n1 --exclusive python retrieve.py --start=10 --end=20 &
wait
(您可能需要根据边界是包含的还是不包含的来调整 --end
)
上述脚本请求 2 个 CPU 并创建两个任务,使用不同的参数运行 Python 脚本。 --exclusive
部分对于 20.11 之前的 Slurm 版本是必需的(来自内存)。它与请求整个节点的 sbatch
的 eponym 选项无关。
&符号 (&
) 允许两个任务并行运行,wait
命令用于确保脚本不会在任务之前终止,否则 Slurm 只会杀死它们。>
您可以使用 Bash for
循环或使用 GNU Parallel 命令进行概括。
然而这不会提交多个作业,它会提交一个有多个任务的作业。
如果您要提交多个作业,则需要一个 job array。
#!/bin/bash
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --array=0-10:10
srun python retrieve.py --start=${SLURM_ARRAY_TASK_ID} --end=$((SLURM_ARRAY_TASK_ID+10))
这将提交两个独立的作业,它们将执行与之前描述的作业相同的工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。