Share via


OpenPBS

OpenPBS kann auf einfache Weise auf einem CycleCloud-Cluster aktiviert werden, indem sie den "run_list" im Konfigurationsabschnitt Ihrer Clusterdefinition ändern. Die beiden grundlegenden Komponenten eines PBS Professional-Clusters sind der Knoten "Master", der ein freigegebenes Dateisystem bereitstellt, auf dem die PBS Professional-Software ausgeführt wird, und die Knoten "execute", die die Hosts sind, die das freigegebene Dateisystem bereitstellen und die gesendeten Aufträge ausführen. Beispielsweise sieht ein einfacher Clustervorlagenausschnitt wie folgt aus:

[cluster my-pbspro]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[pbspro_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

Das Importieren und Starten eines Clusters mit Definition in CycleCloud führt zu einem einzelnen "Master"-Knoten. Ausführen von Knoten kann dem Cluster über den cyclecloud add_node Befehl hinzugefügt werden. So fügen Sie beispielsweise 10 weitere Ausführungsknoten hinzu:

cyclecloud add_node my-pbspro -t execute -c 10

PBS Resource-based Autocaling

Cyclecloud verwaltet zwei Ressourcen, um die dynamische Bereitstellungsfunktion zu erweitern. Diese Ressourcen sind Knotenarray und Computertyp.

Wenn Sie einen Auftrag übermitteln und eine Nodearray-Ressource qsub -l nodearray=highmem -- /bin/hostname angeben, fügt CycleCloud knoten dem Knotenarray mit dem Namen "highmem" hinzu. Wenn kein solcher Knotenarray vorhanden ist, bleibt der Auftrag leer.

Ebenso, wenn eine Machinetype-Ressource angegeben wird, die eine Auftragsübermittlung, z. B. qsub -l machinetype:Standard_L32s_v2 my-job.sh, dann CycleCloud automatisch die "Standard_L32s_v2" im Knotenarray "execute" (Standard) abstreckt. Wenn dieser Computertyp im Knotenarray "execute" nicht verfügbar ist, bleibt der Auftrag leer.

Diese Ressourcen können in Kombination verwendet werden:

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

dies wird nur automatisch skalieren, wenn die Computer "Standard_HB60rs" ein Knotenarray "hpc" angegeben werden.

Hinzufügen zusätzlicher Warteschlangen, die Knotenarrays zugewiesen sind

Bei Clustern mit mehreren Knotenarrays ist es üblich, separate Warteschlangen zu erstellen, um Aufträge automatisch an den entsprechenden VM-Typ weiterzuleiten. In diesem Beispiel wird davon ausgegangen, dass das folgende "gpu"-Knotenarray in Ihrer Clustervorlage definiert wurde:

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

Nachdem Sie die Clustervorlage importiert und den Cluster gestartet haben, können die folgenden Befehle auf dem Serverknoten ausgeführt werden, um die "gpu"-Warteschlange zu erstellen:

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Hinweis

Die obige Warteschlangendefinition packt alle virtuellen Computer in der Warteschlange in eine einzelne VM-Skalierung, die zum Unterstützen von MPI-Aufträgen festgelegt ist. Um die Warteschlange für serielle Aufträge zu definieren und mehrere VM Scalesets zuzulassen, legen Sie ungrouped = true für beide resources_default und default_chunk. Sie können auch festlegen resources_default.place = pack , ob der Zeitplaner Aufträge auf VMs packen soll, anstatt die Round-Robin-Zuordnung von Aufträgen. Weitere Informationen zur PBS-Auftragsverpackung finden Sie in der offiziellen PBS Professional OSS-Dokumentation.

PBS Professional Configuration Reference

Nachfolgend finden Sie die spezifischen Konfigurationsoptionen von PBS Professional, die Sie zum Anpassen von Funktionen umschalten können:

PBS Pro-Optionen BESCHREIBUNG
pbspro.slots Die Anzahl der Steckplätze für einen bestimmten Knoten, der an PBS Pro gemeldet werden soll. Die Anzahl der Steckplätze ist die Anzahl gleichzeitiger Aufträge, die ein Knoten ausführen kann. Dieser Wert wird standardmäßig auf die Anzahl der CPUs auf einem bestimmten Computer festgelegt. Sie können diesen Wert in Fällen außer Kraft setzen, in denen Sie keine Aufträge basierend auf CPU, aber auf Arbeitsspeicher, GPUs usw. ausführen.
pbspro.slot_type Der Name des Typs "Slot" eines Knotens. Der Standardwert ist "execute". Wenn ein Auftrag mit der harten Ressource slot_type=<type>markiert wird, wird dieser Auftrag nur auf einem Computer desselben Slottyps ausgeführt. Auf diese Weise können Sie unterschiedliche Software- und Hardwarekonfigurationen pro Knoten erstellen und sicherstellen, dass ein geeigneter Auftrag immer für den richtigen Knotentyp geplant ist.
pbspro.version Standard: '18.1.3-0'. Dies ist die PBS Professional-Version, die installiert und ausgeführt werden soll. Dies ist derzeit die Standardoption und nur option. In den zukünftigen zusätzlichen Versionen der PBS Professional-Software kann unterstützt werden.

Verbinden von PBS mit CycleCloud

CycleCloud verwaltet OpenPBS-Cluster über einen installierbaren Agent namens azpbs. Dieser Agent stellt eine Verbindung mit CycleCloud her, um Cluster- und VM-Konfigurationen zu lesen und auch in OpenPBS zu integrieren, um die Auftrags- und Hostinformationen effektiv zu verarbeiten. Alle azpbs Konfigurationen werden in der autoscale.json Datei gefunden, normalerweise /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

Wichtige Dateien

Der azpbs Agent analysiert die PBS-Konfiguration jedes Mal, wenn er aufgerufen wird – Aufträge, Warteschlangen, Ressourcen. Informationen werden in stderr und stdout des Befehls sowie in einer Protokolldatei bereitgestellt, sowohl auf konfigurierbaren Ebenen. Alle PBS-Verwaltungsbefehle (qcmd) mit Argumenten werden ebenfalls in der Datei protokolliert.

Alle diese Dateien finden Sie im Verzeichnis "/opt/cycle/pbspro/ ", in dem der Agent installiert ist.

Datei Standort BESCHREIBUNG
Autoscale-Konfiguration autoscale.json Konfiguration für Autoscale, Ressourcenzuordnung, CycleCloud-Zugriffsinformationen
Autoscale-Protokoll autoscale.log Agent-Hauptthreadprotokollierung einschließlich CycleCloud-Hostverwaltung
Anforderungsprotokoll demand.log Detailliertes Protokoll für den Ressourcenabgleich
qcmd Trace Log qcmd.log Protokollieren der Agentaufrufe qcmd
Protokollierungskonfiguration logging.conf Konfigurationen für Protokollierungsmasken und Dateispeicherorte

Definieren von OpenPBS-Ressourcen

Dieses Projekt ermöglicht eine allgemeine Zuordnung von OpenPBS-Ressourcen mit Azure VM-Ressourcen über das Cyclecloud-pbspro (azpbs)-Projekt. Diese ressourcenbeziehung definiert in autoscale.json.

Die standardmäßigen Ressourcen, die mit der von uns gelieferten Clustervorlage definiert sind, sind

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

Die OpenPBS-Ressource mit dem Namen mem "OpenPBS" wird mit einem Knotenattribut namens node.memory", das den Gesamtspeicher eines virtuellen Computers darstellt. Mit dieser Konfiguration kann azpbs eine Ressourcenanforderung verarbeitet werden, z -l mem=4gb . B. indem der Wert der Auftragsressourcenanforderungen mit Knotenressourcen verglichen wird.

Beachten Sie, dass der Datenträger derzeit hartcodiert size::20gist. Nachfolgend sehen Sie ein Beispiel für die Behandlung der VM-Größe bestimmter Datenträgergröße

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Automatische Skalierung und Skalierung

CycleCloud behandelt spannende und serielle Aufträge unterschiedlich in OpenPBS-Clustern. Der Bereich von Aufträgen wird auf Knoten landen, die Teil derselben Platzierungsgruppe sind. Die Platzierungsgruppe hat eine bestimmte Plattform-Bedeutung (VirtualMachineScaleSet mit SinglePlacementGroup=true), und CC verwaltet eine benannte Platzierungsgruppe für jeden übergreifenden Knotensatz. Verwenden Sie die PBS-Ressource group_id für diesen Platzierungsgruppennamen.

Die hpc Warteschlange fügt das Äquivalent -l place=scatter:group=group_id an, indem systemeigene Warteschlangenstandardwerte verwendet werden.

Installieren des CycleCloud OpenPBS-Agents azpbs

Der OpenPBS CycleCloud-Cluster verwaltet die Installation und Konfiguration des Agents auf dem Serverknoten. Die Vorbereitung umfasst das Festlegen von PBS-Ressourcen, Warteschlangen und Hooks. Eine skriptbasierte Installation kann auch außerhalb von CycleCloud erfolgen.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

CycleCloud unterstützt einen Standardsatz von Autotopattributen in allen Zeitplanern:

attribute BESCHREIBUNG
cyclecloud.cluster.autoscale.stop_enabled Ist autotop auf diesem Knoten aktiviert? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Die Zeit (in Sekunden) für einen Knoten, der nach Abschluss von Aufträgen im Leerlauf sitzen soll, bevor er nach unten skaliert wird.
cyclecloud.cluster.autoscale.idle_time_before_jobs Die Zeit (in Sekunden) für einen Knoten, der sich im Leerlauf befinden soll, bevor aufträge abgeschlossen werden, bevor er verkleinert wird.

Hinweis

CycleCloud unterstützt die platzende Konfiguration mit Open PBS nicht.

Hinweis

Obwohl Windows eine offiziell unterstützte Open PBS-Plattform ist, unterstützt CycleCloud derzeit keine Open PBS unter Windows.