Система управления заданиями на вычислительных кластерах

Работа с диспетчерской системой

Запуск исполнимой программы выполняется специальной командой qsub, c помощью запускающего скрипта (командного файла), в котором указываются требуемые задаче ресурсы (архитектура узлов, число процессоров, время решения) и команда запуска программы.

qsub -q <ARCH> <script_name>

где <ARCH> - имя очереди, в которую ставится задание (возможные значения TP, IBMX, WSD)

<script_name> - имя запускающего скрипта, который может быть создан любым текстовым редактором.

На самом деле команда qsub имеет множество опций, но практически все из них могут быть помещены внутрь запускающего скрипта. В том числе и опция -q.

Тогда команда запуска еще более упрощается:

qsub <script_name>

В простейшем случае для запуска однопроцессорной программы на кластере WSD нужно сформировать файл (например с именем wsd1) следующего содержания:

#!/bin/sh
#PBS -l nodes=1:WSD
#PBS -q WSD
cd $PBS_O_WORKDIR
./progname

В данном случае будет сформирована однопроцессорная задача для выполнения на кластере WSD программы с именем progname и с заказом времени по умолчанию 1 час. Конструкции #PBS распознаются командой qsub и устанавливают лимиты для задачи. Командой cd указывается путь к исполнимой программе. В данном случае подразумевается что запуск задания производится из рабочего каталога, в котором находится пользователь. Тогда запуск программы progname должен быть произведен командой:

qsub wsd1

Простая многонитевая программа запускается на одном узле и ее запуск ни чем не отличается от запуска обычной однопроцессорной программы ни в плане запускающего скрипта, ни в плане команды запуска. Разумеется, многонитевые программы имеет смысл запускать на кластерах, имеющих многоядерные процессоры (TP, IBMX, WSD).

qsub <script_name>

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

#!/bin/sh
#PBS -l nodes=1:WSD
#PBS -q WSD
#PBS -v OMP_NUM_THREADS=2
cd $PBS_O_WORKDIR
./progname

В данном случае будет порождено 2 нити, которые задействуют 2 ядра В этих скриптах предельное время решения устанавливается по умолчанию и для кластеров ЦКП оно равно одному часу. Для заданий требующих для своего решения большего времени нужно указывать время выполнения задания:

#!/bin/sh
#PBS -l walltime=300:20:00
#PBS -l nodes=1:WSD
#PBS -q WSD
#PBS -v OMP_NUM_THREADS=2
cd $PBS_O_WORKDIR
./progname

Здесь для решения задачи заказано 300 часов и 20 мин. По истечении заказанного времени задача будет принудительно завершена. Предельный лимит времени установлен равным 336 часам (две недели). Он может быть изменен администратором. Или изменен даже для уже выполняющегося задания.

Для запуска параллельной MPI-программы на 4-х узлах кластера IBMX используется тот же самый формат команды, но содержимое скрипта должно быть другим (скрипт ib4)

#!/bin/sh
#PBS -l walltime=30:00:00
#PBS -l nodes=4:IBMX
#PBS -q IBMX
cd $PBS_O_WORKDIR
mpirun -np 4 progname

Здесь заказано время счета 30 часов на 4-х узлах кластера IBMX. Запуск выполняется командой:

qsub ib4

Наконец приведем пример скрипта для запуска гибридных программ:

#!/bin/sh
#PBS -l walltime=30:00:00
#PBS -l nodes=4:IBMX
#PBS -q IBMX
cd $PBS_O_WORKDIR
mpirun -np 4 progname

В данном случае, если программа с именем progname распараллелена с использованием технологии MPI по узлам и с использованием технологии OpenMP по ядрам внутри узла, то на каждом из 4-х узлов будет запущен один многонитевый процесс (по количеству ядер в узле). Такой режим работы программы является наиболее естественным для кластеров с многоядерными процессорами. Если требуется ограничиться одной нитью на каждом узле, то следует добавить строку:

#PBS -v OMP_NUM_THREADS=1

К сожалению, такая конструкция работает только при использовании OpenMPI. При использовании MVAPICH (основная коммуникационная библиотека по умолчанию) значения переменных не передаются на удаленные узлы и эта инструкция сработает только на первом узле из выделенных системой. В этом случае регулировать количество нитей можно только задавая переменную OMP_NUM_THREADS в конфигурационном файле пользователя .bashrc:

export OMP_NUM_THREADS=1

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

Результат работы программы

Результат работы программы будет записан в файл по окончании выполнения программы и помещен в тот каталог, из которого было запущено задание. Имя выходного файла формируется автоматически следующим образом:

<имя скрипта>.o<номер задания> a в файл
<имя скрипта>.e<номер задания> будет записываться стандартный канал диагностики (ошибок).

Имя выходного файла можно изменить с помощью специальной опции команды qsub.

Если требуется просмотр результатов по ходу выполнения задания, то можно использовать механизм перенаправления вывода в команде запуска программы. Причем, для того, чтобы выходной файл каждого задания имел уникальное имя можно использовать внутренние переменные PBS.

Пример:

#!/bin/sh
#PBS -l walltime=30:00:00
#PBS -l nodes=4:IBMX
#PBS -q IBMX
cd $PBS_O_WORKDIR
mpirun -np 4 progname > $PBS_JOBID

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

cat имя_файла,

less имя_файла,

либо интерактивно по мере заполнения файла:

tail -f имя_файла.

Замечания:

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

Назад    Вперед