Как пользоваться Slurm

Как правило, для того чтобы запустить задачу в очередь, нужно составить небольшой скрипт (назовём его job.sh) и выполнить команду

sbatch job.sh

Посмотрим, что обычно находится внутри job.sh

MPI

#!/bin/bash
# Название расчитываемой задачи. Может быть любым.
#SBATCH --job-name="sic"
#
# Множество вычислительных узлов для расчета задачи. Определяет характеристику
# вычислительных узлов.
#SBATCH --partition=intelv3-batch
#
# Запускать каждый расчет на одном узле.
#SBATCH --nodes=1
#
# Расчетное время, после истечения которого задача будет принудительно
# остановлена. В данном случае --- 7 дней.
#SBATCH --time=7-00:00:00
#
# Количество потоков одного процессора (20 для intelv3-batch, 24 для
# intelv4-batch, 256 для knl-batch).
#SBATCH --ntasks-per-node=20

# Чтобы srun заработал с impi
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so

srun pw.x < scf.in > scf.out

В данном варианте будет создано 20 MPI процессов Cкрипт pw.x будет выполнен с входными данными из файла scf.in, после чего данные будут выведены в файл scf.out

А если нужна информация по другим флагам и примерам, то можно обратиться к разделу Дополнительные примеры

GPU

Допустим, вы обучаете нейронные сети на питоне и вам захотелось использовать gpu. Не беда:

#!/bin/bash
#
#SBATCH --job-name="Neural network"
#SBATCH --partition=intelv3-batch
srun --gres=gpu:1 -n1 -N1-1 --exclusive ./miniconda3/bin/python train.py
srun --gres=gpu:1 -n1 -N1-1 --exclusive ./miniconda3/bin/python classify.py

При запуске нужно явно указать, что тебе нужен gpu в опции –gres. Можно даже два попросить, если есть:

sbatch --gres=gpu:2 job.sh

Если же вам нужна конкретная видеокарта, из имеющихся, то можно модифицировать наш файл job.sh следующим образом:

#!/bin/bash
#
#SBATCH --job-name="Neural network"
#SBATCH --partition=intelv3-batch
#SBATCH --nodelist=node44.cluster
srun --gres=gpu:1 -n1 -N1-1 --exclusive ./miniconda3/bin/python train.py
srun --gres=gpu:1 -n1 -N1-1 --exclusive ./miniconda3/bin/python classify.py

Тут через опцию –nodelist запрашивается 44 узел, в составе которого установлена Nvidia P100. Также имеется GTX 1080Ti на узле 43.

После чего при запуске можно всё также не указывать конкретные gpu

sbatch --gres=gpu:1 job.sh

Для информации о отслеживании состояний задач в slurm можно обратиться к разделу Базовые команды

Дополнительные примеры

Для кода, совмещающего в себе использование MPI и OpenMP, следует использовать следующую форму запускающего скрипта:

#!/bin/bash
# Название расчитываемой задачи. Может быть любым.
# SBATCH --job-name="sc2"
#
# Множество вычислительных узлов для расчета задачи. Определяет
# характеристику вычислительных узлов.
# SBATCH --partition=intelv4-batch
#
# Запускать расчет на одном узле.
# SBATCH --nodes=1
#
# Расчетное время, после истечения которого задача будет принудительно
# остановлена. В данном случае --- 7 дней.
# SBATCH --time=7-00:00:00
#
# Количество процессов одного узла
# SBATCH --ntasks-per-node=2
#
# Количество потоков создаваемое каждым процессом
# SBATCH --cpus-per-task=12
#
# Количество потоков соответствует перемножению количества процессов
# на количество созданных им потоков
# Количество потоков одного процессора (20 для intelv3-batch, 24 для
# intelv4-batch, 256 для knl-batch).

# Чтобы srun заработал с impi
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so

srun pw.x < scf.in > scf.out

В данном случае будет создано 24 потока вычислений на 1 узле. Можно также изменить количество узлов вычисления до определённого числа, заменив следующую опцию:

# Запускать расчет на нескольких узлах.
#SBATCH --nodes=2

А также определять конкретные узлы, на которых будет запускаться ПО, дописав:

# Запускать расчет на нескольких узлах.
#SBATCH --nodelist=node51.cluster,node52.cluster

Базовые команды

Для наблюдения за выполнением установленной в очередь комманды можно использовать команду

squeue

Типичным результатом выполнения является экран с показом текущих задач в очереди

JOBID          PARTITION             NAME             USER ST         TIME  NODES NODELIST(REASON)
1574          knl-batch          Firefly           babkin  R      5:03:47      1 node37.cluster

Он показывает номер задачи, в какоую очередь она установилась, время выполнения а также на каких узлах она выполняется

Если ваша задача бала запущена неправильно и вам необнодимо её завершить вы можете использовать команду

scancel JobID

Где JobID - номер задачи который вы могли посмотреть с помощью прошлой команды.

Список всех возможных состояний вашей задачи, а также значений этих состояний, можно посмотреть тут.

С помощью следующей комманды можно посмотреть список доступных узлов если необходимо установить задачи на конкретный узел.

sinfo

В данном случае наибольшин интерес представляют очереди с подписью batch и статусом idle. Эти узлы можно использовать.

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

sacctmgr show users

Если вы хотите присоединиться к использованию системы очередей вычислительного кластера ВолгГТУ то напишите сообщение админу и мы это обсудим: @citrullux или на почту.