TORQUE Job Submission

Документация по менеджеру ресурсов TORQUE

Авторские права: Adaptive Computing Enterprises Inc.

Перевод: Щербаков А.С.

Это не дословный перевод. В некоторых случаях текст перевода может отличаться от оригинала.
Обсудить перевод специфических терминов можно связавшись с автором перевода.

Оригинал:http://www.adaptivecomputing.com/resources/docs/torque/2.1jobsubmission.php

Постановка задач

  • 1. Множественная постановка задач
  • 2. Запрос ресурсов
  • 3. Запрос обычных ресурсов
  • 4. Запрос разделенных ресурсов
  • 5. Запрос прочих ресурсов
  • 6. Экспортируемые переменные окружения
  • 7. Настройка разрешенных хостов для постановки задач
  • 8. Пример

Постановка задач выполняется с использованием комманды qsub, которая принимает аргументы коммандной сстроки и выполняет заданный PBS-скрипт (коммандный файл). PBS-скрипт может быть передан как имя файла в коммандной строке qsub или введен через STDIN.

  • PBS-скрипт не обязательно должен быть исполняемым.
  • PBS-скрипт может быть передан через конвейер (pipe) в qsub (например, cat pbs.cmd | qsub)
  • В случае параллельных задач PBS-скрипт загружается и исполняется только на первом выделенном вычислительном узле. (Используйте pbsdsh для параллельного запуска на нескольких узлах.)
  • Коммандный файл во всех случаях выполняется из домашнего каталога пользователя. (Скрипт может установить каталог, из которого выполнена постановка задачи, при помощи переменной окружения $PBS_O_WORKDIR)
  • Коммандный файл запускается со стандартным набором пользовательских переменных окружения, если иное не задано флагами -V или -v.

Примечание По умолчанию, постановка задач разрешена только из TORQUE сервера (хоста, на котором исполняется pbs_server). Разрешение запуска из других узлов описано в разделе Configuring Job Submit Hosts.

Примечание

Версии TORQUE младше 2.4.5 пытались применить настойки по умолчанию очереди и сервера к задачам, для которых не были заданы умолчания. Если после этого параметр задачи остается не задан, то TORQUE применяет для этого параметра максимальное соответствующее значение из настроек очереди и сервера.

В TORQUE 2.4.5 и старше максимальные значения для очереди и сервера больше не используются как значения для не заданных параметров.

1. Множественная постановка задач

Иногда пользователям требуется поставить на исполнение большое число задач, основанных на одном и том же скрипте. Для этого, вместо использования скрипта для циклического запуска qsub, нужно использовать массивы задач. Эта возможность позволяет создавать множество задач одним вызовом qsub. Кроме того, эта особенность включает в себя новое именование задач, которое позволяет пользователю оперировать целым набором задач как одной, или каждой задачей в отдельности.

Массивы задач задаются через опцию -t в qsub, или через #PBS -t в скрипте. Эта опция принимает разделенный запятой список, состоящий из номера задачи или пары чисел разделенных дефисом. Каждая из этих созданных задач будет использовать один и тот же скрипт и будет запущена в идентичном окружении.

> qstat -t 0-4 job_script
1098[].hostname

> qstat
1098[0].hostname ...
1098[1].hostname ...
1098[2].hostname ...
1098[3].hostname ...
1098[4].hostname ...

Примечание Версии TORQUE младше 2.3 имеют другую семантику опции -t. В этих версиях -t принимает только один целочисленный аргумент — число задач, которые нужно создать.

Каждая 1098[x] задача имеет переменную окружения PBS_ARRAYID, которая установлена в значение индекса задачи, т.е. для 1098[0].hostname переменная окружения PBS_ARRAYID будет установлена в 0. Это позволяет создавать массивы задач, где каждая задача выполняет различные действия, основываясь на значении этой переменной, такие как выполнение одинаковых действий над различными входными файлами. Еще одно различие в окружениях задач из одного массива — это значение переменной PBS_JOBNAME.

# Эти два примера одинаковы в TORQUE 2.2
> qsub -t 0-99
> qsub -t 100

# Можно также задавать разделенные запятыми идентификаторы или диапазоны:
> qsub -t 0,10,20,30,40
> qsub -t 0-50,60,70,80

Запуск qstat отобразит состояние массивов задач. Чтобы увидеть статус всех задач в массиве, используйте qstat -t.

Комманды qalter, qdel, qhold и qrls могут оперировать массивами задач — как целыми массивами, так и диапазонами задач. Кроме того каждая задача в массиве доступна по её идентификатору, как и любая задача. Например, следующая комманда запустит только конкретную задачу:

qrun 1098[0].hostname

2 Запрос ресурсов

Различные ресурсы могут быть запрошены при постановке задачи. Задача може запросить особый узел, особый атрибут узла или даже несколько узлов с особыми атрибутами. Могут быть указаны как ресурсы TORQUE, так и ресурсы внешнего планировщика. Ресурсы TORQUE перечислены в таблице ниже:

