Система очередей 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
(очередь по умолчанию) иshort
.-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
,ЧЧ:ММ:СС
,ДД-ЧЧ
. По умолчанию устанавливается значение 1 час.-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
.
Очереди задач на кластере #
Очередь | Узлы | Всего ядер | Максимальное время |
---|---|---|---|
normal |
n[01-24,29-36] |
1280 | 7 дней |
short |
n[27] |
40 | 1 час |
На кластере есть две очереди для задач – normal
(очередь по умолчанию) и short
. Максимальное время выполнения одной задачи в очереди normal
– 7 дней. Для задач, использующих больше вычислительных узлов, максимальное время уменьшается. Общее правило следующее: количество задействованных узлов (в том числе частично), умноженное на количество часов, не должно превышать 432 машино-часа.
Количество узлов | Максимум ядер | Максимальное время |
---|---|---|
1 | 40 | 7 дней |
2 | 80 | 7 дней |
3 | 120 | 6 дней |
4 | 160 | 108 часов |
6 | 240 | 72 часа |
8 | 320 | 54 часа |
12 | 480 | 36 часов |
16 | 640 | 27 часов |
18 | 720 | 24 часа |
24 | 960 | 18 часов |
32 | 1280 | 13.5 часов |
Ограничение на количество машино-часов может быть уменьшено. Следите за обновлениями на сайте.
Дополнительное ограничение для долгих задач (более 24 часов): суммарное количество всех узлов, частично или полностью занятых запущенными долгими задачами всех пользователей, не должно превышать 18.
Для тестов также доступна очередь short
с максимальным временем на одну задачу – 1 час.
Очередиx10core
,x12core
,x20core
,mix
иlong
удалены окончательно в январе 2023 года.
Дополнительные ограничения для отдельных пользователей #
Для пользователя student
на кластере действуют дополнительные ограничения.
С 3 декабря 2021 года общее количество ядер для пользователя student
уменьшено до 128. Задачи с бо́льшим количеством ядер не будут поставлены в очередь. Несколько задач пользователя student
могут выполняться одновременно, если суммарное количество используемых ядер не превышает 128.
С 10 февраля 2022 года максимальное время задачи для пользователя student
уменьшено до 4 часов. Также, дополнительно к ограничению на ядра, общее количество узлов уменьшено до 4. Задачи, требующие больше 4 узлов, не будут поставлены в очередь. Несколько задач пользователя student
могут выполняться одновременно, если суммарное количество используемых узлов не превышает 4.