Запуск задания на нескольких узлах грести
-
28-09-2019 - |
Вопрос
У меня есть доступ к 128-ядрому кластеру, на котором я хотел бы запустить параллелизованную работу. Кластер использует Sun Gridengine, и моя программа написана для запуска с использованием Parallel Python, Numpy, Scipy на Python 2.5.8. Запуск задания на одном узле (4 ядра) дает улучшение ~ 3,5х в течение одного ядра. Теперь я хотел бы взять это на следующий уровень и разделить работу на ~ 4 узла. Мой qsub
Сценарий выглядит что-то подобное:
#!/bin/bash
# The name of the job, can be whatever makes sense to you
#$ -N jobname
# The job should be placed into the queue 'all.q'.
#$ -q all.q
# Redirect output stream to this file.
#$ -o jobname_output.dat
# Redirect error stream to this file.
#$ -e jobname_error.dat
# The batchsystem should use the current directory as working directory.
# Both files will be placed in the current
# directory. The batchsystem assumes to find the executable in this directory.
#$ -cwd
# request Bourne shell as shell for job.
#$ -S /bin/sh
# print date and time
date
# spython is the server's version of Python 2.5. Using python instead of spython causes the program to run in python 2.3
spython programname.py
# print date and time again
date
У кого-нибудь есть идеи о том, как это сделать?
Решение
Да, вам нужно включить опцию сетки двигателя -np 16
Либо в вашем сценарии, как это:
# Use 16 processors
#$ -np 16
или в командной строке, когда вы отправляете скрипт. Или, для более постоянных договоренностей, используйте .sge_request
файл.
На всех установках GE я когда-либо использовал, это даст вам 16 процессоров (или процессорных ядер в эти дни) в течение нескольких узлов по мере необходимости, поэтому, если ваши узлы имеют 4 ядра, вы получите 4 узла, если у них есть 8 2 и скоро. Чтобы разместить работу, скажем, 2 ядра на 8 узлах (которые вы можете сделать, если вам нужно много памяти для каждого процесса) - это немного сложнее, и вы должны проконсультироваться с вашей поддержкой.