Ресурс Формат Описание
строка Задает определяемую администратором требуемую архитектуру. По умолчанию это любое строковое значение PBS_MACH в "local.mk".
секунды или [[HH:]MM:]SS Лимит процессорного времени, которое может быть использовано всеми процессами в задаче.
строка Задает пользовательский скрипт эпилога, который выполняется перед системным эпилогом и скриптом epilogue.user по завершению задачи. Синтакс: epilogue=<file>. Имя файла может быть абсолютным или относительным.
размер* Объем дискового пространства, запрашиваемый задачей. (Игнорируется в Unicos.)
строка Имя хоста, на котором задача должна быть запущена.
размер* Максимальный объем физической памяти, используемый задачей. (Игнорируется в Darwin, Digital Unix®, Free BSD, HPUX 11, IRIX, NetBSD, and SunOS. Также игнорируется в Linux® если число нодов отлично от 1. Не реализовано для AIX и HPUX 10.)
целое Число от -20 (высший приоритет) до 19 (низший приоритет). Задает приоритет процесса.
{<node_count> | <hostname>} [:ppn=<ppn>][:gpus=<gpu>][:<property>[:<property>]...] [+ ...] Число и/или тип узлов, которые резервируются эксклюзивно для задачи. Значение — один или более спецификаторов (node_spec) объединенных символом + (плюс): node_spec[+node_spec...]. Каждый спецификатор (node_spec) — это число узлов с типом, указанным в спецификаторе, и имя одного или нескольких параметров требуемых от узла. Число, имя и каждое свойство в спецификаторе разделяются символом : (двоеточие). Если число не задано, потразумевается единица.

Имя узла — это его hostname. Свойства узлов следующие:

  • ppn=# - Определяет число виртуальных процессоров на узлах, запрошенных для задачи.

    Число виртуальных процессоров, доступных на узле по умолчанию равно 1, но может быть настроено в файле $TORQUE_HOME/server_priv/nodes с использованием атрибута np. Виртуальный процессор может быть физическим ядром узла или может итерпретироваться как "слот исполнения" на ресурсах, где значение np для узла превышает число физических ядер (или контекстов гипер-трединга). Значение ppn — это характеристика оборудования, системы и HPC-ресурса, ее значение устанавливается администратором.

  • gpus=# - Определяет число графических процессоров (GPU) на узел для данной задачи.

    Число графических процессоров, доступных на узле может быть сконфигурировано в файле $TORQUE_HOME/server_priv/nodes с использованием атрибута gpu. Число GPU — это характеристика оборудования, системы и HPC-ресурса, ее значение устанавливается администратором.

  • property - Строка, заданная системным администратором, определяющая возможности. Проверьте вместе с администратором перечень узлов и возможностей доступных вам.
Смотрите Пример 1 (-l nodes).
строка Определяет заданную администратором операционную систему, как определено в конфигурационном файле MOM.
строка Позволяет пользователю определить специфичную для HPC-ресурса информацию. Это ресурс предоставляется только в соответствии с политиками планировщика.
секунды или [[HH:]MM:]SS Лимит процессорного времени, которое может использоваться единичным процессом в задаче.
размер* Максимальный объем физической памяти, который может использоваться единичным процессом в задаче. (Игнорируется в Fujitsu. Не реализовано для Digital Unix® и HPUX.)
procs=<целое> (Применимо с версии 2.5.0 и старше.) Число процессоров, которое требуется выделить задаче. Процессоры могут быть от одного или нескольких узлов. Только одна декларация procs может быть использована при постановке задачи коммандой qsub.
> qsub -l nodes=3+procs=2
строка Строка из нулей и единиц, расположенных в обратном порядке от запрашиваемых ядер. procs_bitmap=1110 означает, что задача требует узел с четырьмя доступными ядрами, но задача исполняется только на ядрах два, три и четыре. При этой маске ядро один не используется.
строка Задает пользовательский скрипт пролога, который выполняется после системного пролога и скрипта prologue.user перед запуском задачи. Синтакс: prologue=<file>. Имя файла может быть абсолютным или относительным.
размер* Максимальный объем виртуальной памяти, используемой единичным процессом в пределах задачи. (Игнорируется в Unicos.)
строка Позволяет пользователю указать ПО требуемое задачей. Это полезно, если некоторые пакеты доступны только на конкретных системах в HPC. Это ресурс предоставляется только в соответствии с политиками планировщика.
размер* Максимальный объем виртуальной памяти, используемой всеми процессами в пределах задачи. (Игнорируется в Unicos.)
секунды или [[HH:]MM:]SS Лимит реального времени, в течение которого задача может находиться в состоянии исполнения.
Формат параметра *размер:

Размер указывает максимальное количество в байтах или словах. Он выражается в формате целое[суффикс]. Суффикс - — это множитель из перечисленных ниже ('b' означает байты (по умолчанию), а 'w' — ckjdf). Размер слова определяется на сервере исполнения как word size для этого сервера.

