Freigeben über


CycleCloud Slurm 3.0

Wir schreiben die Slurm Scheduler-Unterstützung im Rahmen der CycleCloud 8.4.0-Version um. Zu den wichtigsten Features gehören:

  • Unterstützung für dynamische Knoten und dynamische Partitionen über dynamische Knotenarrays. Dieses Feature unterstützt sowohl die Größe einzelner als auch mehrerer virtueller Computer (VM).
  • Neue Slurm-Versionen 23.02 und 22.05.8.
  • Kostenberichterstattung über die azslurm CLI.
  • azslurm CLI-basierter Autoscaler.
  • Ubuntu 20-Unterstützung.
  • Die Notwendigkeit für das Topologie-Plug-In und alle zugehörigen Einreichungs-Plug-Ins wurden entfernt.

Slurm Clusters in CycleCloud-Versionen vor 8.4.0

Weitere Informationen finden Sie unter Transitioning from 2.7 to 3.0.

Vornehmen von Clusteränderungen

Der Slurm-Cluster, den Sie in CycleCloud bereitstellen, enthält eine CLI azslurm , die Sie beim Vornehmen von Änderungen am Cluster unterstützt. Nachdem Sie Änderungen am Cluster vorgenommen haben, führen Sie den folgenden Befehl als Stamm auf dem Slurm-Schedulerknoten aus, um die azure.conf neu zu erstellen und die Knoten im Cluster zu aktualisieren:

      $ sudo -i
      # azslurm scale

Der Befehl erstellt die Partitionen mit der richtigen Anzahl von Knoten, richtet das richtige gres.confein und startet die slurmctld.

Knoten werden nicht mehr vorkonfiguriert.

Ab CycleCloud Version 3.0.0 des Slurm-Projekts werden die Knoten nicht mehr vorab erstellt. Sie erstellen Knoten, indem Sie azslurm resume aufrufen oder sie manuell in CycleCloud mithilfe der CLI erstellen.

Erstellen zusätzlicher Partitionen

Die Standardvorlage, die mit Azure CycleCloud ausgeliefert wird, verfügt über drei Partitionen (hpc, htcund dynamic), und Sie können benutzerdefinierte Knotenarrays definieren, die direkt slurm-Partitionen zugeordnet sind. Fügen Sie der Clustervorlage beispielsweise den folgenden Abschnitt hinzu, um eine GPU-Partition zu erstellen:

   [[nodearray gpu]]
   MachineType = $GPUMachineType
   ImageName = $GPUImageName
   MaxCoreCount = $MaxGPUExecuteCoreCount
   Interruptible = $GPUUseLowPrio
   AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs

      [[[configuration]]]
      slurm.autoscale = true
      # Set to true if nodes are used for tightly-coupled multi-node jobs
      slurm.hpc = false

      [[[cluster-init cyclecloud/slurm:execute:3.0.1]]]
      [[[network-interface eth0]]]
      AssociatePublicIpAddress = $ExecuteNodesPublic

Dynamische Partitionen

Ab CycleCloud, Version 3.0.1, unterstützt die Lösung dynamische Partitionen. Sie können eine nodearray Abbildung zu einer dynamischen Partition erstellen, indem Sie den folgenden Code hinzufügen. Der myfeature Wert kann eine beliebige Featurebeschreibung oder mehrere Features sein, getrennt durch ein Komma.

      [[[configuration]]]
      slurm.autoscale = true
      # Set to true if nodes are used for tightly-coupled multi-node jobs
      slurm.hpc = false
      # This is the minimum, but see slurmd --help and [slurm.conf](https://slurm.schedmd.com/slurm.conf.html) for more information.
      slurm.dynamic_config := "-Z --conf \"Feature=myfeature\""

Der freigegebene Codeausschnitt generiert eine dynamische Partition wie den folgenden Code:

# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns

Verwenden dynamischer Partitionen zur automatischen Skalierung

Standardmäßig enthält eine dynamische Partition keine Knoten. Sie können Knoten über CycleCloud starten oder azslurm resume manuell ausführen. Die Knoten verbinden den Cluster mit dem von Ihnen ausgewählten Namen. Da Slurm diese Knoten jedoch im Voraus nicht kennt, kann es sie nicht automatisch skalieren.

Stattdessen können Sie Knoteneinträge wie folgt erstellen, sodass Slurm sie automatisch skalieren kann.

scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD

Ein weiterer Vorteil dynamischer Partitionen besteht darin, dass Sie mehrere VM-Größen in derselben Partition unterstützen können. Fügen Sie einfach den Namen der VM-Größe als Feature hinzu, und dann kann azslurm unterscheiden, welche VM-Größe Sie verwenden möchten.

Anmerkung Die VM-Größe wird implizit hinzugefügt. Sie müssen es nicht zu slurm.dynamic_config hinzufügen.

scontrol create nodename=f4-[1-10] Feature=myfeature,Standard_F4 State=CLOUD
scontrol create nodename=f8-[1-10] Feature=myfeature,Standard_F8 State=CLOUD

Beides gilt: Wenn Sie diese Knoten in einem State=Cloud Zustand erstellen, werden sie für die automatische Skalierung wie andere Knoten verfügbar.

Um mehrere VM-Größen in einem CycleCloud-Knotenarray zu unterstützen, können Sie die Vorlage ändern, um mehrere VM-Größen durch Hinzufügen Config.Mutiselect = truezuzulassen.

        [[[parameter DynamicMachineType]]]
        Label = Dyn VM Type
        Description = The VM type for Dynamic nodes
        ParameterType = Cloud.MachineType
        DefaultValue = Standard_F2s_v2
        Config.Multiselect = true

