我已在 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/