Система очередей 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-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.