如何知道使用SLURM分配了哪个GPU作业?

如何知道使用SLURM分配了哪个GPU作业?,slurm,Slurm,我可以在slurm上运行作业,例如,srun--gpus=2,它将CUDA\u VISIBLE\u设备设置为分配的GPU。然而,我知道没有这样的方法来检查哪个GPU分配了一个特定的作业。如果我运行scoontrolshowjob它将显示类似TresPerJob=gpu:2的内容,但它不包含实际分配的gpu 我在哪里可以找到这些信息?换句话说,我如何查找分配了哪个GPU作业n?当执行nvidia smi命令时,您会得到如下结果: “GPU”列是GPU的ID,通常与系统中的设备相匹配(ls/dev

我可以在slurm上运行作业,例如,
srun--gpus=2
,它将
CUDA\u VISIBLE\u设备设置为分配的GPU。然而,我知道没有这样的方法来检查哪个GPU分配了一个特定的作业。如果我运行
scoontrolshowjob
它将显示类似
TresPerJob=gpu:2的内容,但它不包含实际分配的gpu


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

当执行
nvidia smi
命令时,您会得到如下结果:

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

0,1,2


这意味着该作业已被分配了ID为0、1和2的GPU。

如果您只是在寻找slurm设置的CUDA\u可见设备,我建议使用
cat/proc/12345/environ
,其中的数字是启动的slurm的PID


但是,这可能会被类似于
srun--export=ALL bash-i
的东西覆盖,因此在对抗性案例中,您不能依赖它。

是的,但可能有人过度编写了他们的
CUDA\u VISIBLE\u设备
,并且正在使用SLURM未分配的GPU设备<代码>nvidia smi
不会公开此内容。是的,这是一个合理的方案。然而,您的问题是另一种方式。如何获取特定作业的流程id?我发现我可以使用
sstat-I 9999999
(尽管,使用真实的作业编号)来获取此id。我编写了一个脚本,它就是这样做的:这是否回答了您的问题?