scicore.slurm

CI-Tests Galaxy-Versionen
CI-Tests Galaxy-Versionen

scicore.slurm

Ein SLURM-Cluster konfigurieren

Diese Rolle konfiguriert:

  • SLURM-Buchhaltungsdaemon
  • SLURM-Masterdaemon
  • SLURM-Client-Knoten
  • SLURM-Einreichungs-Hosts

SLURM-Benutzer werden automatisch bei der ersten Auftragsübermittlung in die SLURM-Buchhaltungsdatenbank aufgenommen, indem ein Lua-Job-Übermittlungs-Plugin verwendet wird.

Beispiel Inventar

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

Sobald du dein Inventar definiert hast, stelle sicher, dass du die Variable "slurm_master_host" festlegst, die auf den Hostnamen deines Master-Hosts zeigt.

Rollenvariablen

# Füge alle SLURM-Hosts zu /etc/hosts auf jeder Maschine hinzu
# IPs kommen von ansible facts hostvars[ansible_hostname]['ansible_default_ipv4']['address']
slurm_update_etc_hosts_file: true

# Setze diese Variable auf ein Git-Repo, wenn du deine SLURM-Konfiguration in Git hast
# slurm_config_git_repo: ""

# Standardmäßig wird die Rolle ein Lua-Übermittlungs-Plugin bereitstellen, das die Benutzer automatisch zur SLURM-Buchhaltungsdatenbank hinzufügt
# Überprüfe "templates/job_submit.lua.j2" für Details
slurm_config_deploy_lua_submit_plugin: true

# Verwende SLURM-Konfigurationslos https://slurm.schedmd.com/configless_slurm.html
# Diese Funktion erfordert SLURM 20.02 oder höher
# Nur auf RedHat-Systemen getestet, sollte aber auch auf Ubuntu funktionieren, wenn du Ubuntu 20.02 oder höher installierst
slurm_configless: false

# Bereitstellung erforderlicher Skripte im SLURM-Master für Cloud-Planung mit OpenStack (https://slurm.schedmd.com/elastic_computing.html)
# Dies wird "ResumeProgram", "SuspendProgram" für slurm.conf bereitstellen
# und /etc/openstack/clouds.yaml mit Anwendungsanmeldeinformationen im SLURM-Master
# Dies erfordert eine benutzerdefinierte slurm.conf. Überprüfe "templates/slurm.conf.j2.cloud.example" für ein Beispiel
# Es wird empfohlen, [die interne DNS-Auflösung von OpenStack] (https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#the-networking-service-internal-dns-resolution) zu verwenden
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-Clustername, wie in slurm.cfg definiert
slurm_cluster_name: slurm-cluster

# Setze diese Variable auf den ansible_hostname des SLURM-Masters
slurm_master_host: slurm-master.cluster.com
# Setze diese Variable auf den ansible_hostname des SLURM-DBD-Hosts (standardmäßig derselbe wie der SLURM-Master)
slurm_dbd_host: "{{ slurm_master_host }}"

# Gruppe in deinem Ansible-Inventar, die alle SLURM-Worker enthält
slurm_workers_group: slurm_workers

# Gruppe in deinem Ansible-Inventar, die alle Einreichungs-Hosts enthält
slurm_submit_group: slurm_submit_hosts

# Dies ist die Einstellung "StateSaveLocation" in slurm.conf
slurm_slurmctld_spool_path: /var/spool/slurmctld

# Dies ist die Einstellung "SlurmdSpoolDir" in slurm.conf
slurm_slurmd_spool_path: /var/spool/slurmd

# Einstellungen für den SLURM-Buchhaltungsdaemon
slurm_slurmdbd_mysql_db_name: slurm
slurm_slurmdbd_mysql_user: slurm
slurm_slurmdbd_mysql_password: aadAD432saAdfaoiu

# SLURM-Benutzer und -Gruppe, die die SLURM-Daemons ausführt
slurm_user:
  RedHat: "root"
  Debian: "slurm"

slurm_group:
  RedHat: "root"
  Debian: "slurm"

# EPEL wird benötigt, um SLURM-Pakete und einige Abhängigkeiten auf CentOS/RedHat-Systemen zu installieren.
slurm_add_epel_repo: true

