Система очередей

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