Erstellen Sie einen Fake-Job für SGE, um alle Knoten zu füllen, bevor Sie einen Job starten, der auf kompletten Knoten ausgeführt wird.

Erstellen Sie einen Fake-Job für SGE, um alle Knoten zu füllen, bevor Sie einen Job starten, der auf kompletten Knoten ausgeführt wird.

Das Problem, Jobs an SGE zu senden, um sie auf ganzen Knoten auszuführen, wurde bereits in diesem Forum angesprochen. Es wurden mehrere Lösungen vorgeschlagen, eine davon ist, SGE so zu konfigurieren, dass die Verwendung der Option -l excl=TRUE möglich ist, eine andere Lösung ist, SGE nach Festspeicher oder Belastungsgrenzen zu fragen.

Ich verwende den Cluster meiner Universität für meine Masterarbeit, die parallele Umgebung openmpi ist mit der Auffüllstrategie konfiguriert. Normalerweise enthalten die Knoten des Clusters jeweils 16 oder 20 Kerne. Das Problem besteht darin, dass einige Benutzer ihre Berechnungen nicht mit einer Anzahl von Kernen starten, die ein Vielfaches von 16 (oder 20) ist, sondern ihre Jobs mit einer beliebigen Anzahl von Kernen starten. Wenn ich also einen Job mit -pe openmpi 16 starte, reserviert SGE manchmal die Prozessoren auf 3 Knoten (z. B. 6 + 1 + 10), was die Berechnungen sehr langsam macht.

Ich habe den Administrator gebeten, den Cluster so zu konfigurieren, dass -l excl=TRUE zulässig ist, aber er hat sich geweigert, die Konfiguration zu ändern, bevor Tests durchgeführt wurden (ich weiß nicht, wie lange).

Jetzt habe ich eine neue Idee, die mir möglicherweise ein ähnliches Ergebnis wie (-l excl=TRUE) ermöglichen würde, ohne jedoch den Cluster zu ändern:

  1. Schreiben Sie ein Skript, das die Warteschlange scannt und die Anzahl der Kerne schätzt, die an SGE gesendet werden müssen, damit er alle laufenden Knoten füllt und nur Knoten vollständig frei lässt.
  2. Starten Sie einen Fake-Job mit der berechneten Anzahl an Kernen, der eine bestimmte Zeit wartet.
  3. starte meinen eigentlichen Job (z. B. -pe openmpi 2*16=32).
  4. Löschen Sie den Fake-Job, um anderen Benutzern die Nutzung seiner Kerne zu ermöglichen

Kann mir jemand ein Beispiel für einen solchen Code geben?

Antwort1

Das Starten von Jobs mit qsub -l cpu=0(oder cpu=0.1) funktioniert bei mir einwandfrei.

verwandte Informationen