首页 > 解决方案 > 如何编写 sbatch 来处理 slurm 中的多个作业

问题描述

我有两个可执行文件需要运行:a.outb.out.

(1) 我想a.out在两个节点上运行,每个节点都有一个a.out进程。

(2)我想b.out在两个节点上运行,(1)中的节点相同,但每个节点有两个b.out进程。

我的天真代码如下所示

#!/bin/bash
#SBATCH --nodes 2
#SBATCH --ntasks-per-node 2

srun a.out
srun b.out

但它无法处理上述需求。我该如何编写 sbatch 来实现这一目标?

如果这是一个愚蠢的问题,我深表歉意。谢谢你的时间。

标签: shellslurm

解决方案


假设我们有 3 个节点并且想要运行第一个作业 A 和作业 B。作业 A 应该在每个节点上运行 1 个进程。作业 B 应在具有 5 个进程的每个节点上运行。

因此,sbatch 文件sbatch_input.sh可以这样写:

#!/bin/bash
#SBATCH --nodes 3
#SBATCH --ntasks-per-node 5
#SBATCH -p cnall

# job A
srun --nodes 3 --ntasks=3 hostname
echo "-------------------------------"
# job B
srun --nodes 3 --ntasks-per-node=5 hostname

使用 sbatch 运行脚本

sbatch ./sbatch_input.sh

结果表明

c05b01n06
c05b01n08
c05b01n07
-------------------------------
c05b01n06
c05b01n08
c05b01n07
c05b01n06
c05b01n06
c05b01n06
c05b01n06
c05b01n08
c05b01n08
c05b01n08
c05b01n08
c05b01n07
c05b01n07
c05b01n07
c05b01n07

这里不要使用数字 2 以防误解。

  • 参考

https://slurm.schedmd.com/srun.html

术语“工作”、“任务”和“步骤”如何相互关联?


推荐阅读