openhpc

Статус сборки

stackhpc.openhpc

Эта роль Ansible устанавливает пакеты и выполняет настройку для создания кластера OpenHPC v2.x с Slurm.

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

Минимальный образ для узлов — это образ RockyLinux 8 GenericCloud.

Переменные роли

openhpc_extra_repos: Дополнительный список. Определения дополнительных репозиториев Yum для настройки, в соответствии с форматом модуля Ansible yum_repository. Уважительные ключи для каждого элемента списка:

  • name: Обязательный
  • description: Необязательный
  • file: Обязательный
  • baseurl: Необязательный
  • metalink: Необязательный
  • mirrorlist: Необязательный
  • gpgcheck: Необязательный
  • gpgkey: Необязательный

openhpc_slurm_service_enabled: логическое значение, указывающее, нужно ли включать соответствующую службу slurm (slurmd/slurmctld).

openhpc_slurm_service_started: Необязательное логическое значение. Нужно ли запускать службы slurm. Если установлено в false, все службы будут остановлены. По умолчанию равно openhpc_slurm_service_enabled.

openhpc_slurm_control_host: Обязательная строка. Имя хоста Ansible inventory (и короткое имя хоста) контроллера, например, "{{ groups['cluster_control'] | first }}".

openhpc_slurm_control_host_address: Необязательная строка. IP-адрес или имя, используемое для openhpc_slurm_control_host, например, для использования другого интерфейса, чем тот, который разрешается из openhpc_slurm_control_host.

openhpc_packages: дополнительные пакеты OpenHPC для установки.

openhpc_enable:

  • control: нужно ли включать управляющий хост
  • database: нужно ли включать slurmdbd
  • batch: нужно ли включать вычислительные узлы
  • runtime: нужно ли включать среду выполнения OpenHPC

openhpc_slurmdbd_host: Необязательный. Куда развернуть slurmdbd, если вы используете эту роль для его развертывания, в противном случае, где уже работает существующий slurmdbd. Это должно быть имя хоста в вашем инвентаре. Установите это значение в none, чтобы избежать управления slurmdbd этой ролью. По умолчанию равно openhpc_slurm_control_host.

openhpc_slurm_configless: Необязательный, по умолчанию false. Если true, будет использоваться режим "configless" Slurm.

openhpc_munge_key: Необязательный. Определите ключ munge для использования. Если не указан, будет сгенерирован ключ, но openhpc_slurm_control_host должен быть в плейе.

openhpc_login_only_nodes: Необязательный. Если вы используете "configless" режим, укажите имя группы ansible, содержащей узлы, которые являются узлами только для входа (т.е. не являются контролерами), если это необходимо. Эти узлы будут запускать slurmd, чтобы связаться с управляющим узлом для конфигурации.

openhpc_module_system_install: Необязательный, по умолчанию true. Нужно ли устанавливать систему модулей окружения. Если true, будет установлено lmod. Если false, вы можете предоставить свою собственную систему модулей или обойтись без неё.

slurm.conf

openhpc_slurm_partitions: Необязательный. Список одной или нескольких партиций slurm, по умолчанию []. Каждая партиция может содержать следующие значения:

  • groups: Если есть несколько групп узлов, составляющих партицию, можно определить список объектов групп здесь. В противном случае можно опустить groups, и следующие атрибуты можно определить в объекте партиции:

    • name: Имя узлов в этой группе.

    • cluster_name: Необязательный. Переопределение верхнего уровня определения openhpc_cluster_name.

    • extra_nodes: Необязательный. Список дополнительных определений узлов, например, для узлов в этой группе/партиции, которые не контролируются этой ролью. Каждый элемент должен быть словарем, с ключами/значениями согласно документации "NODE CONFIGURATION" для slurm.conf. Обратите внимание, что ключ NodeName должен быть первым.

    • ram_mb: Необязательный. Физическая RAM, доступная в каждом узле этой группы (slurm.conf параметр RealMemory) в МиБ. Это устанавливается с помощью фактов Ansible, если не задано, эквивалентно free --mebi * openhpc_ram_multiplier.

    • ram_multiplier: Необязательный. Переопределение верхнего уровня определения openhpc_ram_multiplier. Не имеет эффекта, если установлено ram_mb.

    • gres: Необязательный. Список словарей, определяющих общие ресурсы. Каждый словарь должен определять:

      • conf: Строка с спецификацией ресурса, но требующая формат <name>:<type>:<number>, например, gpu:A100:2. Обратите внимание, что type - произвольная строка.
      • file: Строка с Файлом (путь к устройствам) для этого ресурса, например, /dev/nvidia[0-1] для вышеупомянутого примера.

      Обратите внимание, что GresTypes должны быть установлены в openhpc_config, если это используется.

  • default: Необязательный. Логический флаг, указывающий, является ли эта партиция по умолчанию. Допустимые настройки: YES и NO.

  • maxtime: Необязательный. Ограничение времени для партиции в соответствии с форматом параметра slurm.conf MaxTime. Значение по умолчанию задается openhpc_job_maxtime. Значение должно быть взято в кавычки, чтобы избежать преобразований Ansible.

  • partition_params: Необязательный. Отображение дополнительных параметров и значений для конфигурации партиции.

Для каждой группы (если используется) или партиции узлы в группе инвентаря ansible <cluster_name>_<group_name> будут добавлены в группу/партицию. Обратите внимание на следующие моменты:

  • Узлы могут иметь произвольные имена хостов, но они должны быть написаны строчными буквами, чтобы избежать несоответствия между инвентарем и фактическими именами хостов.
  • Узлы в группе считаются однородными по процессору и памяти.
  • Группа инвентаря может быть пустой или отсутствовать, но если её нет, плей необходимо, чтобы содержать хотя бы один узел из неё (используется для установки информации о процессоре).
  • Узлы не могут появляться более чем в одной группе.

