Система очередей 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 (очередь по умолчанию) и 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-36] 1440 7 дней
short n[37,38] 48 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 часов
36 1440 12 часов
Ограничение на количество машино-часов может быть уменьшено. Следите за обновлениями на сайте.

Дополнительное ограничение для долгих задач (более 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.