IBM Spectrum LSF

Начиная с LSF 10.1 FixPack 9 (10.1.0.9), Azure CycleCloud — это собственный поставщик соединителя ресурсов. IBM предоставляет документацию. Эти ресурсы предоставляют инструкции по настройке основного узла LSF для подключения к CycleCloud.

LSF — это лицензированный продукт IBM. Чтобы использовать LSF в CycleCloud, вам нужен файл прав, который IBM предоставляет своим клиентам.

Примечание.

  • LSF — это лицензированный продукт IBM. Чтобы использовать LSF в CycleCloud, вам нужен файл прав, который IBM предоставляет своим клиентам. Добавьте двоичные файлы LSF и файл разрешений в каталог blobs/, чтобы использовать полностью автоматизированный кластер или инструмент сборки образа виртуальной машины в этом проекте.
  • Чтобы использовать полностью автоматизированный кластер или построитель образов виртуальных машин в этом проекте, добавьте двоичные файлы LSF и файл прав в blobs/ каталог.
  • LSF зависит от пакета ed, который по умолчанию не установлен в последних выпусках образа Azure HPC. Если выбранный образ виртуальной машины не включает ed, мы рекомендуем использовать cloud-init для добавления пакета. Например, в RedHat Enterprise Linux, AlmaLinux или CentOS можно добавить следующее в шаблон кластера (или в графическом интерфейсе CycleCloud с помощью диалогового окна "Изменение кластера").
[node defaults]
CloudInit = '''#!/bin/bash
yum install -y ed
'''

Поддерживаемые сценарии типа кластера CycleCloud LSF

LSF может "заимствовать" узлы из Azure для запуска заданий по запросу, добавляя и удаляя узлы по мере необходимости. Тип кластера LSF является гибким для обработки нескольких сценариев в одном кластере:

  1. Задания высокой пропускной способности (ЦП и GPU)
  2. Тесно связан (MPI, ЦПУ и GPU)
  3. Низкий приоритет

Обработайте эти сценарии, настроив несколько массивов узлов и свойства LSF. CycleCloud предварительно настраивает массивы узлов. Правильная настройка LSF позволяет выполнять различные сценарии заданий.

При настройке LSF в соответствии с этими рекомендациями можно использовать bsub требования к -R ресурсам следующим образом:

Используйте ресурс placementGroup для запуска задания с сетью, подключенной по InfiniBand.

-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"

Для GPU рекомендуется использовать поддержку LSF для расширенного синтаксиса GPU. Как правило, эти атрибуты добавляются в lsf.conf и LSB_GPU_NEW_SYNTAX=extendLSF_GPU_AUTOCONFIG=Y. При активированной поддержке расширенного синтаксиса используйте группу размещения вместе с -gpu для выполнения тесно связанного задания с ускорением GPU.

-R "span[ptile=1] select[nodearray=='gpumpi' && cyclecloudmpi] same[placementgroup]" -gpu "num=2:mode=shared:j_exclusive=yes"

Параллельное выполнение заданий с поддержкой GPU.

-R "select[nodearray=='gpu' && !cyclecloudmpi && !cyclecloudlowprio]" -gpu "num=1:mode=shared:j_exclusive=yes"

Запустите крупное всплесковое задание на виртуальных машинах с низким приоритетом.

-J myArr[1000] -R "select[nodearray=='lowprio' && cyclecloudlowprio]"

Настройка LSF для типа кластера CycleCloud LSF

Чтобы включить эти сценарии, добавьте общие типы ресурсов в lsb.shared.

   cyclecloudhost  Boolean  ()       ()       (instances from Azure CycleCloud)
   cyclecloudmpi  Boolean   ()       ()       (instances that support MPI placement)
   cyclecloudlowprio  Boolean ()     ()       (instances that low priority / interruptible from Azure CycleCloud)
   nodearray  String     ()       ()       (nodearray from CycleCloud)
   placementgroup String ()       ()       (id used to note locality of machines)
   instanceid String     ()       ()       (unique host identifier)

Возможно, вы сможете опустить cyclecloudlowprio, но она обеспечивает дополнительную проверку того, что задания выполняются на предназначенной виртуальной машине.

Шаблон поставщика LSF для CycleCloud

Поставщик LSF CycleCloud предоставляет конфигурации с помощью шаблона поставщика. Эти конфигурации представляют собой подмножество полной конфигурации nodearray.

Ниже приведен пример шаблона LSF для Cyclecloud из cyclecloudprov_templates.json:

{
    "templateId": "ondemand",
    "attributes": {
        "type": ["String", "X86_64"],
        "ncores": ["Numeric", "44"],
        "ncpus": ["Numeric", "44"],
        "mem": ["Numeric", "327830"],
        "cyclecloudhost": ["Boolean", "1"],
        "nodearray" : ["String", "ondemand"]
    },
    "priority" : 250,
    "nodeArray": "ondemand",
    "vmType" : "Standard_HC44rs",
    "subnetId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Network/virtualNetworks/hpc-network/subnets/compute",
    "imageId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Compute/images/lsf-worker-a4bc2f10",
    "maxNumber": 500,
    "keyPairLocation": "/opt/cycle_server/.ssh/id_rsa_admin.pem",
    "customScriptUri": "https://aka.ms/user_data.sh",
    "userData": "nodearray_name=ondemand"
}

