【问题标题】:Slurm can't run more than one sbatch taskSlurm 不能运行多个 sbatch 任务
【发布时间】:2019-07-07 23:13:05
【问题描述】:

我在一个 2 节点集群上安装了 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 存在一些限制?

【问题讨论】:

  • 至少不要在没有评论的情况下投票并投票关闭。我被 Slurm 困住了,需要帮助运行批处理作业。我应该如何改进帖子?
  • 也许您可以检查作业的输出。标准输出和错误输出。
  • 它甚至没有创建输出和错误文件。只是给我非常无信息的错误代码。

标签: linux slurm


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 谢谢。我没有考虑日志文件,这可能是有用的关键信息。 slurm.schedmd.com/slurm.conf.html#lbAK
  • 顺便说一句,我在快速入门的任何地方都没有看到“批处理步骤”,所以我不确定它是什么。我确实多次看到“工作步骤”。从here 开始,它说批处理步骤是“shell 脚本”(也许是它的子进程?)。它似乎确实说 sbatch 应该在其中运行。也许这是我的问题?我想我试过了,但没有任何区别。
  • 为了使用整个分配,您必须在脚本中使用 srun。因此,如果您尝试过但没有成功,那么您还有另一个问题。我想理解批处理步骤更高级一些,但基本思想是您的脚本必须使用 srun 启动作业步骤。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    @damienfrancois 的答案最接近,甚至可能是正确的。在确保 /storage 位置在所有节点上都可用后,使用sbatch 运行。最大的问题是 /storage 位置是通过 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2016-05-18
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多