Вы здесь

Команды запуска SLURM

Система SLURM позволяет с помощью команд sbatch и srun работать соответственно в пакетном и интерактивном режимах. Пакетный режим является основным в работе с кластером.

Команда sbatch для запуска программы в пакетном режиме имеет вид

sbatch [опции]  <имя скрипта> [параметры скрипта]

или

sbatch [опции] --wrap="srun <имя программы>  [параметры программы]"

Команда srun для запуска интерактивной программы имеет вид

srun [опции] <имя программы> [параметры программы]

Внимание! Библиотека OpenMPI работает только с командой sbatch и при этом перед именем программы вместо srun добавляется orterun:

sbatch [опции] --wrap="orterun <имя программы>  [параметры программы]"

Опции:

  • -n <число процессов> если число процессов (tasks) не задано, то по умолчанию n=1.

  • -t <время> при отсутствии заказа времени для решения задачи выделяется по умолчанию 30 минут. Максимальное время для счета задачи:

    • 20 часов - в будние дни (с 9 часов понедельника до 16 часов пятницы);
    • 85 часов - на выходные (с 16 часов пятницы до 9 часов понедельника плюс 20 часов), т.е. на 85 часов задача запустится, если она войдет в решение в 16 часов ближайшей пятницы, иначе будет ждать следующей; аналогично, на 84 часа есть шанс запустить до 17 часов пятницы и т.д. до 9 часов понедельника;
    • 100 часов - если к выходным добавляются праздничные дни.

    Время может быть задано в виде:

    • минуты
    • минуты:секунды
    • часы:минуты:секунды
    • дни-часы
    • дни-часы:минуты
    • дни-часы:минуты:секунды
  • -N <кол-во узлов> задает число узлов (nodes) для задачи, если пользователю это важно:

Для увеличения оперативной памяти можно воспользоваться опциями:

  • --mem-per-cpu=<MB> задаёт минимальную память в расчёте на одно ядро в мегабайтах ; если не задано, то по умолчанию 1 ГБ;
  • --mem=<MB> задаёт память на узле в мегабайтах.

эти опции взаимно исключают друг друга.

  • --gres=gpu:<кол-во GPU на одном узле> задаёт запуск программы на узлах с GPU. Если gres не задан, то количество GPU=0, т.е. GPU при счете не используются.
  • -p <раздел> или --partition=раздел` позволяет указать раздел (partition) кластера для запуска задачи.

Существует 4 основных раздела: apollo, umt_p2, all и debug, которые покрывают весь кластер и взаимно не пересекаются, т.е. содержат разные узлы (см. Кластер «Уран»). Список всех разделов выдается командой sinfo -s. Если раздел не задан пользователем явно, то по умолчанию будет выбран раздел apollo, но при отсутствии в нем нужного числа свободных процессоров будут задействованы разделы umt_p2 и all.

  • -p debug позволяет запускать задачи в специально выделенном для отладки программ разделе debug с максимальным временем счета 20 минут.

Например:

 srun -p debug mytest 

Опции -w, -x, -С позволяют более гибко регулировать список узлов, допустимых для запуска задачи (см. man sbatch), например:

  • -w tesla[5-7,15] - выделить заданию ресурсы узлов tesla5, tesla6, tesla7, tesla15, а если на них не хватит, то и другие узлы;
  • -x tesla22 - не выделять для задания ресурсы узла -x tesla22;
  • -С k40m - выделять задаче только те узлы, которые имеют ресурс с именем (Feature), указанным после -C. На кластере имеются ресурсы с именами umt, tesla, bigmem, m2090, k40m.

Информацию о том, какие ресурсы есть на конкретном узле можно получить командой вида

scontrol show node tesla22 

По умолчанию стандартный вывод пакетной задачи и стандартный поток ошибок направляются в файл с именем slurm-%j.out, где %j заменяется уникальным идентификатором (номером) задачи. Перенаправление ввода-вывода можно выполнить, указав программе sbatch опции

  • --input=<filename pattern>
  • --output=<filename pattern>
  • --error=<filename pattern>

При задании имени файла (filename pattern) можно использовать символы замены, в частности, %j заменяется на JobID, %t - на номер процесса в рамках задания. Таким образом file_%j_%t.txt при каждом запуске задачи сгенерирует уникальные имена для каждого процесса.

Выдаваемые результаты конкретной команды srun можно поместить вместо стандартного в указанный файл, добавив после команды символ перенаправления вывода >.

srun mytest > out_mytest &

Можно (чаще, при интерактивном запуске) параллельно просматривать результаты и сохранять их в файле, например:

srun --mem 40000 mytest | tee out_mytest

Описание всех опций и примеры команд можно посмотреть в руководстве man с помощью команд:

man sbatch
man srun

Примеры запуска.

В результате интерактивного запуска программы hostnameвыдаётся имя узла, на котором запущен соответствующий процесс, например:

$>srun hostname 
apollo5

При запуске в пакетном режиме команда запуска программы задаётся либо в скрипте, либо через опцию --wrap, например,

sbatch -n 2 --wrap="srun hostname"

или

sbatch mybat

где скрипт mybat:

#!/bin/sh
#SBATCH -n 2
srun  hostname &;
wait

Внимание!

  • Команда srun внутри скрипта может запрашивать ресурсы только в тех пределах, которые установлены командой sbatch.
  • Скрипт запускается только на первом из выделенных узлов.
  • Запуск нескольких процессов осуществляется командой srun. При этом все опции, указанные в командной строке или самом скрипте в строках #SBATCH, приписываются к каждой команде srun данного скрипта, если не переопределены в ней. Так, результирующий файл приведённого примера будет содержать 2 строки с именами узлов (возможно, одинаковых), на которых выполнятся 2 процесса задачи, сформированные командой srun.
  • Если команды srun запускаются в фоновом режиме (символ & в конце строки), то они при наличии ресурсов могут выполняться одновременно.

Примеры постановки задач в очередь.

u9999@umt:~$ sbatch  -n 3 --wrap="srun mytest1 3 5.1"
Submitted batch job 776

сформирована пакетная задача с запуском 3-х процессов mytest1 c 2-мя параметрами. Задаче присвоен уникальный идентификатор 776.

u9999@umt:~$ srun -N 2 sleep 30 &
[1] 22313

сформирована интерактивная задача в фоновом режиме. [1] - номер фоновой задачи в текущем сеансе, 22313 - pid процесса srun на управляющей машине.

Уникальный идентификатор можно узнать с помощью команд squeue, sacct.