# Du kannst dies auf true setzen, um die openhpc YUM-Repos auf CentOS zu aktivieren
# Wenn du planst, Pakete von OpenHPC zu verwenden, solltest du auch die Liste der Pakete für RedHat unten aktualisieren
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-Pakete, die wir in jedem Clustermitglied installieren
slurm_packages_common:
  RedHat:
    - slurm
    - slurm-doc
    - slurm-contribs
  Debian:
    - slurm-client

# SLURM-Pakete, die wir nur im Master-Knoten installieren
slurm_packages_master:
  RedHat:
    - slurm-slurmctld
    #  - slurm-slurmrestd
  Debian:
    - slurmctld

# SLURM-Pakete, die wir nur im SLURM-DBD-Knoten installieren
slurm_packages_slurmdbd:
  RedHat:
    - slurm-slurmdbd
    - mariadb-server
  Debian:
    - slurmdbd
    - mariadb-server

# SLURM-Pakete, die wir nur in den Worker-Knoten installieren
slurm_packages_worker:
  RedHat:
    - slurm-slurmd
    - vte-profile  # vermeide Fehlermeldung "bash __vte_prompt_command command not found" bei SLURM-interaktive Shells
  Debian:
    - slurmd

Konfigurieren der SLURM-Cloud-Planung für OpenStack

Diese Rolle kann deinen SLURM-Cluster zur Nutzung der Cloud-Planung in einer OpenStack-Cloud konfigurieren.

Bevor du versuchst, es zu konfigurieren, wird empfohlen, den Leitfaden zur Cloud-Planung von SLURM und die Dokumentation zur Konfigurationslosigkeit von SLURM zu lesen.

Stelle sicher, dass deine OpenStack-Cloud die interne DNS-Auflösung aktiviert hat. Dies ist erforderlich, damit der SLURM-Master den Hostnamen eines neuen Knotens nach dem Booten über das interne DNS von OpenStack auflösen kann.

Du solltest auch die Beispiel-Konfigurationsdatei slurm.conf.j2.cloud.example überprüfen, die mit dieser Rolle bereitgestellt wird. slurm.conf.j2.cloud.example wird als Beispiel bereitgestellt und du musst sie an deine spezifischen Bedürfnisse anpassen und die Rollenvariable slurm_conf_custom_template auf deine benutzerdefinierte Konfiguration verweisen.

Überblick über die Cloud-Planungskonfiguration

  • Wie in den Dokumenten zur Cloud-Planung von SLURM beschrieben, wenn ein Benutzer einen Job an einen Cloud-Knoten übermittelt, führt der SLURM-Master das in der slurm.conf definierte "ResumeProgram" aus, um den Rechenknoten in der Cloud zu starten.

  • Das ResumeProgram, das mit dieser Rolle bereitgestellt wird, ist ein Python-Skript, das die OpenStack-API verwendet, um die Rechenknoten zu starten. Dieses Python-Skript benötigt den OpenStack-Client, der in einer virtuellen Umgebung installiert ist. Das Argument für das Programm sind die Namen der Knoten (unter Verwendung des Hostlist-Ausdrucks von SLURM), die eingeschaltet werden sollen.

  • Wenn ein Rechenknoten inaktiv ist, wird der SLURM-Master das SuspendProgram ausführen, um die Knoten herunterzufahren. Das Argument für das Programm sind die Namen der Knoten (unter Verwendung des Hostlist-Ausdrucks von SLURM), die heruntergefahren werden sollen.

  • Die für das Booten von dynamischen Rechenknoten verwendeten OpenStack-Optionen (Flavor, Image, Netzwerk, Keypair und Sicherheitsgruppen) müssen als Knotenmerkmale in slurm.conf definiert werden, z.B.
    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

  • Sowohl "ResumeProgram" als auch "SuspendProgram" benötigen eine OpenStack-Konfigurationsdatei mit gültigen Anmeldeinformationen. Diese Datei wird standardmäßig nach "/etc/openstack/clouds.yaml" im SLURM-Master-Host geschrieben. Es wird empfohlen, eine OpenStack-Anwendungsanmeldeinformation zu verwenden. Überprüfe die Vorlage templates/clouds.yaml.j2, um die erforderlichen Rollenvariablen zur Befüllung dieser Konfigurationsdatei zu finden.

  • Sowohl "ResumeProgram" als auch "SuspendProgram" schreiben Protokolle in "/var/log/messages" im SLURM-Master-Host. Du kannst dieses Protokoll zu Debugging-Zwecken beim Booten von Cloud-Knoten überprüfen.

