我如何知道使用 SLURM 分配了哪些 GPU?

How do I know which GPUs a job was allocated using SLURM?

我可以 运行 slurm 上的作业,例如 srun --gpus=2,它将 CUDA_VISIBLE_DEVICES 设置为分配的 GPU。但是我知道没有这种方法可以检查哪些 GPU SLURM 分配了特定的工作。如果我 运行 scontrol show job 它会显示类似 TresPerJob=gpu:2 的内容,但它不包含分配的实际 GPU。

我在哪里可以找到这些信息?换句话说,我如何查找分配了哪个 GPU 作业 n

当你执行nvidia-smi命令时,你会得到这样的结果:

"GPU"列是GPU的ID,通常与系统中的设备(ls /dev/nvidia*)匹配。 Slurm 在 CUDA_VISIBLE_DEVICES 环境变量中使用了相同的标识。 所以,当你在这个变量中看到

0,1,2

表示该作业已经分配了ID为0、1、2的GPU。

如果您只是想知道 slurm 将 CUDA_VISIBLE_DEVICES 设置为什么,我建议使用 cat /proc/12345/environ,其中数字是启动的任何 slurm 的 PID。

然而,这可能会被 srun --export=ALL bash -i 之类的东西覆盖,因此在对抗情况下你不能依赖它。

scontrol show job -d 可以做到这一点。 -d 标志向输出添加额外信息,其中之一是像 GRES=gpu(IDX:0-2).

这样的字段