scicore.slurm

CI 测试 galaxy 发布
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",指向您的主机名

角色变量

# 在每台机器的 /etc/hosts 中添加所有 slurm 主机
# ip 来自 ansible facts hostvars[ansible_hostname]['ansible_default_ipv4']['address']
slurm_update_etc_hosts_file: true

# 如果您有 slurm 配置在 git 中,请将此变量指向一个 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 系统上测试,但如果您安装 ubuntu20.02 或更高版本,它也应该在 Ubuntu 上工作
slurm_configless: false

# 在 slurm 主机上为云调度部署所需的脚本,使用 OpenStack (https://slurm.schedmd.com/elastic_computing.html)
# 这将为 slurm.conf 部署 "ResumeProgram" 和 "SuspendProgram"
# 并在 slurm 主机上创建 /etc/openstack/clouds.yaml,带有应用凭证
# 这需要一个自定义的 slurm.conf。有关示例,请查看 "templates/slurm.conf.j2.cloud.example"
# 建议使用 [OpenStack 的内部 DNS 解析] (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

# 设置此变量为 slurm-master 的 ansible_hostname
slurm_master_host: slurm-master.cluster.com
# 设置此变量为 slurm-dbd 主机的 ansible_hostname(默认为 slurm-master)
slurm_dbd_host: "{{ slurm_master_host }}"

# 在您的 ansible 清单中,包含所有 slurm 工作节点的组
slurm_workers_group: slurm_workers

# 在您的 ansible 清单中,包含所有提交主机的组
slurm_submit_group: slurm_submit_hosts

# 这是 slurm.conf 中的 "StateSaveLocation" 设置
slurm_slurmctld_spool_path: /var/spool/slurmctld

# 这是 slurm.conf 中的 "SlurmdSpoolDir" 设置
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 是在 CentOS/RedHat 系统上安装 slurm 软件包和某些依赖项所必需的。
slurm_add_epel_repo: true

# 您可以将此设置为 true,以在 centos 上启用 openhpc yum 仓库
# 如果您打算使用 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

# 我们仅在 slurmdbd 节点中安装的 slurm 软件包
slurm_packages_slurmdbd:
  RedHat:
    - slurm-slurmdbd
    - mariadb-server
  Debian:
    - slurmdbd
    - mariadb-server

# 我们仅在工作节点中安装的 slurm 软件包
slurm_packages_worker:
  RedHat:
    - slurm-slurmd
    - vte-profile  # 避免在 slurm 交互式 shell 中出现 "bash __vte_prompt_command command not found" 的错误信息
  Debian:
    - slurmd

配置 OpenStack 的 slurm 云调度

该角色可以配置您的 slurm 集群以使用 OpenStack 云中的云调度。

在尝试配置之前,建议您阅读 Slurm 的云调度指南Slurm 的无配置文档

确保您的 OpenStack 云启用了 内部 DNS 解析。这很重要,以便在启动新节点时,slurm 主机能够通过 OpenStack 内部 DNS 解析其主机名。

您还应该检查此角色提供的示例配置文件 slurm.conf.j2.cloud.exampleslurm.conf.j2.cloud.example 是一个示例,您需要根据您的具体需求进行调整,并将角色变量 slurm_conf_custom_template 指向您的自定义配置

云调度配置概述

  • 正如 slurm 云调度文档中所述,当用户向云节点提交作业时,slurm 主机将执行在 slurm.conf 中定义的 "ResumeProgram",以启动云中的计算节点。

  • 与该角色一起提供的 ResumeProgram 是一个 Python 脚本,它将使用 OpenStack API 启动计算节点。此 Python 脚本要求在虚拟环境中安装 OpenStack 客户端。程序的参数是要启动的节点名称(使用 Slurm 的主机列表表达式格式)。

  • 当计算节点处于空闲状态时,slurm 主机将执行 SuspendProgram 以停止节点。程序的参数是要关闭的节点名称(使用 Slurm 的主机列表表达式格式)。

  • 用于启动动态计算节点的 OpenStack 选项(flavor、image、network、keypair 和 security groups)必须在 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 配置文件,其中包含有效的凭证。该文件默认填充到 slurm 主机的 "/etc/openstack/clouds.yaml" 中。建议使用 OpenStack 应用凭证。请查看模板 templates/clouds.yaml.j2,了解填充此配置所需的角色变量。

  • "ResumeProgram" 和 "SuspendProgram" 会将日志写入 slurm 主机的 "/var/log/messages"。当启动云节点时,您可以查看此日志以进行调试。

推荐的 OpenStack 云调度 SLURM 部署方法

确保在您的软件仓库中有 Slurm 20.02 或更高版本,以支持 slurm 无配置模式

至少启动 3 台机器:

  • slurm 主机
  • slurm 提交(登录节点)
  • slurm 工作节点(这可以是我们用于创建具有所需云计算节点配置的 OpenStack 映像的小机器)

填充您的 ansible 清单,并将机器添加到角色变量 slurm_submit_groupslurm_workers_group 中引用的正确清单组中。

定义角色变量 slurm_master_host,其值为 slurm 主机的主机名。集群中的每台机器都应能够解析该主机名为主机的 IP。集群中的每台机器必须能够连接到该机器(检查您的安全组和本地防火墙)。

创建 slurm.conf.j2.cloud.example 的副本,调整以符合您的需求,并将角色变量 slurm_conf_custom_template 指向您的配置文件。您的配置文件应提供一个名为 "static" 的分区,仅包括我们之前启动的 slurm 工作节点。

定义 ansible 变量 slurm_configless: true,这样计算节点就可以在无配置模式下进行配置。当 slurm 工作节点在无配置模式下配置时,slurmd 守护进程将在首次启动时联系 slurm 主机,并将 slurm.conf 下载到 /var/run/slurm/conf/slurm.conf

执行该角色以配置您的所有机器,您应该得到一个在 "static" 分区内有一个节点的工作 slurm 集群。

现在您可以运行自定义剧本或脚本来定制 slurm 工作节点,例如添加 NFS 挂载、安装 LDAP 客户端、启用软件模块、安装额外软件等。

从 "static" 分区中的机器创建一个 OpenStack 映像,其中包含您所需的自定义。请查看 create-slurm-compute-node-image.yml 以获取示例。

更新您的 slurm.conf.j2.cloud.example 副本,并根据 OpenStack 映像名称、密钥名称、网络名称和安全组定义正确的节点特性。重新运行剧本以部署更新的配置。

现在 (希望) 您应该拥有一个支持云调度的工作 slurm 集群。您应当在执行 sinfo -Nel 时看到 slurm 云分区。尝试向其中一个云分区提交作业,并监控 slurm 主机上的 /var/log/messages/var/log/slurm/slurmctld.log

关于项目

Install and configure a Slurm cluster

安装
ansible-galaxy install scicore.slurm
许可证
Unknown
下载
21.6k
拥有者
The center for scientific computing @ University of Basel