Суффикс Множитель
b w 1
kb kw 1024
mb mw 1,048,576
gb gw 1,073,741,824
tb tw 1,099,511,627,776

Пример 1 (qsub -l nodes)

Применение Описание
> qsub -l nodes=12
Запрашивает 12 узлов любого типа
> qsub -l nodes=2:server+14
Запрашивает 2 «серверных» узла и четырнадцать прочих (в сумме 16 узлов) - здесь задано два спецификатора (node_specs): "2:server" и "14"
> qsub -l nodes=server:hippi+10:noserver+3:bigmem:hippi
Запрашивает а)один «серверный» узел, который имеет "hippi" интерфейс, б) десять не «серверных» узлов, в) три узла с большим объемом памяти, которые имеют "hippi" интерфейс
> qsub -l nodes=b2005+b1803+b1813
Запрашивает три узла по их именам (hostname)
> qsub -l nodes=4:ppn=2
Запрашивает по два процессора на каждом из четырех узлов
> qsub -l nodes=1:ppn=4
Запрашивает четыре процессора на одном узле
> qsub -l nodes=2:blue:ppn=2+red:ppn=3+b1014
Запрашивает по два процессора на каждом из двух «синих» узлов, три процессора на одном «красном» узле и узел с именем "b1014"

Пример 2

> qsub -l mem=200mb /home/user/script.sh
Эта задача запрашивает узел с 200 МБ сводной памяти.

Пример 3

> qsub -l nodes=node01,mem=200mb /home/user/script.sh
Эта задача будет ожидать пока освободится узел "node01" с 200 МБ доступной памяти.

3. Запрос обычных ресурсов

Когда обычные (generic) ресурсы были назначены узлу через конфигурационный файл, эти ресурсы могут быть запрошены при постановке задачи при помощи поля other.

Пример 1

> qsub -l other=matlab /home/user/script.sh
Эта задача запустится на любом узле, на котором есть ресурс matlab.

Примечание Это также можно запросить во время постановки задачи используюя флаг -W x=GRES:matlab

4. Запрос разделенных ресурсов

Когда разделенные (floating) были настроены в Moab, они могут быть запрошены также как и обычные (generic) ресурсы. Moab автоматически поймет, что эти ресурсы разделенные и обработает задачу соответствующим образом. (Смотри Floating Generic Resources в руководстве администратора по Moab Workload Manager для детальной информации о конфигурации Moab.)

Пример 2

> qsub -l other=matlab /home/user/script.sh
Эта задача запустится на любом узле с достаточным количеством разделенных параметров.

Примечание Это также можно запросить во время постановки задачи используюя флаг -W x=GRES:matlab

5. Запрос прочих ресурсов

Множество других ресурсов могут быть затребованы при постановке задачи с использованием Moab Workload Manager. Смотрите Resource Manager Extensions в руководстве администратора по Moab Workload Manager для детальной информации о списке поддерживаемых запросов и корректном синтаксисе.

6. Экспортируемые переменные окружения

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

Переменная Описание
Имя задачи
Значение индекса в массиве задач (с версии 2.2.0 и старше)
рабочий каталог (из которого выполнена постановка)
N/A
Запрошенное число задач
Домашний каталог пользователя
Активный порт MOM демона
Логин пользователя, поставившего задачу
Языковая переменная для задачи
Сookie (печеньки;-) ) задачи
Номер узла (смещение)
Shell-скрипт
Уникальный идентификатор задачи (pbs job id)
Хост, котором выполняется скрипт
Очередь задач
Файл, содержащий список узлов, выделенных задаче (каждый узел с новой строки)
Переменная PATH для доступа к исполняемым файлам из скрипта

7 Настройка разрешенных хостов для постановки задач

По умолчанию только узел, на котором исполняется pbs_server демон может ставить задачи. Дополнительные узлы могут быть внесены в список разрешенных путем выполнения любого из этих пунктов:

  • Установка allow_node_submit параметра сервера.
    • Разрешает любому доверенному вычислительному хосту (узлу) также быть доверенным для постановки задач.
  • Установка submit_hosts параметра сервера. (разделитель - запятая).
    • Разрешает определенным хостам быть доверенным для постановки задач.
  • Использование .rhosts для аутентификации на базе ruserok().

Смотрите Job Submission Host Advanced Config для детальной информации.

Примечание Если параметр allow_node_submit установлен, параметр allow_proxy_user должен быть устаовлен для разрешения пользователям использования прокси при постановке/запуске задач.

8 Пример

Ниже приведен пример тестового скрипта задачи:

#!/bin/sh
#
#This is an example script example.sh
#
#These commands set up the Grid Environment for your job:
#PBS -N ExampleJob
#PBS -l nodes=1,walltime=00:01:00
#PBS -q np_workq
#PBS -M YOURUNIQNAME@umich.edu
#PBS -m abe

#print the time and date
date

#wait 10 seconds
sleep 10

#print the time and date again
date