繁体   English   中英

正确使用 gpus-per-task 通过 SLURM 分配不同的 GPU

[英]Correct usage of gpus-per-task for allocation of distinct GPUs via SLURM

我正在使用cons_tres SLURM 插件,其中引入了--gpus-per-task选项等。 如果我的理解是正确的,下面的脚本应该在同一个节点上分配两个不同的GPU:

#!/bin/bash
#SBATCH --ntasks=2
#SBATCH --tasks-per-node=2
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:2
#SBATCH --gpus-per-task=1

srun --ntasks=2 --gres=gpu:1 nvidia-smi -L

但是,它没有,因为 output 是

GPU 0: Tesla V100-SXM3-32GB (UUID: GPU-c55b3036-d54d-a885-7c6c-4238840c836e)
GPU 0: Tesla V100-SXM3-32GB (UUID: GPU-c55b3036-d54d-a885-7c6c-4238840c836e)

是什么赋予了?

相关: https://stackoverflow.com/a/55029430/10260561

编辑

或者, srun命令可以是

srun --ntasks=1 --gres=gpu:1 nvidia-smi -L &
srun --ntasks=1 --gres=gpu:1 nvidia-smi -L &
wait

即,并行运行两个任务,每个任务在 1 个 GPU 上。 这也不起作用,并给出

GPU 0: Tesla V100-SXM3-32GB (UUID: GPU-c55b3036-d54d-a885-7c6c-4238840c836e)
srun: Job 627 step creation temporarily disabled, retrying
srun: Step created for job 627
GPU 0: Tesla V100-SXM3-32GB (UUID: GPU-c55b3036-d54d-a885-7c6c-4238840c836e)

省略额外的参数并调用srun nvidia-smi -L会导致

GPU 0: Tesla V100-SXM3-32GB (UUID: GPU-c55b3036-d54d-a885-7c6c-4238840c836e)
GPU 1: Tesla V100-SXM3-32GB (UUID: GPU-ce697126-4112-a696-ff6b-1b072cdf03a2)
GPU 0: Tesla V100-SXM3-32GB (UUID: GPU-c55b3036-d54d-a885-7c6c-4238840c836e)
GPU 1: Tesla V100-SXM3-32GB (UUID: GPU-ce697126-4112-a696-ff6b-1b072cdf03a2)

即,正在运行 4 个任务?

我需要在不同的 GPU 上并行运行两个任务。

所有#SBATCH在一个节点上为您分配两个任务和两个 GPU。 到目前为止,一切都很好。 但是你告诉srun使用两个可用的任务并且只使用一个 GPU。 这就是为什么这两个任务有一个共享的 GPU。

为了解决这个问题,您可以在调用 srun 时省略额外的参数。 默认情况下,它将使用所有可用的任务和 GPU。

这做我想要的

srun --gres=gpu:1 bash -c 'CUDA_VISIBLE_DEVICES=$SLURM_PROCID env' | grep CUDA_VISIBLE

CUDA_VISIBLE_DEVICES=1
CUDA_VISIBLE_DEVICES=0

但不使用--gpus-per-task

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM