关于运行4个并行作业的替代方法的问题

时间:2017-09-29 17:04:27

标签: slurm

以下是三个不同的sbatch脚本,可以产生大致相似的结果。

(我只显示脚本不同的部分; ##前缀表示通过将脚本提交到sbatch获得的输出。)

脚本0

#SBATCH -n 4


srun -l hostname -s


## ==> slurm-7613732.out <==
## 0: node-73
## 1: node-73
## 2: node-73
## 3: node-73

脚本1

#SBATCH -n 1
#SBATCH -a 1-4

srun hostname -s


## ==> slurm-7613733_1.out <==
## node-72
## 
## ==> slurm-7613733_2.out <==
## node-73
## 
## ==> slurm-7613733_3.out <==
## node-72
## 
## ==> slurm-7613733_4.out <==
## node-73

脚本2

#SBATCH -N 4


srun -l -n 4 hostname -s

## ==> slurm-7613738.out <==
## 0: node-74
## 2: node-76
## 1: node-75
## 3: node-77

问:为什么会选择其中一种方式而不是其他方式?

(我看到脚本0产生的作业都在同一个节点上运行,但我不知道这是不是巧合。)

此外,脚本2的以下变体(唯一的区别是-N 2而不是-N 4)失败:

脚本3

#SBATCH -N 2


srun -l -n 4 hostname -s


## ==> slurm-7614825.out <==
## srun: error: Unable to create job step: More processors requested than permitted

同样适用于脚本2的以下变体(此脚本3与脚本3之间的唯一区别在于此处srun也具有标记-c 2):

脚本4

#SBATCH -N 2


srun -l -n 4 -c 2 hostname -s


## ==> slurm-7614827.out <==
## srun: error: Unable to create job step: More processors requested than permitted

Qs:是由于错误的语法,错误的语义或特定于站点的配置而导致脚本3和脚本4出现的错误? IOW,这些脚本是否存在固有的错误(这会导致它们在SLURM的任何实例下失败),或者只是由于违反SLURM的特定实例所施加的限制而导致的错误我正在提交作业?如果是后者,我怎样才能找出导致错误的配置呢?

1 个答案:

答案 0 :(得分:1)

  问:为什么选择其中一种方法而不是其他方法呢?

脚本0 :您要求将4个任务同时分配给单个作业,而没有关于如何将这些任务分配给节点的其他规范。典型用途:MPI program

脚本1 :您要求4个作业,每个作业有1个任务。这些工作将彼此独立安排。典型用途:Embarrassingly parallel个工作。

脚本2 :您请求4个节点,每个节点有一个任务。它类似于脚本0,除了您请求将任务分配给四个不同的节点。典型用途:例如,在本地磁盘上有很多IO的MPI程序。

所有作业都分配了相同的第一个节点的事实是由于Slurm总是以相同的顺序分配节点,并且您可能一个接一个地运行所有测试,因此另一个开始使用前一个刚刚解放了。

脚本3 :您请求两个节点,每个节点隐式地执行1个任务,因此您将分配两个任务,但之后您尝试使用srun执行4个任务。你应该把它改成

#SBATCH -N 2
#SBATCH --tasks-per-node 2

srun -l -n 4 hostname -s

每个节点请求两个任务,或

#SBATCH -N 2
#SBATCH -n 4

srun -l -n 4 hostname -s

请求四个任务,对跨节点的任务分配没有额外限制。

脚本4 :您请求两个节点,每个节点隐式地执行1个任务,并且每个任务也隐式地请求一个CPU,因此您将分配两个CPU,但之后您尝试使用4个srun的任务,每个都有2个CPUS,总共8个。你应该把它改成

#SBATCH -N 2
#SBATCH --tasks-per-node 2
#SBATCH --cpus-per-task 2    

srun -l -n 4 -c 2 hostname -s

,或者

#SBATCH -N 2
#SBATCH -n 4
#SBATCH --cpus-per-task 2    

srun -l -n 4 -c 2 hostname -s

底线:在提交脚本中,您使用#SBATCH指令请求资源,并且您不能使用比后续srun调用更多的资源。