Лучшая практика масштабирования рабочих ресурсов (среды) на кластерных вычислениях?

Я новичок в программировании на кластере, и мне очень трудно ориентироваться. Я на SGE с кластером bash и использую OpenMPI.

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

#$ -pe openmpi $process_num

Здесь я выделяю process_num процессов для среды моей работы. Я хочу, чтобы моя среда изменилась, например: я хочу попробовать 1, 2 и 3 для process_num, другими словами, у меня есть 3 варианта. Я думал отправить задание sh, содержащее такой простой цикл, как:

# ... other environment variable definitions
for process_num in 1 2 3
do
   # ... some other environment variable definitions
   #$ -pe openmpi $process_num
   mpirun ./my_prog -npernode 1
done

Другими словами, одно «упакованное» задание будет выполнять все мои варианты и учитывать распределение/масштабирование ресурсов. Я думал, что таким образом я смогу выделить разные ресурсы для всех моих трех вариантов работы с каждой итерацией. Я хочу спросить, возможно ли это сделать, т.е. может ли рабочая среда масштабироваться описанным способом, или мне нужно будет отправить 3 отдельных задания?

Конечно, если ответ да — отправлять отдельные задания, то что произойдет, когда у меня будет около 50 таких конфигураций, которые я хочу попробовать? Каков наилучший подход к отправке 50 (или большого количества) отдельных заданий?

К сожалению, поскольку кластер является общим ресурсом, я не могу экспериментировать так, как хотел бы.


person Zeruno    schedule 04.01.2018    source источник
comment
Кстати, директива #$ -pe openmpi $process_num обрабатывается qsub во время отправки задания, в то время как bash, который «заполняет» process_num, будет выполняться на вычислительном узле. То есть qsub не имеет никакого смысла в буквальной строке $process_num.   -  person liborm    schedule 05.01.2018
comment
Это также предлагает представить ряд рабочих мест. Спасибо.   -  person Zeruno    schedule 05.01.2018
comment
Пожалуйста, не забудьте принять ответ, если он помог вашему делу.   -  person liborm    schedule 05.01.2018


Ответы (1)


Работа «определяется» ресурсами, которые она использует. Если вы хотите протестировать три конфигурации ресурсов, вам необходимо отправить три задания.

Другой вариант — выделить максимальную конфигурацию и запустить три задания последовательно. Это то, что предлагает сценарий в вопросе. Но вы будете тратить ресурсы кластера, выделяя, но не используя ЦП.

Лучше всего использовать все ресурсы, которые вы выделяете, в максимально возможной степени.

Можно легко отправить несколько заданий с помощью скрипта на внешнем узле. Я считаю, что SGE использует qsub, поэтому это будет что-то вроде parallel "qsub -pe openmpi {} -v CPUS={} -l n_cpus={} test-job.sh" ::: 1 2 3. Точный синтаксис qsub во многом зависит от вашей среды. В test-job.sh вы должны использовать $CPUS для правильного запуска вашего задания mpi (не уверен, что это необходимо, возможно, будет достаточно правильно инициализированной параллельной среды SGE -pe). Я использую parallel вместо цикла bash только из-за более красивого и компактного синтаксиса, это не имеет значения.

person liborm    schedule 05.01.2018
comment
Не могли бы вы подробнее рассказать о том, как вы будете отправлять несколько заданий через скрипт, и включить изменяющиеся переменные среды? - person Zeruno; 05.01.2018