我们的 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