Slurm不能运行多个抽签任务

时间:2019-02-14 00:59:09

标签: linux slurm

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

但是,当我尝试使用相同的测试文件运行sbatch时,它将仅运行一个批处理作业,并且仅在也是控制器的计算节点上运行。其他失败,sacct摘要中的退出代码为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有一些限制?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果在第二个节点上使用srun并在您提到的提交脚本中使用sbatch且未写入任何输出而失败,则最可能的原因是/storage不存在,或用户无法写在第二个节点上。

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

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

答案 2 :(得分:0)

@damienfrancois的答案是最接近甚至正确的。确保/ storage位置在所有节点上均可用后,事情将以sbatch运行。最大的问题是/存储位置是通过NFS共享的,但对于计算节点是只读的。必须在/ etc / exports中将其更改为更像:

/storage *(rw,sync,no_root_squash)

在旋转之前...

我拥有的有效工作文件也有所不同。这是当前的.job文件:

#!/bin/bash
#SBATCH -N 1      # nodes requested
#SBATCH --job-name=test
#SBATCH --output=/storage/test.out
#SBATCH --error=/storage/test.err
#SBATCH --time=2-00:00
#SBATCH --mem=36000
#SBATCH --qos=normal
#SBATCH --mail-type=ALL
#SBATCH --mail-user=$USER@nothing.com
#SBATCH --gres=gpu
srun ~/anaconda3/bin/python /storage/tf_test.py