OpenPBS

OpenPBS можно легко включить в кластере CycleCloud, изменив "run_list" в разделе конфигурации определения кластера. Два основных компонента кластера PBS Professional — это главный узел, предоставляющий общую файловую систему, на которой выполняется программное обеспечение PBS Professional, и узлы execute, которые являются узлами, которые подключают общую файловую систему и выполняют отправленные задания. Например, фрагмент простого шаблона кластера может выглядеть следующим образом:

[cluster my-pbspro]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[pbspro_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

Импорт и запуск кластера с определением в CycleCloud даст один главный узел. Выполнение узлов можно добавить в кластер с помощью cyclecloud add_node команды. Например, чтобы добавить еще 10 узлов выполнения:

cyclecloud add_node my-pbspro -t execute -c 10

Автомасштабирование на основе ресурсов PBS

Cyclecloud поддерживает два ресурса для расширения возможностей динамической подготовки. Эти ресурсы являются nodearray и machinetype.

Если отправить задание и указать ресурс nodearray, qsub -l nodearray=highmem -- /bin/hostname CycleCloud добавит узлы в nodearray с именем Highmem. Если такого узла нет, задание останется в состоянии простоя.

Аналогично, если ресурс типа компьютера указан, какая отправка задания, например qsub -l machinetype:Standard_L32s_v2 my-job.sh, CycleCloud автоматически масштабирует Standard_L32s_v2 в узле execute (по умолчанию). Если этот тип компьютера недоступен в массиве узлов execute, задание останется бездействующим.

Эти ресурсы можно использовать в сочетании следующим образом:

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

, который будет автомасштабированием только в том случае, если компьютеры "Standard_HB60rs" указаны массив узлов hpc.

Добавление дополнительных очередей, назначенных nodearrays

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

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

После импорта шаблона кластера и запуска кластера на узле сервера можно выполнить следующие команды, чтобы создать очередь gpu:

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Примечание

Приведенное выше определение очереди упаковывает все виртуальные машины в очередь в один масштабируемый набор виртуальных машин для поддержки заданий MPI. Чтобы определить очередь для последовательных заданий и разрешить несколько масштабируемых наборов виртуальных машин, задайте ungrouped = true для обоих resources_default и default_chunk. Вы также можете задать, resources_default.place = pack если планировщик должен упаковывать задания на виртуальные машины, а не выполнять циклическое распределение заданий. Дополнительные сведения о упаковке заданий PBS см. в официальной документации по PBS Professional OSS.

Справочник по профессиональной конфигурации PBS

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

Параметры PBS Pro Описание
pbspro.slots Количество слотов для данного узла, отчитываемых в PBS Pro. Количество слотов — это количество параллельных заданий, которые может выполнять узел, это значение по умолчанию равно количеству ЦП на данном компьютере. Это значение можно переопределить в тех случаях, когда задания не выполняются на основе ЦП, а на памяти, gpu и т. д.
pbspro.slot_type Имя типа слота, который предоставляет узел. Значение по умолчанию — execute. Если задание помечается жестким ресурсом slot_type=<type>, это задание будет выполняться только на компьютере с тем же типом слота. Это позволяет создавать разные конфигурации программного обеспечения и оборудования для каждого узла и гарантировать, что соответствующее задание всегда запланировано на правильном типе узла.
pbspro.version Значение по умолчанию: 18.1.3-0. Это версия PBS Professional для установки и запуска. В настоящее время это параметр по умолчанию и единственный вариант. В будущих дополнительных версиях программного обеспечения PBS Professional могут поддерживаться.

Подключение PBS с помощью CycleCloud

CycleCloud управляет кластерами OpenPBS с помощью устанавливаемого агента azpbs. Этот агент подключается к CycleCloud для чтения конфигураций кластера и виртуальных машин, а также интегрируется с OpenPBS для эффективной обработки сведений о задании и узле. Все azpbs конфигурации находятся в autoscale.json файле, как правило /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

Важные файлы

Агент azpbs анализирует конфигурацию PBS при каждом вызове — задания, очереди, ресурсы. Сведения предоставляются в stderr и stdout команды, а также в файл журнала на настраиваемых уровнях. Все команды управления PBS (qcmd) с аргументами также записываются в файл.

Все эти файлы можно найти в каталоге /opt/cycle/pbspro/ , где установлен агент.

Файл Расположение Описание
Конфигурация автомасштабирования autoscale.json Настройка автомасштабирования, карты ресурсов, сведений о доступе CycleCloud
Журнал автомасштабирования autoscale.log Ведение журнала основного потока агента, включая управление узлом CycleCloud
Журнал запросов demand.log Подробный журнал для сопоставления ресурсов
Журнал трассировки qcmd qcmd.log Ведение журнала вызовов агента qcmd
Конфигурация ведения журнала logging.conf Конфигурации для маски ведения журнала и расположений файлов

Определение ресурсов OpenPBS

Этот проект обеспечивает общую связь ресурсов OpenPBS с ресурсами виртуальной машины Azure с помощью проекта cyclecloud-pbspro (azpbs). Эта связь ресурсов, определенная в .autoscale.json

Ресурсы по умолчанию, определенные с помощью шаблона кластера, с которым мы поставляемы

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

Именованный mem ресурс OpenPBS приравнивается к атрибуту узла с именем node.memory, который представляет собой общую память любой виртуальной машины. Эта конфигурация позволяет azpbs обработать запрос ресурса, -l mem=4gb например путем сравнения значения требований к ресурсу задания с ресурсами узла.

Обратите внимание, что диск в настоящее время жестко закодирован.size::20g Ниже приведен пример обработки размера конкретного диска виртуальной машины.

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Автомасштабирование и масштабируемые наборы

CycleCloud обрабатывает последовательное и последовательное задания в кластерах OpenPBS по-разному. Охватывающие задания будут размещаться на узлах, входящих в одну группу размещения. Группа размещения имеет определенное значение платформы (VirtualMachineScaleSet с SinglePlacementGroup=true), а CC будет управлять именованной группой размещения для каждого набора развернутых узлов. Используйте ресурс group_id PBS для этого имени группы размещения.

Очередь hpc добавляет эквивалент -l place=scatter:group=group_id , используя собственные очереди по умолчанию.

Установка агента CycleCloud OpenPBS azpbs

Кластер OpenPBS CycleCloud будет управлять установкой и конфигурацией агента на узле сервера. Подготовка включает настройку ресурсов, очередей и перехватчиков PBS. Установка с помощью скриптов также может выполняться за пределами CycleCloud.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

CycleCloud поддерживает стандартный набор атрибутов автостопом в планировщиках:

Атрибут Описание
cyclecloud.cluster.autoscale.stop_enabled Включена ли автостопом на этом узле? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Время (в секундах) для узла, которое будет простаивать после завершения заданий, прежде чем оно будет уменьшено.
cyclecloud.cluster.autoscale.idle_time_before_jobs Время (в секундах) для узла, которое будет простаивать перед выполнением заданий, прежде чем оно будет уменьшено.

Примечание

CycleCloud не поддерживает конфигурацию ускорения с помощью Open PBS.

Примечание

Несмотря на то, что Windows является официально поддерживаемой платформой Open PBS, CycleCloud в настоящее время не поддерживает запуск Open PBS в Windows.