Атрибуты шаблона LSF для CycleCloud

Шаблон поставщика LSF не предоставляет все атрибуты nodearray. Эти атрибуты считаются переопределениями конфигурации массива узлов в CycleCloud. Единственными обязательными атрибутами шаблона LSF являются:

  • templateId
  • nodeArray

Вы можете опустить другие атрибуты или они могут быть не нужны вообще. CycleCloud выводит следующие атрибуты:

  • imageId — Образ виртуальной машины Azure, например, "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" — переопределение конфигурации кластера CycleCloud.
  • subnetId — Подсеть Azure, "resource_group/vnet/subnet" — например, переопределение конфигурации кластера CycleCloud.
  • vmType — например, "Standard_HC44rs" — переопределение конфигурации кластера CycleCloud.
  • keyPairLocation — например, "~/.ssh/id_rsa_beta" — переопределение конфигурации кластера CycleCloud.
  • customScriptUri — например, http://10.1.0.4/user_data.sh. Скрипт не задан, если не указан.
  • userData — например, "nodearray_name=gpumpi;placement_group_id=gpumpipg1". Пустой, если он не указан.

Примечание о группах размещения

В центрах обработки данных Azure есть возможность сети InfiniBand для сценариев HPC. В отличие от обычного Ethernet, эти сети имеют ограниченный диапазон. "PlacementGroups" описывает экстенты сети InfiniBand. Если виртуальные машины находятся в одной группе размещения и являются специальными типами виртуальных машин с поддержкой InfiniBand, они совместно используют сеть InfiniBand.

Эти группы размещения требуют специализированной обработки в LSF и CycleCloud.

Ниже приведен пример шаблона LSF для CycleCloud из cyclecloudprov_templates.json:

{
  "templateId": "ondemandmpi-1",
  "attributes": {
    "nodearray": ["String", "ondemandmpi" ],
    "zone": [  "String",  "westus2"],
    "mem": [  "Numeric",  8192.0],
    "ncpus": [  "Numeric",  2],
    "cyclecloudmpi": [  "Boolean",  1],
    "placementgroup": [  "String",  "ondemandmpipg1"],
    "ncores": [  "Numeric",  2],
    "cyclecloudhost": [  "Boolean",  1],
    "type": [  "String",  "X86_64"],
    "cyclecloudlowprio": [  "Boolean",  0]
  },
  "maxNumber": 40,
  "nodeArray": "ondemandmpi",
  "placementGroupName": "ondemandmpipg1",
  "priority": 448,
  "customScriptUri": "https://aka.ms/user_data.sh",
  "userData" : "nodearray_name=ondemandmpi;placement_group_id=ondemandmpipg1"
}

В placementGroupName этом файле может быть что-либо, но определяет имя группы размещения в CycleCloud. Все узлы, заимствованные из CycleCloud на основе этого шаблона, размещаются в этой группе размещения и, если они являются виртуальными машинами с поддержкой InfiniBand, совместно используют сеть IB.

Свойство placementGroupName соответствует атрибуту placementgroupузла. Это совпадение намеренно и необходимо. placement_group_id Задайте свойство userData для использования в user_data.sh при запуске узла. Атрибут ondemandmpi может показаться ненужным, но используется для предотвращения сопоставления этого задания на узлах, где placementGroup не определено.

При использовании групп размещения значение Azure.MaxScaleSetSize свойства определяет максимальный размер группы размещения. Это свойство косвенно ограничивает количество узлов, которые можно добавить в группу размещения, но LSF не учитывает его. Установите значение MaxNumber для шаблона LSF равным Azure.MaxScaleSetSize в шаблоне кластера.

user_data.sh

Шаблон предоставляет два атрибута для выполнения скрипта user_data.sh : customScriptUri и userData. Эти атрибуты представляют собой URI и кастомные переменные среды скрипта, управляемого пользователем, который выполняется при запуске узла. Нельзя требовать проверку подлинности для customScriptUri, так как анонимная команда CURL загружает скрипт. Используйте этот скрипт, чтобы:

  1. Настройте рабочие демоны LSF, особенно LSF_LOCAL_RESOURCES и LSF_MASTER_LIST.
    • Если LSF_TOP находится в общей файловой системе, рекомендуется создать локальную копию lsf.conf и задать LSF_ENVDIR переменную перед запуском управляющей программы.
  2. Запустите lim, res и sbatch daemons.

Поставщик CycleCloud задает некоторые переменные среды по умолчанию.

  • rc_account
  • идентификатор_шаблона
  • имяПоставщика
  • имя кластера
  • cyclecloud_nodeid (задайте эту переменную ресурсу instanceId )

Другие переменные данных пользователя, которые могут быть полезны для управления ресурсами в поставщике CycleCloud:

  • nodearray_name
  • placement_group_id

Примечание.

Несмотря на то, что Windows официально поддерживает платформу LSF, CycleCloud в настоящее время не поддерживает выполнение LSF в Windows.