openhpc_job_maxtime: Максимальный лимит времени выполнения задания, по умолчанию '60-0' (60 дней). См. slurm.conf параметр MaxTime для формата. Значение должно быть взято в кавычки, чтобы избежать преобразований Ansible.

openhpc_cluster_name: имя кластера.

openhpc_config: Необязательный. Отображение дополнительных параметров и значений для slurm.conf. Обратите внимание, что они переопределят любые, включенные в templates/slurm.conf.j2.

openhpc_ram_multiplier: Необязательный, по умолчанию 0.95. Множитель, используемый в расчете: total_memory * openhpc_ram_multiplier при установке RealMemory для партиции в slurm.conf. Может быть переопределён на уровне каждой партиции с помощью openhpc_slurm_partitions.ram_multiplier. Не имеет эффекта, если установлено openhpc_slurm_partitions.ram_mb.

openhpc_state_save_location: Необязательный. Абсолютный путь для состояния контроллера Slurm (параметр slurm.conf StateSaveLocation)

Учёт

По умолчанию учётное хранилище не настроено. Кластеры OpenHPC v1.x и не обновлённые кластеры OpenHPC v2.0 поддерживают файловое учётное хранилище, которое можно выбрать, установив переменную роли openhpc_slurm_accounting_storage_type в accounting_storage/filetxt1. Учёт для кластеров OpenHPC v2.1 и обновлённых кластеров OpenHPC v2.0 требует демон базы данных Slurm, slurmdbd (хотя завершение задания может быть ограниченной альтернативой, см. ниже. Чтобы включить учёт:

  • Настройте сервер mariadb или mysql, как описано в документации по учёту slurm здесь на одном из узлов в вашем инвентаре и установите openhpc_enable.database на true для этого узла.
  • Установите openhpc_slurm_accounting_storage_type в accounting_storage/slurmdbd.
  • Настройте переменные для slurmdbd.conf ниже.

Роль позаботится о настройке следующих переменных:

openhpc_slurm_accounting_storage_host: Где работает служба учётного хранилища, т.е. где работает slurmdbd.

openhpc_slurm_accounting_storage_port: Какой порт использовать для подключения к учётному хранилищу.

openhpc_slurm_accounting_storage_user: Имя пользователя для аутентификации с учётным хранилищем.

openhpc_slurm_accounting_storage_pass: Kлюч munge или пароль базы данных, используемый для аутентификации.

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

Учёт заданий

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

openhpc_slurm_job_comp_type: Механизм регистрации для учёта заданий. Может быть одним из jobcomp/filetxt, jobcomp/none, jobcomp/elasticsearch.

openhpc_slurm_job_acct_gather_type: Механизм для сбора данных учёта заданий. Может быть одним из jobacct_gather/linux, jobacct_gather/cgroup и jobacct_gather/none.

openhpc_slurm_job_acct_gather_frequency: Период выборки для учёта заданий (в секундах).

openhpc_slurm_job_comp_loc: Место для хранения записей учёта заданий. Зависит от значения openhpc_slurm_job_comp_type, например, для jobcomp/filetxt это представляет собой путь на диске.

slurmdbd.conf

Следующие параметры влияют на slurmdbd.conf. Пожалуйста, обратитесь к документации Slurm для получения более подробной информации. Вам нужно будет настроить эти переменные, если вы установили openhpc_enable.database в true.

openhpc_slurmdbd_port: Порт, на котором slurmdb будет слушать, по умолчанию 6819.

openhpc_slurmdbd_mysql_host: Имя хоста или IP, где работает mariadb, по умолчанию openhpc_slurm_control_host.

openhpc_slurmdbd_mysql_database: База данных, используемая для учёта, по умолчанию slurm_acct_db.

openhpc_slurmdbd_mysql_password: Пароль для аутентификации с базой данных. Вы должны установить эту переменную.

openhpc_slurmdbd_mysql_username: Имя пользователя для аутентификации с базой данных, по умолчанию slurm.

Пример инвентаря

А инвентарь Ansible может выглядеть так:

[openhpc_login]
openhpc-login-0 ansible_host=10.60.253.40 ansible_user=centos

[openhpc_compute]
openhpc-compute-0 ansible_host=10.60.253.31 ansible_user=centos
openhpc-compute-1 ansible_host=10.60.253.32 ansible_user=centos

[cluster_login:children]
openhpc_login

[cluster_control:children]
openhpc_login

[cluster_batch:children]
openhpc_compute

Примеры плейбуков

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

---
- hosts:
  - cluster_login
  - cluster_control
  - cluster_batch
  become: yes
  roles:
    - role: openhpc
      openhpc_enable:
        control: "{{ inventory_hostname in groups['cluster_control'] }}"
        batch: "{{ inventory_hostname in groups['cluster_batch'] }}"
        runtime: true
      openhpc_slurm_service_enabled: true
      openhpc_slurm_control_host: "{{ groups['cluster_control'] | first }}"
      openhpc_slurm_partitions:
        - name: "compute"
      openhpc_cluster_name: openhpc
      openhpc_packages: []
...

1 Slurm 20.11 удалил accounting_storage/filetxt как опцию. Эта версия Slurm была внедрена в OpenHPC v2.1, но репозитории OpenHPC общие для всех выпусков OpenHPC v2.x.

О проекте

This role provisions an exisiting cluster to support OpenHPC control and batch compute functions and installs necessary runtime packages.

Установить
ansible-galaxy install stackhpc/ansible-role-openhpc
Лицензия
apache-2.0
Загрузки
1756
Владелец
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.