Как пользоваться 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 или на почту.