Slurm-Cluster in Compute Engine bereitstellen

In dieser Anleitung wird beschrieben, wie Sie einen Slurm-Cluster in Compute Engine bereitstellen. Der Slurm Ressource Manager ist ein beliebtes Tool für die Ressourcenverwaltung, das in vielen Hochleistungsrechenzentren verwendet wird. Eine Erklärung der Terminologie sowie Anwendungsfälle für Hochleistungs-Computing finden Sie unter Cluster für umfangreiches technisches Computing in der Cloud verwenden.

Das folgende Diagramm zeigt die Konfiguration, die Sie in dieser Anleitung erstellen.

Architekturdiagramm für einen in Compute Engine installierten Slurm-Cluster

Als Cluster-Arbeitslastmanager führt Slurm Folgendes aus:

  • Nutzern Ressourcen (Rechenknoten) zuweisen
  • Struktur zum Starten, Ausführen und Überwachen der Arbeit auf den Knoten bereitstellen
  • Warteschlange mit ausstehenden Aufgaben verwalten

Die für diese Anleitung entwickelte Bereitstellung ist eine vereinfachte Clusterarchitektur, die Nutzer bei der Ausführung der Arbeitslast für eine einzelne Anwendung unterstützt. Für Bereitstellungen mit mehreren Arbeitslasten, umfangreiche Produktionsbereitstellungen und Hybridbereitstellungen können Sie andere Konfigurationen verwenden, die mit lokalen oder Multi-Cloud-Clustern funktionieren. Diese Konfigurationen werden in dieser Anleitung jedoch nicht beschrieben.

In dieser Anleitung interagieren Sie über den Anmeldeknoten (Hauptknoten) mit dem System. Nachdem der Cluster bereitgestellt wurde, stellen Sie über SSH eine Verbindung zum Anmeldeknoten her, installieren die Anwendungen und senden die Jobs über die Slurm-Befehlszeilentools zur Verarbeitung. Der Slurm-Planer, der auf dem Controller-Knoten ausgeführt wird, erstellt die Jobs in der Warteschlange, indem er verfügbare Ressourcen mit den Jobanforderungen abgleicht und die Ausführung der Jobs auf den Rechenknoten verwaltet. Der NFS-Server bietet gemeinsamen, freigegebenen Speicherplatz für Dateien.

Ziele

  • Slurm-Cluster mit Cloud Deployment Manager bereitstellen
  • Job mit Slurm ausführen
  • Clusterinformationen abfragen und ausgeführte Jobs in Slurm überwachen
  • Knoten entsprechend den Jobparametern und Anforderungen automatisch skalieren

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Compute Engine and Deployment Manager APIs aktivieren.

    Aktivieren Sie die APIs

  5. Aktivieren Sie Cloud Shell in der Cloud Console.

    Cloud Shell aktivieren

    Unten in der Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Cloud SDK einschließlich des gcloud-Befehlszeilentools vorinstalliert ist. Die Werte sind bereits für Ihr aktuelles Projekt festgelegt. Das Initialisieren der Sitzung kann einige Sekunden dauern.

Slurm-Cluster bereitstellen

In diesem Abschnitt bereiten Sie die Clusterkonfiguration vor, stellen mit Deployment Manager den Slurm-Cluster in Google Cloud bereit und prüfen dann, ob der Cluster funktionsfähig ist.

Clusterkonfiguration vorbereiten

  1. Klonen Sie in Cloud Shell das GitHub-Repository slurm-gcp.

    git clone https://github.com/SchedMD/slurm-gcp.git
    
  2. Legen Sie die folgenden Umgebungsvariablen fest:

    export CLUSTER_DEPLOY_NAME="cluster-deployment-name"
    export CLUSTER_NAME="cluster-name"
    export CLUSTER_REGION="cluster-region"
    export CLUSTER_ZONE="cluster-zone"
    

    Ersetzen Sie Folgendes:

    • cluster-deployment-name: Eindeutiger Name für die Clusterbereitstellung.
    • cluster-name: Eindeutiger Name für den Cluster.
    • cluster-region: Region, in der Sie den Cluster bereitstellen. Wählen Sie eine Region in der Nähe Ihres Standorts aus. Weitere Informationen finden Sie unter Regionen und Zonen.
    • cluster-zone: Zone, in der Sie den Cluster bereitstellen.
  3. Kopieren Sie im Ordner slurm-gcp die Datei slurm-cluster.yaml in die Datei ${CLUSTER_DEPLOY_NAME}.yaml:

    cd slurm-gcp
    cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
    
  4. Ändern Sie in einem Texteditor die Datei ${CLUSTER_DEPLOY_NAME}.yaml für Ihre Umgebung. Verwenden Sie die in der Datei slurm.jinja.schema definierten Typen, die die Standardwerte und zulässigen Werte für alle Konfigurationsattribute außer dem Wert default_users angeben. Nehmen Sie die folgenden erforderlichen Änderungen vor:

    • cluster_name: Ändern Sie den Namen des Clusters in cluster-name.
    • Ersetzen Sie region und zone: durch cluster-region und cluster-zone.
    • compute_machine_type (optional): Wenn Sie einen anderen Maschinentyp verwenden möchten, ändern Sie den Wert compute_machine_type. Wenn Sie beispielsweise mehr CPU-Kerne oder Speicher benötigen, als mit der Standardeinstellung n1-standard-2 verfügbar sind, wählen Sie n1-standard-4 aus. Weitere Informationen finden Sie unter Maschinentypen.
    • vpc_net und vpc_subnet (optional): Verwenden Sie ein vorhandenes VPC-Netzwerk (Virtual Private Cloud) und ein VPC-Subnetz. Die Netzwerk- und Subnetzanforderungen werden in der Datei slurm.jinja.schema beschrieben. Wenn Sie keine Werte angeben, wird ein neues Netzwerk oder Subnetz für den Cluster erstellt. Weitere Informationen finden Sie unter VPC-Netzwerke.
  5. Speichern Sie die Datei.