Empfohlener Ansatz für die Bereitstellung von SLURM mit Cloud-Planung in OpenStack

Stelle sicher, dass du SLURM 20.02 oder höher in deinen Repositories hast, damit du Unterstützung für den konfigurationslosen Modus von SLURM hast.

Starte mindestens 3 Maschinen:

  • SLURM-Master
  • SLURM-Einreichung (Login-Knoten)
  • SLURM-Worker (dies kann eine kleine Maschine sein, die wir nur verwenden, um ein OpenStack-Image mit der erforderlichen Konfiguration für die Cloud-Rechenknoten zu erstellen)

Fülle dein Ansible-Inventar und füge die Maschinen den richtigen Inventargruppen zu, auf die durch die Rollenvariablen slurm_submit_group und slurm_workers_group verwiesen wird.

Definiere die Rollenvariable slurm_master_host mit dem Hostnamen des SLURM Masters. Jede Maschine im Cluster sollte in der Lage sein, diesen Hostnamen in die IP des Masters aufzulösen. Jede Maschine im Cluster muss in der Lage sein, sich mit dieser Maschine zu verbinden (überprüfe deine Sicherheitsgruppen und die lokale Firewall).

Erstelle eine Kopie von slurm.conf.j2.cloud.example, passe sie deinen Bedürfnissen an und verweise die Rollenvariable slurm_conf_custom_template auf deine Konfigurationsdatei. Deine Konfigurationsdatei sollte eine Partition namens "static" bereitstellen, die nur den SLURM-Worker-Maschinen enthält, die wir zuvor gestartet haben.

Definiere die Ansible-Variable slurm_configless: true, damit die Rechenknoten im konfigurationslosen Modus konfiguriert werden. Wenn ein SLURM-Worker im konfigurationslosen Modus konfiguriert ist, wird der SLURM-Daemon beim ersten Booten den SLURM-Master kontaktieren und die slurm.conf nach /var/run/slurm/conf/slurm.conf herunterladen.

Führe die Rolle aus, um alle deine Maschinen zu konfigurieren, und du solltest einen funktionierenden SLURM-Cluster mit einem einzelnen Knoten in der Partition "static" erhalten.

Jetzt kannst du deine benutzerdefinierten Playbooks oder Skripte ausführen, um den SLURM-Worker zu personalisieren, z.B. NFS-Mounts hinzufügen, LDAP-Clients installieren, Softwaremodule aktivieren, zusätzliche Software installieren usw.

Erstelle ein OpenStack-Image von der Maschine in der Partition "static", das deine erforderlichen Anpassungen enthält. Überprüfe create-slurm-compute-node-image.yml für ein Beispiel.

Aktualisiere deine Kopie von slurm.conf.j2.cloud.example und definiere die richtigen Knotenmerkmale mit dem OpenStack-Image-Namen, dem Schlüsselnamen, dem Netzwerknamen und den Sicherheitsgruppen. Führe das Playbook erneut aus, um deine aktualisierte Konfiguration bereitzustellen.

Jetzt (hoffentlich) solltest du einen funktionierenden SLURM-Cluster mit Unterstützung für Cloud-Planung haben. Du solltest die SLURM-Cloud-Partitionen beim Ausführen von sinfo -Nel sehen. Versuche, einen Job an eine der Cloud-Partitionen zu übermitteln, und überwache /var/log/messages und /var/log/slurm/slurmctld.log im SLURM-Master-Host.

Über das Projekt

Install and configure a Slurm cluster

Installieren
ansible-galaxy install scicore.slurm
GitHub Repository
Lizenz
Unknown
Downloads
21.6k
Besitzer
The center for scientific computing @ University of Basel