Dynamische Skalierung nach unten

Standardmäßig werden alle Knoten in der dynamischen Partition wie die anderen Partitionen herunterskaliert. Informationen zum Deaktivieren der dynamischen Partition finden Sie unter "SuspendExcParts".

Manuelle Skalierung

Wenn cyclecloud_slurm erkennt, dass die Autoskala deaktiviert ist (SuspendTime=-1), wird der FUTURE-Zustand verwendet, um Knoten anzuzeigen, die heruntergefahren werden, anstatt sich auf den Energiezustand in Slurm zu verlassen. Wenn die automatische Skalierung aktiviert ist, zeigt sinfo Knoten als idle~ an. Wenn die automatische Skalierung deaktiviert ist, sinfo werden keine inaktiven Knoten angezeigt. Sie können ihre Definition weiterhin mit scontrol show nodes --future anzeigen.

Um neue Knoten zu starten, führen Sie /opt/azurehpc/slurm/resume_program.sh node_list aus (z. B. htc-[1-10]).

Um Knoten herunterzufahren, führen Sie /opt/azurehpc/slurm/suspend_program.sh node_list aus (z. B. htc-[1-10]).

Um einen Cluster in diesem Modus zu starten, fügen Sie SuspendTime=-1 der ergänzenden Slurm-Konfiguration in der Vorlage hinzu.

Um einen Cluster in diesen Modus zu wechseln, fügen Sie SuspendTime=-1 zur slurm.conf Datei hinzu und führen Sie scontrol reconfigure aus. Führen Sie azslurm remove_nodes und azslurm scale dann aus.

Problembehandlung

Übergang von 2.7 auf 3.0

  1. Der Installationsordner wurde geändert von /opt/cycle/slurm auf /opt/azurehpc/slurm.

  2. Protokolle zur automatischen Skalierung befinden sich jetzt in /opt/azurehpc/slurm/logs anstelle von /var/log/slurmctld. Die slurmctld.log Datei befindet sich in diesem Ordner.

  3. Das cyclecloud_slurm.sh Skript ist nicht mehr verfügbar. Ein neues CLI-Tool namens azslurm ersetzt cyclecloud_slurm.sh. Sie führen azslurm als Root aus, und es unterstützt die Autovervollständigung.

    [root@scheduler ~]# azslurm
    usage: 
    accounting_info      - 
    buckets              - Prints out autoscale bucket information, like limits etc
    config               - Writes the effective autoscale config, after any preprocessing, to stdout
    connect              - Tests connection to CycleCloud
    cost                 - Cost analysis and reporting tool that maps Azure costs to Slurm Job Accounting data. This is an experimental feature.
    default_output_columns - Output what are the default output columns for an optional command.
    generate_topology    - Generates topology plugin configuration
    initconfig           - Creates an initial autoscale config. Writes to stdout
    keep_alive           - Add, remove or set which nodes should be prevented from being shutdown.
    limits               - 
    nodes                - Query nodes
    partitions           - Generates partition configuration
    refresh_autocomplete - Refreshes local autocomplete information for cluster specific resources and nodes.
    remove_nodes         - Removes the node from the scheduler without terminating the actual instance.
    resume               - Equivalent to ResumeProgram, starts and waits for a set of nodes.
    resume_fail          - Equivalent to SuspendFailProgram, shuts down nodes
    retry_failed_nodes   - Retries all nodes in a failed state.
    scale                - 
    shell                - Interactive python shell with relevant objects in local scope. Use the --script to run python scripts
    suspend              - Equivalent to SuspendProgram, shuts down nodes
    wait_for_resume      - Wait for a set of nodes to converge.
    
  4. CycleCloud erstellt keine Knoten im Voraus. Sie erstellt nur Knoten, wenn Sie sie benötigen.

  5. Alle Slurm-Binärdateien befinden sich in der azure-slurm-install-pkg*.tar.gz Datei unter slurm-pkgs. Sie werden aus einer bestimmten binären Version abgerufen. Die aktuelle binäre Version ist 4.0.0.

  6. Bei MPI-Aufträgen ist die einzige Standardnetzgrenze die Partition. Im Gegensatz zu Version 2.x enthält jede Partition nicht mehrere "Platzierungsgruppen". Sie haben also nur eine zusammengelegte VM-Skalierungsgruppe pro Partition. Das Topologie-Plug-In ist nicht mehr erforderlich, sodass das Auftragsübermittlungs-Plug-In nicht mehr benötigt wird. Stattdessen ist das Übermitteln an mehrere Partitionen jetzt die empfohlene Option für Anwendungsfälle, die das Übermitteln von Aufträgen an mehrere Platzierungsgruppen erfordern.

CycleCloud unterstützt einen Standardsatz von Autostop-Attributen für verschiedene Scheduler:

Merkmal BESCHREIBUNG
cyclecloud.cluster.autoscale.stop_enabled Aktiviert den Autostopp auf diesem Knoten. [wahr/falsch]
cyclecloud.cluster.autoscale.idle_time_after_jobs Wie lange (in Sekunden) ein Knoten nach dem Abschluss von Aufträgen im Leerlauf liegen soll, bevor er automatisch gestoppt wird.
cyclecloud.cluster.autoscale.idle_time_before_jobs Wie lange (in Sekunden) ein Knoten vor dem Abschluss von Aufträgen im Leerlauf liegen soll, bevor er automatisch gestoppt wird.