【问题标题】:How do I know which GPUs a job was allocated using SLURM?我如何知道使用 SLURM 分配了哪些 GPU 作业?
【发布时间】:2019-09-09 20:58:24
【问题描述】:

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

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

【问题讨论】:

标签: slurm


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

“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 不会暴露这个。
  • 是的,这是一个合理的场景。不过,你的问题是另一种方式。
  • 如何获取特定作业的进程 ID?
  • 我发现我可以用sstat -i 9999999 得到这个(虽然,有一个真实的工作编号)。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多