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
: нужно ли включать slurmdbdbatch
: нужно ли включать вычислительные узлы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.confMaxTime
. Значение по умолчанию задается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/filetxt
1. Учёт для кластеров 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