【问题标题】:GPU allocation within a SBATCHSBATCH 中的 GPU 分配
【发布时间】:2019-07-11 14:32:04
【问题描述】:

我可以访问一个大型 GPU 集群(20 多个节点,每个节点 8 个 GPU),我想在一个批次中在 n GPU(每个 GPU 1 个,n > 8)上多次启动任务无需使用 --exclusive 标志预订完整节点。

我设法预先分配了资源(见下文),但我在工作中多次启动任务时非常吃力。具体来说,我的日志没有显示 CUDA_VISIBLE_DEVICES 变量的值。

我知道如何在带有--nodes--gres 标志的完全预订节点上执行此操作。在这种情况下,我为每个srun 使用--nodes=1 --gres=gpu:1。但是,此解决方案不适用于当前问题,工作会无限期挂起。

在下面的 MWE 中,我有一份工作需要 16 个 GPU(--ntasks--gpus-per-task)。这些作业由使用srun 命令启动的 28 个任务组成。

#!/usr/bin/env bash
#SBATCH --job-name=somename
#SBATCH --partition=gpu
#SBATCH --nodes=1-10
#SBATCH --ntasks=16
#SBATCH --gpus-per-task=1

for i in {1..28}
do
        srun echo $(hostname) $CUDA_VISIBLE_DEVICES &
done

wait

此脚本的输出应如下所示:

nodeA 1
nodeR 2
...

然而,这就是我得到的:

nodeA
nodeR
...

【问题讨论】:

  • 那是哪个版本的 Slurm?
  • 这是 slurm 18.08.3

标签: slurm


【解决方案1】:

当你写作时

srun echo $(hostname) $CUDA_VISIBLE_DEVICES &

$CUDA_VISIBLE_DEVICES 变量的扩展将在分配的主节点(运行脚本的位置)上执行,而不是在srun 的目标节点上执行。你应该转义$

srun echo $(hostname) \$CUDA_VISIBLE_DEVICES &

顺便说一句,--gpus-per-task= 出现在 19.05 版本的 sbatch 手册页中。当您将它与较早的选项一起使用时,我不确定它是如何进行的。

【讨论】:

  • 我认为是因为我的 slurm 版本错误。
猜你喜欢
  • 2021-08-27
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2018-10-17
  • 2019-02-01
  • 2012-07-03
相关资源
最近更新 更多