Slurm-Cluster mit Deployment Manager bereitstellen

  1. Verwenden Sie in Cloud Shell den Deployment Manager, um Ihren Cluster in Google Cloud bereitzustellen:

    gcloud deployment-manager deployments \
        --project="$(gcloud config get-value core/project)" \
        create $CLUSTER_DEPLOY_NAME \
        --config ${CLUSTER_DEPLOY_NAME}.yaml
    

    Die Ausgabe sieht etwa so aus:

    The fingerprint of the deployment is VWVaIYX1mFpjv9UDhzalYQ==
    Waiting for create [operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545]...done.
    Create operation operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545 completed successfully.
    NAME                                   TYPE                   STATE       ERRORS  INTENT
    helloworld-all-internal-firewall-rule  compute.v1.firewall    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-compute-image               compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-compute1                    compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-compute2                    compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-controller                  compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-login1                      compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-router                      compute.v1.router      IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-slurm-network               compute.v1.network     IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-slurm-subnet                compute.v1.subnetwork  IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-ssh-firewall-rule           compute.v1.firewall    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    
  2. Die Konfiguration des Clusters dauert fünf bis zehn Minuten. Verfolgen Sie den Fortschritt der Konfiguration:

    gcloud compute ssh ${CLUSTER_NAME}-controller \
        --command "sudo journalctl -fu google-startup-scripts.service" \
        --zone $CLUSTER_ZONE
    

    Nach Abschluss des Skripts ist Ihr Slurm-Cluster einsatzbereit. Die Ausgabe endet mit der folgenden Zeile:

    Started Google Compute Engine Startup Scripts.
    
  3. Wenn Sie die Konfiguration nicht länger beobachten möchten, drücken Sie Strg+C.

Cluster auf Betriebsbereitschaft prüfen

  1. Prüfen Sie in Cloud Shell, ob der Cluster bereit ist. Melden Sie sich dazu beim Anmeldeknoten an:

    export CLUSTER_LOGIN_NODE=$(gcloud compute instances list \
        --zones ${CLUSTER_ZONE} \
        --filter="name ~ .*login." \
        --format="value(name)" | head -n1)
    gcloud compute ssh ${CLUSTER_LOGIN_NODE} \
        --zone $CLUSTER_ZONE
    

    Der Cluster ist bereit, wenn die Ausgabe in etwa so aussieht:

                                     SSSSSSS
                                    SSSSSSSSS
                                    SSSSSSSSS
                                    SSSSSSSSS
                            SSSS     SSSSSSS     SSSS
                           SSSSSS               SSSSSS
                           SSSSSS    SSSSSSS    SSSSSS
                            SSSS    SSSSSSSSS    SSSS
                    SSS             SSSSSSSSS             SSS
                   SSSSS    SSSS    SSSSSSSSS    SSSS    SSSSS
                    SSS    SSSSSS   SSSSSSSSS   SSSSSS    SSS
                           SSSSSS    SSSSSSS    SSSSSS
                    SSS    SSSSSS               SSSSSS    SSS
                   SSSSS    SSSS     SSSSSSS     SSSS    SSSSS
              S     SSS             SSSSSSSSS             SSS     S
             SSS            SSSS    SSSSSSSSS    SSSS            SSS
              S     SSS    SSSSSS   SSSSSSSSS   SSSSSS    SSS     S
                   SSSSS   SSSSSS   SSSSSSSSS   SSSSSS   SSSSS
              S    SSSSS    SSSS     SSSSSSS     SSSS    SSSSS    S
        S    SSS    SSS                                   SSS    SSS    S
        S     S                                                   S     S
                    SSS
                    SSS
                    SSS
                    SSS
     SSSSSSSSSSSS   SSS   SSSS       SSSS    SSSSSSSSS   SSSSSSSSSSSSSSSSSSSS
    SSSSSSSSSSSSS   SSS   SSSS       SSSS   SSSSSSSSSS  SSSSSSSSSSSSSSSSSSSSSS
    SSSS            SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
    SSSS            SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
    SSSSSSSSSSSS    SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
     SSSSSSSSSSSS   SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
             SSSS   SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
             SSSS   SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
    SSSSSSSSSSSSS   SSS   SSSSSSSSSSSSSSS   SSSS        SSSS     SSSS     SSSS
    SSSSSSSSSSSS    SSS    SSSSSSSSSSSSS    SSSS        SSSS     SSSS     SSSS
    
  2. Drücken Sie Control+D, um den Cluster zu verlassen.

  3. Wenn der Cluster bereit ist, planen Sie einen Job, um zu prüfen, ob er ordnungsgemäß funktioniert. Dieser Job führt auf mehreren Knoten im Cluster den Befehl hostname aus.

    gcloud compute ssh ${CLUSTER_NAME}-login1 \
        --command 'sbatch -N2 --wrap="srun hostname"' --zone $CLUSTER_ZONE
    
    gcloud compute ssh ${CLUSTER_NAME}-login1 \
        --command 'cat slurm-*.out'  --zone $CLUSTER_ZONE
    

    Die Ausgabe sieht etwa so aus:

    helloworld-compute1
    helloworld-compute2
    

    Sie haben jetzt einen funktionsfähigen Cluster.

