在同一个 Slurm Worker 上并行运行多个作业

在同一个 Slurm Worker 上并行运行多个作业

我们的 SLURM 集群中有一些相当庞大的节点(例如 14 个核心)。我试图对其进行配置,以便可以并行运行多个批处理作业,每个作业请求例如 3 个核心。但是,我无法让它工作。

批处理作业示例:

#!/bin/bash
#
#SBATCH --job-name=job1
#SBATCH --output=job1.txt
#
#SBATCH -c 3
#SBATCH -N 1
srun sleep 300
srun echo $HOSTNAME

摘自 slurm.conf 文件:

TaskPlugin=task/cgroup
SelectType=select/cons_res
SelectTypeParameters=CR_CORE
NodeName=some-node NodeAddr=192.168.60.106 CPUs=12 State=UNKNOWN

但是,如果我运行这两个作业,我会收到以下错误:

sbatch:错误:每个节点的 CPU 数量无法满足

我发现了很多例子,其中说sbatch -n选项控制每个批处理作业的 CPU 或核心的数量,但是,这对我来说没有意义,因为文档指出:

控制为该作业创建的任务数量

如果我尝试,它只会按顺序运行作业:

         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            16  mainpart     job2  some-user PD       0:00      1 (Resources)
            15  mainpart     job1  some-user  R       4:04      1 some-node

答案1

几天来,我遇到了同样的问题,无论我将什么放入批处理文件中,SLURM 每个节点都只能运行一个作业。以下设置组合最终让我能够在单个节点上运行多个批处理。

开始之前,请确保没有正在运行的作业并删除节点。请参阅有关 service 与 systemctl 的更多信息,请参阅此答案在大多数 Linux 系统上都可以这样做。

sudo service slurmd stop
sudo service slurmctld stop

在 /etc/slurm-llnl/slurm.conf 中(位置可能不同)

...
SelectType=select/cons_res
SelectTypeParameters=CR_Core
...
NodeName=a NodeAddr=192.168.1.2 CPUs=16 Sockets=2 CoresPerSocket=4 ThreadsPerCore=2 RealMemory=12005 State=UNKNOWN

这显然特定于一个特定节点,您的节点会有所不同。但如果节点配置不正确,SLURM 可能会返回有关资源不可用的错误。要获取有关您的节点的可靠信息,请在每个节点上尝试以下操作:

sudo slurmd -C

然后使用其输出在控制器的 slurm.conf 文件中定义每个节点。设置完成后,重新启动 SLURM 并向其发送一些测试批次,以查看它们是否正确分布在各个节点上。

sudo service slurmd start
sudo service slurmctld start

相关内容