以下是三个不同的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的特定实例所施加的限制而导致的错误我正在提交作业?如果是后者,我怎样才能找出导致错误的配置呢?
答案 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
调用更多的资源。