【发布时间】: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