Метки

, , , , , ,

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

Наиболее часто используемыми программами из системы PBS являются qsub, qdel и qstat. Первая ставит задание на очередь, вторая удаляет его оттуда, а третья позволяет следить за состоянием задания.

qsub

Обычно, после запуска задания с помощью qsub, оно попадает в очередь на сервере, а через некоторое время запускается на выполнение. Все параметры задания можно передать программе qsub через аргументы командной строки, но значительно удобней делать это через скрипт. Вам будут доступны все стандартные переменные оболочки (например $USER всегда будет хранить имя текущего пользователя) и некоторые специфичные для PBS. Назовем файл с командами для PBS run.pbs. Его содержимое, например, может быть таким:

#!/bin/sh
#PBS -N MyJob
#
#PBS -l ncpus=1
#PBS -l walltime=100:00:00
#PBS -l cput=100:00:00
#PBS -l mem=50mb

echo "---------------------------------------"
echo " This Job was run on node "
cat $PBS_NODEFILE
echo "---------------------------------------"

sleep 10
echo "Done!"

Параметры задания передаются в начальной части скрипта в комментариях вида #PBS, далее следует немного печати на стандартный вывод и операции, собственно, которые нам нужно делать на кластере. Рассмотрим доступные опции подробнее

  1. -N задает имя задачи, в нашем случае MyJob. Оно должно быть не длиннее 15 символов и не содержать пробелов. Если опция не указана, то название задачи совпадет с именем скрипта, в нашем случае run.
  2. -q задает имя очереди, в которой будет находиться задание и/или сервер, на котором задание должно выполняться. Формат может быть следующим: -q queue или -q @server или -q queue@server. Какие имена имеют сервера нужно смотреть на конкретном кластере.
  3. -X Если кластер поддерживает графическую оболочку X, то можно воспользоваться перенаправлением вывода графики, установив переменную окружения $DISPLAY и указав в скрипте данную опцию.
  4. -p Если позволяют права пользователя, то можно установить приоритет выполнения своей задачи, указав -p <number>, где <number> может принимать значения от -1024 до 1023. По умолчанию <number> = 0.
  5. -I устанавливает выполнение задачи «интерактивным», тоесть после того, как задание будет запущено из очереди на выполнение, то стандартные потоки входа, печати и ошибок будут перенаправлены на терминал пользователя, в котором запущена задача. Эта опция может не поддерживаться на конкретном кластере.
  6. -d <path> устанавливает рабочий каталог задачи. Если не указано, то <path> является домашним каталогом пользователя. Чтобы работа происходила в текущем каталоге, после установки всех параметров скрипта нужно написать строку cd $PBS_O_WORKDIR.
  7. -c <interval> является весьма полезной страховкой от неожиданностей типа аварийного выключения сервера, так как устанавливает время для сохранения состояния задачи. Если сервер эту опцию не поддерживает, то она будет проигнорирована. Параметр <interval> может принимать следующие значения. n — контрольных точек не будет. s— контрольная точка сохраняется перед выключением сервера. c — контрольная точка создается через интервалы времени, равные наименьшему времени выполнения задачи сервером. c=<minutes>— сохранение контрольной точки каждые <minutes> минут.
  8. -l является самым важным параметром, так как через него запрашиваются ресурсы на выполнение задачи. О нем нужно сказать отдельно.

Прежде, чем сказать о доступных для запроса ресурсах, нужно уточнить единицы их измерения. Время указывается в формате

[[hours:]minutes:]seconds[.milliseconds]

например,

100:30:00

Размеры оперативной памяти или места на жестком диске запрашиваются с помощью суффиксов b (байты), kb (килобайты), mb (мегабайты) или gb (гигабайты). Заменой буквы b на w, можно запрашивать размеры в словах. Например 50mb или 3000kw.

Ниже приведены некоторые директивы запроса ресурсов.

  1. cput — максимальное процессорное время, использованное всеми процессами задачи (учитывает в себе время стояния в очереди и самого выполнения).
  2. file — максимальный размер любого отдельного файла, который будет создан в процессе выполнения задачи.
  3. pcput — максимальное процессорное время, которое может быть использовано одним процессом задачи.
  4. pmem — максимальный размер физической памяти, который может быть использован любым одним процессом.
  5. pvmem — то же самое, но для виртуальной памяти.
  6. vmem — максимальный размер виртуальной памяти, выделенной для всех процессов.
  7. walltime — максимальное время, которое задача может пребывать в запущенном состоянии.
  8. arch — запрос архитектуры процессора. Может принимать значения x86 для 32-битных приложений и x86_64 для 64-битных. Последние таки работают немного быстрее, но если в кластере нет необходимых машин, то выполнить задачу вряд-ли получится.
  9. host — имя хоста, на котором должна будет выполниться задача.
  10. nodes — количество и/или тип узлов, которые будут зарезервированы для выполнения задачи. Тут же можно указать с помощью директивы ppn необходимое количество процессоров на каждом узле, например строка #PBS -l nodes=4:ppn=2 означает запрос четырех двухпроцессорных узлов. Здесь можно указывать и более специфичные для конкретного кластера параметры.

Наиболее часто используемыми являются параметры cput, walltime, nodes и pmem.

В скриптах PBS можно так же использовать следующие переменные окружения:

  1. PBS_O_HOST: имя хоста, на котором был запущен qsub.
  2. PBS_SERVER: хост, на который послана задача.
  3. PBS_O_QUEUE: название очереди, в которую поставлена задача.
  4. PBS_O_WORKDIR: абсолютный путь к рабочему каталогу qsub.
  5. PBS_ARRAYID: номер задачи в массиве задач.
  6. PBS_ENVIRONMENT: может принимать значения PBS_BATCH для задач, запущеных, как скрипт, или PBS_INTERACTIVE для интерактивных (опция -I выше).
  7. PBS_JOBID: идентификатор задачи, присвоенный ей системой.
  8. PBS_NODEFILE: имя файла, содержащего список узлов, на которых запущена задача (имеет смысл лишь на кластерах и параллельных системах).
  9. PBS_QUEUE: имя очереди, в которой будет выполняться задача.

qstat

Команда qstat позволяет отслеживать состояние запущенной задачи. Её вызов без аргументов покажет список идентификаторов, названий, владельцев, время работы и состояние всех запущенных задач в кратком виде. Найти свою можно указав

qstat | grep $USER

В выводе информация будет разбита по колонкам:

  1. Идентификатор задания в системе PBS (далее <job_id>).
  2. Название задания, заданное отправителем.
  3. Владелец задания.
  4. Сколько времени уже работает.
  5. Состояние задания (C — задание выполнено, E — выход из задания по его завершению, H — что-то выполняется, Q — ждет освобождения ресурсов, R — выполняется в данный момент, T — перемещено на другую машину, W — ждет своего времени на выполнение, S — приостановлено).
  6. Название очереди, в которой стоит задача.

Команда

qstat -f <job_id>

выведет подробную информацию о задаче с идентификатором <job_id>

qdel

Наиболее простая команда:

qdel <job_id>

удаляет задачу с идентификатром <job_id> из списка запущенных на кластере (в том числе и стоящую в очереди).

Естественно, эта статья не описывает всё возмжности PBS. Более подробная информация находится в её собственных мануалах.

Реклама