Система очередей Slurm

Система очередей 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 будут удалены окончательно.

Дополнительные ограничения для отдельных пользователей #

Для пользователя student на кластере действуют дополнительные ограничения.

С 3 декабря 2021 года общее количество ядер для пользователя student уменьшено до 128. Задачи с бо́льшим количеством ядер не будут поставлены в очередь. Несколько задач пользователя student могут выполняться одновременно, если суммарное количество используемых ядер не превышает 128.

С 10 февраля 2022 года максимальное время задачи для пользователя student уменьшено до 4 часов. Также, дополнительно к ограничению на ядра, общее количество узлов уменьшено до 4. Задачи, требующие больше 4 узлов, не будут поставлены в очередь. Несколько задач пользователя student могут выполняться одновременно, если суммарное количество используемых узлов не превышает 4.