Slurm无法运行多个sbatch任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Slurm无法运行多个sbatch任务相关的知识,希望对你有一定的参考价值。

我在一个双节点集群上安装了Slurm。两个节点都是计算节点,一个也是控制器。我能够一次成功运行多个工作的srun。我正在运行GPU作业,并且已经确认我可以通过srun在多个GPU上运行多个作业,最多可以达到系统中的GPU数量。

但是,当我尝试使用相同的测试文件运行sbatch时,它只会运行一个批处理作业,它只能在也是控制器的计算节点上运行。其他人失败了,sacct摘要中的ExitCode为1:0。如果我尝试强制它在不是控制器的计算节点上运行,它将不会运行并显示1:0退出代码。但是,只使用srun将在任何计算节点上运行。

我确保/etc/slurm/slurm.conf文件与机器的规格一致。这是我正在使用的sbatch .job文件:

#!/bin/bash
#SBATCH --job-name=tf_test1
#SBATCH --output=/storage/test.out
#SBATCH --error=/storage/test.err
#SBATCH --ntasks=2
#SBATCH --cpus-per-task=1
#SBATCH --mem-per-cpu=2000
##SBATCH --mem=10gb
#SBATCH --gres=gpu:1
~/anaconda3/bin/python /storage/tf_test.py

也许我不知道sbatch有一些限制?

答案

sbatch创建一个工作分配并启动所谓的“批处理步骤”。如果您不熟悉工作步骤,我推荐此页面:https://slurm.schedmd.com/quickstart.html

批处理步骤运行从sbatch传递给它的脚本。启动其他作业步骤的唯一方法是在批处理步骤中调用srun。在你的情况下,它会

srun ~/anaconda3/bin/python /storage/tf_test.py

这将创建一个在分配中的每个任务上运行tf_test.py的作业步骤。请注意,虽然该命令与直接运行srun时的命令相同,但它通过sbatch的环境变量检测到分配内部。您可以通过运行带有srun等标志的-n[num tasks]将分配分成多个作业步骤。即

#!/bin/bash
#SBATCH --ntasks=2
srun --ntasks=1 something.py
srun --ntasks=1 somethingelse.py

我不知道您是否遇到任何其他问题,因为您没有发布任何其他错误消息或日志。

另一答案

如果在第二个节点上使用srun并且使用sbatch和提交脚本,则提及在没有写入任何输出的情况下失败,最可能的原因是/storage在第二个节点上不存在或者不可由用户写入。

第二个节点上的slurmd日志应该是明确的。默认位置是/var/log/slurm/slurmd.log,但请检查scontrol show config| grep Log的输出以获取确切信息。

导致相同行为的另一个可能原因是用户未定义或在第二个节点上具有不同的UID(但是srun也会失败)

以上是关于Slurm无法运行多个sbatch任务的主要内容,如果未能解决你的问题,请参考以下文章

如何在节点上平均分配 slurm 任务?

HPC 集群:选择 SLURM sbatch 中的 CPU 和线程数

Slurm 作业不能为多个节点请求 GPU 资源

使用 SLURM 上的所有 CPU

SLURM `srun` vs `sbatch` 及其参数

SLURM sbatch 是不是会自动跨节点复制用户脚本?