Система очередей Slurm #
Для того чтобы запустить задачу на кластере, необходимо использовать систему управления заданиями Slurm. Обычно для этого создается специальный скрипт, и ставится в очередь с помощью команды sbatch
. Этот скрипт содержит информацию о необходимых ресурсах (число узлов кластера, количество ядер процессора, необходимое количество оперативной памяти и необходимое время). В остальном этот скрипт является обычным bash-скриптом, в нем можно настроить нужные переменные среды и запустить необходимую программу. Этот скрипт будет запущен лишь на одном ядре из выделенного списка. В обязанности скрипта входит запуск программы на всех остальных узлах, например, с помощью mpirun.
Пример #
Начнем с простого примера для задачи sleep на одно ядро с максимальным временем выполнения 5 минут.
Создайте файл sleep.sh
со следующим содержимым:
#!/bin/bash
#SBATCH --job-name sleep
#SBATCH --nodes=1
#SBATCH --time=05:00
echo "Start date: $(date)"
sleep 60
echo " End date: $(date)"
Отправка задачи на кластер осуществляется с помощью команды sbatch
:
sbatch sleep.sh
Строчки, начинающиеся с #SBATCH
, содержат параметры для команды sbatch
. Эти параметры можно также указывать явно при вызове sbatch
. Например:
sbatch --job-name sleep --nodes=1 --time=5:00 sleep.sh
Команда sbatch
#
Основные параметры команды sbatch
:
-D path
или--chdir=path
Определяет рабочую директорию для задания. Если не задана, то рабочей является текущая директория.-e path/file
или--error=path/file
-o path/file
или--output=path/file
Задаются имена файлов ошибок (stderr
), и стандартного вывода (stdout
). По умолчанию оба вывода объединяются в один файлslurm-<job_id>.out
в текущей директории.--mail-type=NONE,FAIL,BEGIN,END,ALL и др.
События, при которых отправлять уведомления по e-mail.NONE
– не отправлять уведомления,FAIL
— в случае аварийного прекращения задачи,BEGIN
— в момент запуска задачи,END
— в момент завершения задачи,n
— не отправлять уведомления. Можно указать несколько событий через запятую. Подробное описание и другие типы событий доступны в документацииman sbatch
.--mail-user=e-mail
Адрес получателя уведомлений. По умолчанию — хозяин задачи.-J name
или--job-name=name
Определяет имя задачи.-p queue
или--partition=queue
Задаёт очередь в которую добавляется задача. На сервере есть несколько очередей. По умолчанию задачи ставятся в очередьnormal
.-n N
или--ntasks=N
ЗапрашиваетN
процессов для задачи.-N N
или--nodes=N
ЗапрашиваетN
вычислительных узлов для задачи.--nodes=N --ntasks-per-node=M
ЗапрашиваетN
вычислительных узлов, иM
процессов на каждом узле.--cpus-per-task=N
Дополнительно запрашиваетN
процессорных ядер на каждый процесс (например для гибридных задач MPI+OpenMP). По умолчанию выделяется одно ядро на процесс.--mem=size
Запрашивает необходимую память на каждом узле. Размер указывается с помощью целого числа и суффикса:K
,M
,G
. Например,--mem=16G
запросит 16 Гб памяти на каждом узле.-t time
или--time=time
Ограничивает максимальное время выполнения задачи. По истечении этого времени программа будет завершена. Значение указывается в минутах, либо в одном из форматовММ:CC
,ЧЧ:ММ:СС
. По умолчанию устанавливается значение 6 часов.-C list
или--constraint=list
Указывает дополнительные ограничения на выделяемые узлы. Список может содержать несколько элементов, перечисленных через запятую. Список используемых на текущий момент ограничений:ib
– наличие InfiniBand на узле,avx, avx2, avx512
– процессоры узла поддерживают расширенные наборы команд AVX, AVX2 и AVX-512 соответственно.
Переменные окружения, которые устанавливает Slurm:
SLURM_SUBMIT_DIR
Директория, в которой находился пользователь во время отправки задачи в очередь.SLURM_JOB_ID
Уникальный номер задачи.SLURMD_NODENAME
Текущий узел, на котором запущен скрипт.SLURM_NTASKS
Количество выделенных процессорных ядер.
Дополнительную информацию можно получить в документации man sbatch
.
Команда squeue
#
Просмотреть состояние задач в очереди можно с помощью команды squeue
. Команда squeue -u user
покажет только задачи пользователя user
. Текущее состояние задачи отмечено в столбце ST.
- PD — задача находится в очереди, ждет освобождения ресурсов.
- R — задача в данный момент выполняется.
- Описание других состояний см. в документации
man squeue
.
В столбце NODELIST перечислены узлы, выделенные для задачи.
С помощью команды squeue -l
можно также увидеть запрошенное время для каждой задачи, а с помощью squeue --start
можно узнать ожидаемое время запуска задачи.
Команда scancel
#
Если по каким-то причинам задача так и не начала запускаться, например, запрошено слишком много ядер, или памяти, то удалить задачу из очереди можно с помощью команды scancel <job_id>
. Точно так же задачу можно удалить, если она уже выполняется (при этом она будет сразу завершена).
Программа slurmtop
#
slurmtop
позволяет мониторить основную информацию о состоянии кластера (общая информация, занятость узлов и очередь задач). Для выхода из программы нажмите клавишу q
.
Очереди задач на кластере #
На кластере действует несколько очередей для задач. Все узлы кластера разбиты на несколько групп. Каждая очередь может использовать только узлы из одной или нескольких определённых групп. Для каждой очереди устанавливается своё ограничение по времени выполнения задачи. Также есть возможность ограничения доступа разных групп пользователей к разным очередям.
Очередь | 031–050 | 051–066 | Всего ядер | Макс. время |
---|---|---|---|---|
normal | + | + | 1440 | 24 ч. |
Чтобы отправить задачу, например, в очередь long
нужно добавить параметр -p long
для комады sbatch
:
sbatch -p long --nodes=1 --ntasks-per-node=4 --time=5-0 run_long.sh
Или добавить строчку
#SBATCH -p long
в скрипт для sbatch
.
По умолчанию в настоящее время используется очередь normal
.
Очередиx10core
иx12core
более недоступны. Вместо них задачи будут запущены на основных узлах, но с ограничением не более 20 и 24 ядер на узел, соответственно. В мае 2022 очередиx10core
иx12core
будут удалены окончательно.
Очередиx20core
,mix
иlong
также более недоступны. В мае 2022 очередиx20core
,mix
иlong
будут удалены окончательно.