У меня есть доступ к большому кластеру графических процессоров (20+ узлов, 8 графических процессоров на узел), и я хочу запустить задачу несколько раз на n
графических процессорах (1 на графический процессор, n
> 8) в одном пакетебез резервирования полных узлов с флагом --exclusive
.
Мне удалось предварительно выделить ресурсы (см. ниже), но я очень стараюсь запустить задачу несколько раз в рамках задания.В частности, мой журнал не показывает значения для переменной CUDA_VISIBLE_DEVICES.
Я знаю, как выполнить эту операцию на полностью зарезервированных узлах с флагами --nodes
и --gres
.В этой ситуации я использую --nodes=1
--gres=gpu:1
для каждого srun
.Тем не менее, это решение не работает для настоящего вопроса, работа зависает на неопределенное время.
В MWE ниже, у меня есть работа, требующая 16 gpus (--ntasks
и --gpus-per-task
).Задания состоят из 28 задач, которые запускаются с помощью команды srun
.
#!/usr/bin/env bash
#SBATCH --job-name=somename
#SBATCH --partition=gpu
#SBATCH --nodes=1-10
#SBATCH --ntasks=16
#SBATCH --gpus-per-task=1
for i in {1..28}
do
srun echo $(hostname) $CUDA_VISIBLE_DEVICES &
done
wait
Вывод этого сценария должен выглядеть следующим образом:
nodeA 1
nodeR 2
...
Однако это то, чтоЯ получил:
nodeA
nodeR
...