![](/img/trans.png)
[英]Is it possible to run SLURM jobs in the background using SRUN instead of 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.