slurm
CI тесты | выпуски galaxy |
---|---|
scicore.slurm
Настройка кластера SLURM
Этот роль настраивает:
- демон учёта slurm
- основной демон slurm
- рабочие узлы slurm
- хосты для отправки задач slurm
Пользователи slurm автоматически добавляются в базу учёта slurm при первой подаче задания с использованием плагина lua для отправки заданий
Пример инвентаризации
master ansible_host=192.168.56.100 ansible_user=vagrant ansible_password=vagrant
submit ansible_host=192.168.56.101 ansible_user=vagrant ansible_password=vagrant
compute ansible_host=192.168.56.102 ansible_user=vagrant ansible_password=vagrant
[slurm_submit_hosts]
submit
[slurm_workers]
compute
После того как вы определите вашу инвентаризацию, убедитесь, что вы указали переменную "slurm_master_host", указывающую на имя вашего основного хоста
Переменные роли
# добавить все хосты slurm в /etc/hosts на каждой машине
# ip-адреса берутся из ansible facts hostvars[ansible_hostname]['ansible_default_ipv4']['address']
slurm_update_etc_hosts_file: true
# укажите эту переменную на git репозиторий, если у вас есть конфигурация slurm в git
# slurm_config_git_repo: ""
# по умолчанию роль будет развертывать lua плагин для отправки, который автоматически добавляет пользователей в базу учёта slurm
# Проверьте "templates/job_submit.lua.j2" для деталей
slurm_config_deploy_lua_submit_plugin: true
# используйте slurm без конфигурации https://slurm.schedmd.com/configless_slurm.html
# Эта функция требует slurm 20.02 или выше
# Тестировалось только на системах RedHat, но должно работать и на Ubuntu, если вы установите ubuntu 20.02 или выше
slurm_configless: false
# Развертывание необходимых скриптов в основном узле slurm для облачного планирования с использованием openstack (https://slurm.schedmd.com/elastic_computing.html)
# Это развернет "ResumeProgram", "SuspendProgram" для slurm.conf
# и /etc/openstack/clouds.yaml с учетными данными приложения в основном узле slurm
# Это требует пользовательского slurm.conf. Проверьте "templates/slurm.conf.j2.cloud.example" для примера
# Рекомендуется использовать [внутреннее разрешение DNS OpenStack] (https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#the-networking-service-internal-dns-resolution)
slurm_openstack_cloud_scheduling: false
slurm_openstack_venv_path: /opt/venv_slurm
slurm_openstack_auth_url: https://my-openstack-cloud.com:5000/v3
slurm_openstack_application_credential_id: "4eeabeabcabdwe19451e1d892d1f7"
slurm_openstack_application_credential_secret: "supersecret1234"
slurm_openstack_region_name: "RegionOne"
slurm_openstack_interface: "public"
slurm_openstack_identity_api_version: 3
slurm_openstack_auth_type: "v3applicationcredential"
# имя кластера slurm, как определено в slurm.cfg
slurm_cluster_name: slurm-cluster
# установите эту переменную на ansible_hostname основного слурма
slurm_master_host: slurm-master.cluster.com
# установите эту переменную на ansible_hostname хоста slurm-dbd (по умолчанию такой же, как основной слурм)
slurm_dbd_host: "{{ slurm_master_host }}"
# группа в вашей инвентаризации ansible, включающая всех работников slurm
slurm_workers_group: slurm_workers
# группа в вашей инвентаризации ansible, включающая все хосты для отправки
slurm_submit_group: slurm_submit_hosts
# это настройка "StateSaveLocation" в slurm.conf
slurm_slurmctld_spool_path: /var/spool/slurmctld
# это настройка "SlurmdSpoolDir" в slurm.conf
slurm_slurmd_spool_path: /var/spool/slurmd
# настройки для демона учета slurm
slurm_slurmdbd_mysql_db_name: slurm
slurm_slurmdbd_mysql_user: slurm
slurm_slurmdbd_mysql_password: aadAD432saAdfaoiu
# пользователь и группа slurm, которые запускают демоны slurm
slurm_user:
RedHat: "root"
Debian: "slurm"
slurm_group:
RedHat: "root"
Debian: "slurm"
# EPEL необходим для установки пакетов slurm и некоторых зависимостей на системах CentOS/RedHat.
slurm_add_epel_repo: true
# Вы можете установить это в true, чтобы включить репозитории openhpc yum на centos
# Если вы планируете использовать пакеты из openhpc, вы также должны обновить список пакетов для RedHat ниже
slurm_add_openhpc_repo: false
slurm_ohpc_repos_url:
rhel7: "https://github.com/openhpc/ohpc/releases/download/v1.3.GA/ohpc-release-1.3-1.el7.x86_64.rpm"
rhel8: "http://repos.openhpc.community/OpenHPC/2/CentOS_8/x86_64/ohpc-release-2-1.el8.x86_64.rpm"
# пакеты slurm, которые мы устанавливаем на каждом узле кластера
slurm_packages_common:
RedHat:
- slurm
- slurm-doc
- slurm-contribs
Debian:
- slurm-client
# пакеты slurm, которые мы устанавливаем только на основном узле
slurm_packages_master:
RedHat:
- slurm-slurmctld
# - slurm-slurmrestd
Debian:
- slurmctld
# пакеты slurm, которые мы устанавливаем только на узле slurmdbd
slurm_packages_slurmdbd:
RedHat:
- slurm-slurmdbd
- mariadb-server
Debian:
- slurmdbd
- mariadb-server
# пакеты slurm, которые мы устанавливаем только на рабочих узлах
slurm_packages_worker:
RedHat:
- slurm-slurmd
- vte-profile # избегаем сообщения об ошибке "bash __vte_prompt_command command not found" на интерактивных оболочках slurm
Debian:
- slurmd
Настройка облачного планирования slurm для OpenStack
Эта роль может настроить ваш кластер slurm для использования облачного планирования на облаке OpenStack.
Перед тем как пытаться это настроить, рекомендуется прочитать руководство по облачному планированию Slurm и документацию Slurm без конфигурации
Убедитесь, что ваше облако OpenStack имеет включенное внутреннее разрешение DNS. Это необходимо для того, чтобы при загрузке нового узла его имя хоста могло разрешаться мастер-узлом slurm с использованием внутреннего DNS OpenStack.
Вам также следует проверить пример конфигурационного файла slurm.conf.j2.cloud.example, предоставленный с этой ролью.
slurm.conf.j2.cloud.example предоставляется как пример, и вам нужно будет адаптировать его под свои нужды, указав переменную роли slurm_conf_custom_template
на вашу пользовательскую конфигурацию.
Обзор конфигурации облачного планирования
Как описано в документации по облачному планированию slurm, когда пользователь отправляет задание на облачный узел, мастер slurm выполнит "ResumeProgram", определённый в slurm.conf, чтобы включить вычислительный узел в облаке.
ResumeProgram, предоставленный с этой ролью, является python-скриптом, который использует API OpenStack для запуска вычислительных узлов. Этот python-скрипт требует клиента OpenStack, который установлен внутри virtualenv. Аргументом для программы являются названия узлов (с использованием формата выражения hostlist Slurm), которые нужно включить.
Когда вычислительный узел неактивен, мастер slurm выполнит SuspendProgram для остановки узлов. Аргументом для программы являются названия узлов (с использованием формата выражения hostlist Slurm), которые нужно отключить.
Опции OpenStack, используемые для запуска динамических вычислительных узлов (размер, образ, сеть, пара ключей и группы безопасности), должны быть определены как особенности узлов в slurm.conf, например
NodeName=compute-dynamic-[01-04] CPUs=4 RealMemory=7820 State=CLOUD Features=image=centos7,flavor=m1.large,keypair=key123,network=slurm_network,security_groups=default|slurm
Оба "ResumeProgram" и "SuspendProgram" требуют конфигурационного файла OpenStack с действительными учетными данными. Этот файл по умолчанию создается в "/etc/openstack/clouds.yaml" на основном хосте slurm. Рекомендуется использовать учетные данные приложения OpenStack. Проверьте шаблон templates/clouds.yaml.j2, чтобы узнать, какие переменные роли нужны для заполнения этого конфигурационного файла.
Оба "ResumeProgram" и "SuspendProgram" будут записывать логи в "/var/log/messages" на основном хосте slurm. Вы можете проверить этот лог для отладки при загрузке облачных узлов.
Рекомендуемый подход к развертыванию slurm с облачным планированием OpenStack
Убедитесь, что у вас в репозиториях есть Slurm 20.02 или выше, чтобы была поддержка режима slurm без конфигурации.
Запустите как минимум 3 машины:
- основной слurm
- слurm submit (узел входа)
- рабочий узел slurm (это может быть небольшая машина, которую мы будем использовать только для создания образа OpenStack с необходимой конфигурацией для вычислительных узлов облака)
Заполните вашу инвентаризацию ansible и добавьте машины в правильные группы инвентаризации, упомянутые в переменных роли slurm_submit_group
и slurm_workers_group
.
Определите переменную роли slurm_master_host
с именем основного слурма. Каждая машина в кластере должна уметь разрешать это имя хоста в IP основного узла. Каждая машина в кластере должна иметь возможность подключаться к этой машине (проверьте свои группы безопасности и локальный брандмауэр).
Создайте копию slurm.conf.j2.cloud.example
, адаптируйте её под свои нужды и укажите переменную роли slurm_conf_custom_template
на ваш конфигурационный файл. Ваш конфигурационный файл должен обеспечивать наличие раздела с именем "static", который включает только ранее запущенную машину-работника slurm.
Определите переменную ansible slurm_configless: true
, чтобы вычислительные узлы настраивались в режиме без конфигурации. Когда рабочий узел slurm настраивается в режиме без конфигурации, демон slurmd свяжется с основным слурмом при первой загрузке и загрузит slurm.conf в /var/run/slurm/conf/slurm.conf
.
Запустите роль, чтобы настроить все ваши машины, и вы должны получить работающий кластер slurm с одним узлом в разделе "static".
Теперь вы можете запускать свои собственные playbook или скрипты для кастомизации рабочего узла slurm, например, добавлять монтирования NFS, устанавливать клиент LDAP, включать программные модули, устанавливать дополнительное ПО и т.д.
Создайте образ OpenStack с машины в разделе "static", который включает ваши необходимые настройки. Проверьте create-slurm-compute-node-image.yml для примера.
Обновите вашу копию slurm.conf.j2.cloud.example
и определите правильные особенности узлов с именем образа OpenStack, именем ключа, именем сети и группами безопасности. Снова запустите плейбук, чтобы развернуть вашу обновлённую конфигурацию.
Теперь (надеемся) у вас должен быть работающий кластер slurm с поддержкой облачного планирования. Вы должны увидеть облачные разделы slurm, когда выполняете sinfo -Nel
. Попробуйте отправить задание на один из облачных разделов и следите за /var/log/messages
и /var/log/slurm/slurmctld.log
на основном хосте slurm.
ansible-galaxy install scicore-unibas-ch/ansible-role-slurm