Система очередей Torque #
На кластере используется новая система очередей Slurm. Информация на этой странице более неактуальна и приводится только для справки.
Для того чтобы запустить задачу на кластере, необходимо использовать систему управления заданиями TORQUE Resource Manager. Обычно для этого создается специальный скрипт, и ставится в очередь с помощью команды qsub. Этот скрипт содержит информацию о необходимых ресурсах (число узлов кластера, необходимое количество оперативной памяти и необходимое время). В остальном этот скрипт является обычным bash-скриптом, в нем можно настроить нужные переменные среды и запустить необходимую программу. Этот скрипт будет запущен лишь на одном ядре из выделенного списка. В обязанности скрипта входит запуск программы на всех остальных узлах, например, с помощью mpiexec.
Пример #
Начнем с простого примера для задачи sleep на одно ядро с максимальным временем выполнения 5 минут.
Создайте файл sleep.qs
со следующим содержимым:
#!/bin/bash
#PBS -N sleep
#PBS -l nodes=1
#PBS -l walltime=05:00
echo "Start date: $(date)"
sleep 60
echo " End date: $(date)"
Отправка задачи на кластер осуществляется с помощью команды qsub:
qsub sleep.qs
Строчки, начинающиеся с #PBS
, содержат параметры для команды qsub
. Эти параметры можно также указывать явно при вызове qsub
. Например:
qsub -N sleep -l nodes=1 -l walltime=5:00 sleep.qs
Параметры, отвечающие за выделение ресурсов можно указывать через запятую:
qsub -l nodes=1,walltime=5:00 sleep.qs
Команда qsub
#
Основные параметры команды qsub
:
-d path
Определяет рабочую директорию для задания. Если не задана, то рабочей является домашняя директория пользователя.-e path
-o path
Задаются имена файлов ошибок (stderr
), и стандартного вывода (stdout
). По умолчанию это файлы<имя_задачи>.e<job_id>
и<имя_задачи>.o<job_id>
в текущей директории.-j oe
-j eo
Объединение файлов вывода/ошибок.oe
— файлы объединяются в стандартный файл вывода (stdout
),eo
— в файл ошибок (stderr
).-m aben
События, при которых отправлять уведомления по e-mail.a
— в случае аварийного прекращения задачи,b
— в момент запуска задачи,e
— в момент завершения задачи,n
— не отправлять уведомления. Можно указать несколько букв изabe
или одну буквуn
. По умолчанию используется толькоa
.-M e-mail
Адрес получателя, или список адресов получателей через запятую, которым будут отправлены уведомления. По умолчанию — хозяин задачи.-N name
Определяет имя задачи.-q queue
Задаёт очередь в которую добавляется задача. На сервере есть несколько очередей. По умолчанию задачи ставятся в очередьx6core
.-l resource_list
Определяет список ресурсов, необходимых для задачи.
Основные ресурсы (используются с опцией -l):
nodes=N
nodes=M:ppn=K
Определяет необходимое количество ядер или узлов. В первом случае запрашиваетсяN
ядер,N
может быть от 1 до 432. Во втором случае запрашиваетсяM
узлов, на каждом из которых используютсяK
ядер. Например,nodes=24
запросит 24 ядра,nodes=3:ppn=8
запросит 3 узла по 8 ядер,nodes=6:ppn=4
запросит 6 узлов по 4 ядра на каждом. По умолчанию выделяется одно ядро.pmem=size
pvmem=size
Определяет необходимое одному процессу количество физической и виртуальной памяти соответственно. Размер указывается с помощью целого числа и суффикса:b
,kb
,mb
,gb
. Например,pvmem=1gb
попросит 1 Гб виртуальной памяти для каждого процесса. По умолчанию ограничение отсутствует. Однако в этом случае если задача выделит слишком много памяти, то она может зависнуть, и подвесить сам вычислительный узел.walltime=time
Определяет максимальное время выполнения задачи. По истечении этого времени программа будет завершена. По умолчанию устанавливается значение 6 часов. Ограничение на максимальное значение составляет 24 часа. Пример:walltime=1:45:00
— прекратить выполнение задачи через 1 час 45 минут.
Переменные окружения, которые устанавливает Torque:
PBS_O_WORKDIR
Директория, в которой находился пользователь во время отправки задачи в очередь.PBS_JOBID
Уникальный номер задачи.PBS_O_HOST
Текущий узел, на котором запущен скрипт.PBS_NODEFILE
Файл, в котором перечислены все выделенные узлы.
Дополнительную информацию можно получить на странице документации Torque.
Команда qstat
#
Просмотреть состояние задач в очереди можно с помощью команды qstat
. Команда qstat -a
даст несколько больше информации. Текущее состояние задачи отмечено в столбце S.
- Q — задача находится в очереди, ждет освобождения ресурсов.
- R — задача в данный момент выполняется.
- E — задача завершается, файл стандартного вывода и файл ошибок копируются на головной узел.
- C — задача завершилась. Информация о выполненных задачах хранится 5 минут.
С помощью команды qstat -n
можно получить информацию о том, какие именно ядра выделены для запущенных задач.
Команда qdel
#
Если по каким-то причинам задача так и не начала запускаться, например, запрошено слишком много ядер, или памяти, то удалить задачу из очереди можно с помощью команды qdel <job_id>
. Точно так же задачу можно удалить, если она уже выполняется (при этом она будет сразу завершена).
Программа pbstop
#
pbstop
позволяет мониторить основную информацию о состоянии кластера (общая информация, занятость узлов и очередь задач). Для выхода из программы нажмите клавишу q
.
Пример вывода pbstop
:
Usage Totals: 420/480 Procs, 25/28 Nodes, 12/12 Jobs Running 16:51:05
Node States: 4 free 23 job-exclusive 1 offline
Visible CPUs: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
1 2
-------------------------------------------------
cl1n001 ................ pppp............ [x8core e5core mix]
cl1n003 pppppppppppppppp PPPPPPPPPPPPPPPP [x8core e5core mix]
cl1n005 yyyyyyyyyyyyyyyyyyyyyyyy PPPPPPPPPPPPPPPPPPPPPPPP [x12core e5core mix]
cl1n007 yyyyyyyyyyyyyyyyyyyyyyyy dddddddddddddddddddddddd [x12core e5core mix]
cl1n009 DDDDDDDDDDDDDDDDDDDDDDDD yyyyyyyyyyyyyyyyyyyyyyyy [x12core e5core mix]
cl1n011 gggggggggggggggggggggggg yyyyyyyyyyyyyyyyyyyyyyyy [x12core e5core mix]
cl1n013 pppppppppppppppppppp ........PPPPPPPPPPPP [x10core e5core mix]
cl1n015 EEEEEEEEEEEEEEEEEEEE PPPPPPPPPPPPPPPPPPPP [x10core e5core mix]
cl1n031 tttttttttttt GGGGGGGGGGGG [x6core mix]
cl1n033 tttttttttttt tttttttttttt [x6core mix]
cl1n035 CCCCCCCCCCCC BBBBBBBBBBBB [x6core mix]
cl1n037 ............ tttttttttttt [x6core mix]
cl1n039 AAAAAAAAAAAA tttttttttttt [x6core mix]
cl1n041 tttttttttttt %%%%%%%%%%%% [x6core mix]
-------------------------------------------------
[.] idle [@] busy [*] down [%] offline [!] other [?] unknown
Job# Username Queue Jobname CPUs/Nodes S Elapsed/Requested
P = 66851 perezhog e5core nse2d 72/72 R 17:13:43/24:00:00
p = 66863 perezhog e5core nse2d 40/40 R 00:52:17/24:00:00
E = 66865 goyman x10core slm 20/1 R 00:24:31/12:00:00
y = 66847 yakovlev x12core SLO.=.INMCM 96/96 R 22:20:10/24:00:00
D = 66853 dinar x12core EXP2019_run+.exe 24/1 R 03:35:41/24:00:00
d = 66861 dinar x12core EXP2019_run-.exe 24/1 R 01:02:25/24:00:00
g = 66864 goyman x12core slm 24/1 R 00:29:51/12:00:00
C = 66854 galin x6core a19f1Rm75.out 12/1 R 09:22:17/24:00:00
A = 66855 galin x6core a19f2Rm75.out 12/1 R 09:22:22/24:00:00
G = 66856 galin x6core a19f1Rm25.out 12/1 R 09:22:23/24:00:00
B = 66857 galin x6core a19f2Rm25.out 12/1 R 09:21:25/24:00:00
t = 66866 terekhov x6core STDIN 72/6 R /02:00:00
Очереди задач на кластере #
На кластере действует несколько очередей для задач. Все узлы кластера разбиты на несколько групп. Каждая очередь может использовать только узлы из одной или нескольких определённых групп. Для каждой очереди устанавливается своё ограничение по времени выполнения задачи. Также есть возможность ограничения доступа разных групп пользователей к разным очередям.
Очередь | cl1n001–cl1n004 | cl1n005–cl1n012 | cl1n013–cl1n016 | cl1n017–cl1n020 | cl1n031–cl1n038 | Всего ядер | Макс. время |
---|---|---|---|---|---|---|---|
x6core | + | 96 | 24 ч. | ||||
x8core | + | 64 | 24 ч. | ||||
x10core | + | 80 | 24 ч. | ||||
x12core | + | 192 | 24 ч. | ||||
mix | + | + | + | + | 432 | 12 ч. | |
e5core | + | + | + | 336 | 24 ч. |
Чтобы отправить задачу, например, в очередь x12core нужно добавить параметр -q x12core
для комады qsub
:
qsub -q x12core -N big-problem -l nodes=2:ppn=24 qbig.qs
Или добавить строчку
#PBS -q x12core
в скрипт для qsub
.
По умолчанию в настоящее время используется очередь x6core.