Как получить несколько графических процессоров одного типа в slurm?

#gpu #cluster-computing #slurm

#графический процессор #кластерные вычисления #slurm

Вопрос:

Как я могу создать задание с несколькими графическими процессорами того же типа, но не с конкретным типом напрямую? В моем эксперименте есть ограничение, что все графические процессоры имеют один и тот же тип, но этот тип может быть любым, какой мы захотим.

В настоящее время я могу только создать эксперимент с несколькими графическими процессорами, точно указав, какой тип я хочу:

 --gres=gpu:gres_type:amount
 

Если я не укажу gres_type , то иногда я получаю смешанные пакеты графических процессоров (скажем, 2x titan V и 2x titan X).

Ответ №1:

Если вам повезло, что кластер согласован с типами узлов, на которых размещены графические процессоры, и что features узлы указаны правильно и позволяют различать узлы, на которых размещены разные типы графических процессоров, вы можете использовать этот --constraint параметр.

Ради аргумента давайте предположим, что узлы, на которых размещены titanV процессоры, имеют haswell процессоры, а те, на которых размещены titanX skylake процессоры, и что они определены как функции. Затем вы можете запросить

 --gres=gpu:2
--constraint=[haswell|skylake]
 

Если вышесказанное не относится к вашему варианту использования, вы можете отправить два задания и сохранить только то, которое запускается раньше. Для этого дайте вашим заданиям одинаковые имена и используйте singleton зависимость.

Напишите сценарий отправки, подобный этому

 #!/bin/bash
#SBATCH --dependency=singleton 
#SBATCH --job-name=gpujob
# Other options

scancel --state=PENDING --jobname=gpujob

# etc.
 

и отправьте его дважды с

 $ sbatch --gres=gpu:titanX:2 submit.sh
$ sbatch --gres=gpu:titanV:2 submit.sh
 

Каждому заданию будет назначен только один тип графического процессора, и первое, которое запускается, отменит другое. Этот подход может быть расширен с использованием более двух типов графических процессоров.

Комментарии:

1. К сожалению, в кластере, который я использую, нет возможности выполнять scancel задания с запущенного узла.