Как запустить n задач с одним GPU в каждой?

У меня есть большой кластер вычислительных узлов, в каждом узле по 6 графических процессоров. И я хочу начать, скажем, со 100 работниками, каждый из которых будет иметь доступ только к одному графическому процессору.

То, что я делаю сейчас, выглядит так:

sbatch --gres=gpu:6 --gpus-per-task=1 --ntasks='100' main.sh

И внутри main.sh:

srun --gpus-per-task=1 --gres=gpu:1 -n 100 worker.sh

Таким образом, я запускаю 100 воркеров (полностью используя около 17 узлов). Но у меня проблема: CUDA_VISIBLE_DEVICES не установлен должным образом.

sbatch --gres=gpu:6 --gpus-per-task=1 --ntasks='100' main.sh
# CUDA_VISIBLE_DEVICES in main.sh: 0,1,2,3,4,5 (that's fine)
srun --gpus-per-task=1 --gres=gpu:1 -n 100 worker.sh
# CUDA_VISIBLE_DEVICES in worker.sh: 0,1,2,3,4,5 (this is my problem: how to assign exactly 1 GPU to each worker and to that worker alone?)

С моей стороны может быть неправильное понимание того, как на самом деле работает Slurm, поскольку я новичок в программировании таких высокопроизводительных систем. Но есть ли какие-нибудь подсказки, как достичь того, чего я хочу достичь? (каждому воркеру назначен ровно 1 GPU и только он)

Мы используем SLURM 20.02.2.


person JohnnySmithensen    schedule 07.01.2021    source источник


Ответы (1)


Я думаю, что вам здесь не хватает, так это того, что вы должны также явно указать количество узлов: например, вы можете иметь NODES = 17 x 6 графических процессоров на NODE = 102 задачи (если вам нужно только 100 задач, это означает, что последний узел может быть под используется только с 4 задачами)

#SBATCH --ntasks=100
#SBATCH --gres=gpu:6
#SBATCH --nodes=17
#SBATCH --ntasks-per-node=6
#SBATCH --cpus-per-task=1   (depends on the available cores per node)

srun -l main.py

person user42061    schedule 09.02.2021