Вы здесь

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

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

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

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

или

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

Минимальный скрипт может выглядеть так

#!/bin/bash
srun myprogram param1 param2

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

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

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

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

Опции

  • -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> задаёт запуск программы на узлах с GPU. Если gres не задан, то количество GPU=0, т.е. GPU при счете не используются. Если не указан тип GPU, то автоматически назначается младшая модель (m2090). Типы GPU в 2024 году m2090, k40m, v100, a100.

  • -p <раздел> или --partition=<раздел> позволяет указать раздел (partition) кластера для запуска задачи.
    Основные разделы: tesla, apollo, hiperf и debug. Эти разделы покрывают весь кластер и взаимно не пересекаются, т.е. содержат разные узлы (см. Кластер «Уран»). Раздел v100 в 2024 году состоит из одного узла tesla-a101. Список всех разделов выдается командой sinfo -s. Если раздел не задан пользователем явно, то по умолчанию будет выбран раздел apollo, но при отсутствии в нем нужного числа свободных процессоров будет задействован раздел tesla.
    -p debug позволяет запускать задачи в специально выделенном для отладки программ разделе debug с максимальным временем счета 30 минут. Например, srun -p debug mytest

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

Например:

  • -w tesla[5-7,15] - выделить заданию ресурсы узлов tesla5, tesla6, tesla7, tesla15, а если на них не хватит, то и другие узлы;
  • -x tesla22 - не выделять заданию ресурсы узла tesla22;
  • -С a2017 - выделять задаче только те узлы, которые имеют ресурс с именем (Feature), указанным после -C. На кластере имеются ресурсы с именами: tesla, a2017, a2019 (поколения узлов); bigmem (узлы с большим объёмом ОЗУ), a100, v100 (модель GPU). Информацию о том, какие ресурсы есть на конкретном узле, можно получить командой вида scontrol show node tesla22.

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

man sbatch
man srun

По умолчанию стандартный вывод пакетной задачи и стандартный поток ошибок направляются в файл с именем 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   

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

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

u9999@umt:~$> 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.

Пример задачи, рестартующей после истечения заказанного времени

Все опции запуска описаны в batch-файле. За 60 секунд до окончания заказанного времени все процессы, запущенные через srun получат сигнал TERM и завершатся, после чего последняя команда в скрипте restart_sbatch снова поставит его в очередь. Перезапуск произойдёт и в том случае, когда программа, запущенная через srun завершится самостоятельно. Опция --signal задаёт номер сигнала, который будет отправлен процессам (KILL) и время отправки сигнала (60 секунд до конца заказанного времени счёта).

Запуск

sbatch restart_sbatch

Содержимое restart_sbatch:

#!/bin/sh
#SBATCH -n 1 -t 180
#SBATCH --signal=KILL@60

srun myprog arg1 arg2
# здесь можно вставить анализ результатов,
# формирование новых параметров,
# проверку условий завершения
# и т.п.
sbatch ./restart_sbatch
Яндекс.Метрика