如何在多个 GPU 节点上获取分配给 SLURM 作业的 GPU ID?

How to get the ID of GPU allocated to a SLURM job on a multiple GPUs node?

当我使用 --gres=gpu:1 选项将 SLURM 作业提交到具有两个 GPU 的节点时,如何获取分配给该作业的 GPU 的 ID?是否有用于此目的的环境变量?我使用的 GPU 都是 nvidia GPU。 谢谢。

您可以通过环境变量CUDA_VISIBLE_DEVICES获取GPU ID。此变量是分配给作业的 GPU ID 的逗号分隔列表。

Slurm 将此信息存储在环境变量中,SLURM_JOB_GPUS

跟踪此类信息的一种方法是在 运行 执行作业时记录所有 SLURM 相关变量,例如(在 Kaldi's slurm.pl 之后,这是包装 Slurm 作业的好脚本)通过在 运行 by sbatch:

脚本中包含以下命令
set | grep SLURM | while read line; do echo "# $line"; done

您可以检查给定节点的环境变量 SLURM_STEP_GPUSSLURM_JOB_GPUS

echo ${SLURM_STEP_GPUS:-$SLURM_JOB_GPUS}

注意CUDA_VISIBLE_DEVICES可能不对应真实值()。

此外,请注意这也适用于非 Nvidia GPU。