Autoscaling des Slurm-Clusters

Wenn Sie einen Slurm-Cluster bereitstellen, geben Sie Werte für die Attribute max_node_count und static_node_count an. Der Wert max_node_count bestimmt die maximale Anzahl von Rechenknoten, die Ihr Cluster zu einer bestimmten Zeit ausführt. Der Wert static_node_count gibt die Anzahl der Rechenknoten an, die immer ausgeführt werden. Standardmäßig sind in der Datei slurm-cluster.yaml die Parameter max_node_count auf 10 und static_node_count auf 2 festgelegt.

Die Differenz zwischen den beiden Werten max_node_count und static_node_count entspricht der Anzahl der sitzungsspezifischen Knoten im Cluster. Sitzungsspezifische Knoten werden bei Bedarf als Reaktion auf Jobplanungsanfragen erstellt. Nach Abschluss des Jobs, den sie zum Ausführen erstellt haben, werden die Knoten gelöscht, wenn der Cluster sie nicht zum Ausführen anderer Jobs verwenden kann. In Google Cloud skaliert der Energiesparmechanismus von Slurm Cluster automatisch, indem sitzungsspezifische Knoten nur bei Bedarf instanziiert werden.

  1. Sehen Sie sich in Cloud Shell die Knotenanzahl an:

    sinfo
    

    Die Ausgabe sieht etwa so aus:

    PARTITION AVAIL TIMELIMIT  NODES  STATE   NODELIST
    debug*    up    infinite   8      idle~   demo-compute[3-10]
    debug*    up    infinite   2      idle    demo-compute[1-2]
    

    Das Suffix ~ im STATE-Deskriptor idle in der ersten Ausgabezeile gibt an, dass sich die acht sitzungsspezifischen Knoten im Energiesparmodus befinden.

  2. Erstellen Sie drei sitzungsspezifische Knoten, um den Cluster automatisch zu skalieren:

    sbatch -N5 --wrap="srun hostname"
    

    Die Ausgabe sieht in etwa so aus:

    Submitted batch job JOB_ID
    
  3. Sehen Sie sich die Knotenanzahl noch einmal an:

    sinfo
    

    Die Ausgabe sieht etwa so aus:

    PARTITION AVAIL  TIMELIMIT  NODES  STATE   NODELIST
    debug*    up     infinite   3      alloc#  demo-compute[3-5]
    debug*    up     infinite   5      idle~   demo-compute[6-10]
    debug*    up     infinite   2      idle    demo-compute[1-2]
    

    Das Suffix # des STATE-Deskriptors alloc in der ersten Ausgabezeile gibt an, dass drei sitzungsspezifische Knoten erstellt werden. Nachdem die zusätzlichen Knoten erstellt und konfiguriert wurden, führen sie den Job aus und nach einer kurzen Verzögerung werden sie gelöscht.

Bereinigen

Am einfachsten können Sie die Abrechnung deaktivieren, wenn Sie das Cloud-Projekt löschen, das Sie für die Anleitung erstellt haben. Alternativ haben Sie die Möglichkeit, die einzelnen Ressourcen zu löschen.

Projekt löschen

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Slurm-Cluster löschen

  • Löschen Sie den Cluster:

    gcloud deployment-manager deployments delete slurm
    

Nächste Schritte