繁体   English   中英

如何使用 Slurm/Sbatch 提交/运行多个并行作业?

[英]How to submit/run multiple parallel jobs with 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 脚本和不同的 arguments。 --exclusive部分对于 20.11 之前的 Slurm 版本是必需的(来自内存)。 它与请求整个节点的sbatch的同名选项无关。

与号 ( & ) 允许两个任务并行运行,并且wait命令用于确保脚本不会在任务之前终止,否则 Slurm 只会杀死它们。

您可以使用 Bash for -loop 或使用GNU Parallel命令进行概括。

但是,这不会提交多个作业,它将提交一个具有多个任务的作业。

如果要提交多个作业,则需要一个作业数组

#!/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))

这将提交两个独立的作业,它们将执行与之前描述的作业相同的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM