如何通过SLURM查看作业所分配的GPU?

6
我可以通过例如srun --gpus=2在slurm上运行作业,并设置CUDA_VISIBLE_DEVICES为分配的GPU。然而,我不知道查看SLURM分配给特定作业的GPU的方法。如果我运行scontrol show job,它会显示类似于TresPerJob=gpu:2的内容,但它并不包含实际分配的GPU信息。
在哪里可以找到这些信息?换句话说,我如何查找分配给作业n的GPU是哪些?

这个回答解决了你的问题吗?如何在多GPU节点上获取分配给SLURM作业的GPU ID? - bryant1410
3个回答

10

scontrol show job -d 可以完成此操作。 -d 标志向输出添加额外信息,其中之一是类似于 GRES=gpu(IDX:0-2) 的字段。


2

如果你只是想知道 slurm 设置了 CUDA_VISIBLE_DEVICES 为何值,建议使用 cat /proc/12345/environ 命令查询,其中的数字是 slurm 启动的 PID。

然而,这可能会被类似 srun --export=ALL bash -i 的命令覆盖,所以在对抗性情况下不能依赖它。


我写了一个脚本,可以完成这个任务:https://gist.github.com/schmmd/1aa445be858ce560d48e13ef2041fea1 - schmmd

2
当您执行nvidia-smi命令时,您会得到类似于这样的内容:

enter image description here

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

0,1,2

表示该作业已被分配到 ID 为 0、1 和 2 的 GPU。


是的,但有可能有人覆盖了他们的 CUDA_VISIBLE_DEVICES 并使用了 SLURM 没有分配的 GPU 设备。nvidia-smi 不会暴露这一点。 - schmmd
是的,这是一个可行的情况。然而,你的问题另有所指。 - Bub Espinja
如何获取特定作业的进程 ID? - schmmd
我发现可以使用sstat -i 9999999来获取这个(当然,需要一个真实的作业编号)。 - schmmd
你不能在Slurm上直接运行nvidia-smi,你需要进入GPU节点终端。 - Prakhar Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接