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