linux - Slurm 无法运行多个 sbatch 任务

标签 linux slurm

我已在 2 节点集群上安装了 Slurm。两个节点都是计算节点,其中一个也是 Controller 。我能够同时成功运行多个作业的 srun 。我正在运行 GPU 作业,并已确认我可以使用 srun 在多个 GPU 上运行多个作业,最多可达系统中的 GPU 数量。

但是,当我尝试使用相同的测试文件运行 sbatch 时,它只会运行一个批处理作业,并且它仅在计算节点(也是 Controller )上运行。其他失败,sacct 摘要中的 ExitCode 为 1:0。如果我尝试强制它在不是 Controller 的计算节点上运行,它将不会运行并显示 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 中的环境变量检测该命令是否位于分配内。您可以通过使用 -n[numtasks] 等标志运行 srun 来将分配拆分为多个作业步骤。即

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

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

关于linux - Slurm 无法运行多个 sbatch 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681721/

相关文章:

slurm - 在 Slurm 担任多项工作

linux - 向在 Azure 上配置的 VM 提供附加参数

linux - 如何忽略从 AC_CHECK_HEADERS 生成的 `configure' 拾取的系统文件

java - SIGSTOP 和 SIGTSTP 会损坏 JVM 吗?

linux - 如何使用 OBIEE Agent 将 OBIEE 报告发送到 FTP 服务器?

r - 加载共享库时出错 : libicuuc. so.50

batch-processing - 在通过挂墙时间杀死之前结束批处理作业

apache-spark - 获取用于调优的节点数、代码数和可用 RAM

Slurm 和 Munge "Invalid Credential"

c - 读取Raspberry Pi上的PPM信号