У меня есть большой кластер вычислительных узлов, в каждом узле по 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.