Saturday, 11 November 2017

Qsub Submit Binary Optionen


Einreichung von Binärdateien in Grid Engine 6.x Grid Engine 6 unterstützt die direkte Einreichung von Binärdateien über qsub und qrsh über das neue Argument - b yn. Das Standardverhalten übernimmt - b n. Verwenden Sie - b y, um direkt eine binäre ausführbare Datei aufzurufen. Workgroupcluster: www qrsh - b y usrbinuptime 7:49 bis 107 Tage, 35 mins, 0 Benutzer, Last-Mittelwerte: 0.12 0.03 0.01 workgroupcluster: Der Befehl qsub (1) kann nicht verwendet werden, um Binärdateien direkt als Jobs zu senden. Obwohl man ein kleines Wrapper-Skript um Binärdateien schreiben kann, um sie einzureichen, gibt es zwei praktische Techniken, um Binärdateien einfach als einfach einzureichen, ohne ein eigenes Skript einzubinden. Geben Sie den Befehl qsub zusammen mit den gewünschten Flags und Optionen ein, und drücken Sie die Eingabetaste, ohne ein Job-Skript anzugeben. Sie sehen dann eine sekundäre Shell-Eingabeaufforderung. An dieser Eingabeaufforderung können Sie den Namen der Binärdatei eingeben. Sie können dann die Rückkehr drücken und weiterhin Binär - oder Shell-Befehle eingeben. Wenn Sie fertig sind, geben Sie Ihren Job an, drücken Sie Control-D. Qsub-l archsolaris64 schlafen 60 ltctrl-Dgt dein Job 47427 (; quotDDINNot) wurde eingereicht Geben Sie den qsub Befehl, zusammen mit beliebigen Flags und Optionen, dann verwenden Sie die STDIN Umleitung Bau ltlt ltMARKERgt. Geben Sie eine oder mehrere Zeilen ein, die eine beliebige Kombination von Binär - und Shell-Befehlen an der sekundären Eingabeaufforderung wie oben enthalten. Dann geben Sie auf einer Zeile von selbst den ltMARKERgt ein und drücken Sie die Eingabetaste. Qsub - N test ltlt EOF schlafen 60 EOF Ihr Job 47428 (quottestquot) wurde eingereicht Beide Techniken oben nutzen die Tatsache, dass qsub den STDIN-Stream als Job-Skript verwendet, wenn Sie keine Skriptdatei als Argument angeben. Für die nahtlose Integration bestimmter Anwendungen in Ihre Umgebung mit einem Grid Engine-Cluster kann es notwendig sein, ein benutzerdefiniertes Wrapper-Skript zu schreiben, das einige Setup-Arbeiten vor dem Ausführen eines Jobs macht. Die zweite Technik von oben kann in solche Wrapper-Skripte eingebettet werden. Beispiel: Erstellen von Wrapper für die Übermittlung eines binären Batch-Jobs von einem SunRay zu einer Back-End-Farm. Um dies zu tun, ist es notwendig, die LDPRELOAD-Variable zu ändern, um den SunRay-spezifischen Eintrag zu entfernen. Eine generische Binärdatei-Wrapper-Skript quotqbsubquot finden Sie unter diesem Link. Es kann als eine Quinenzversion von qsub verwendet werden. Das Wrapper-Skript ermöglicht es dem Einreicher, die Standard-Einreichungs-Flags zu verwenden, und es berücksichtigt auch die in der qtask-Datei angegebenen Flags (die von qtcsh bei der transparenten Einreichung von Binärdateien an das System verwendet wird). Ein Beispiel für die Verwendung dieses Skripts ist: Dies führt die Netscape-Binärdatei aus, während die DISPLAY-Umgebungsvariable explizit verwaltet wird. HINWEIS: Sie müssen natürlich sicherstellen, dass die Binärzahl der Architektur entspricht, auf der sie schließlich laufen wird. Sie können dies z. B. festlegen: Sun Grid Engine (SGE) QuickStart Das Sun Grid Engine Warteschlangensystem ist nützlich, wenn Sie viele Aufgaben ausführen und die Aufgaben über einen Cluster von Maschinen verteilen möchten. Zum Beispiel müssen Sie Hunderte von Simulationsexperimente mit unterschiedlichen Parametern ausführen oder müssen 300 Videos von einem Format in ein anderes konvertieren. Die Verwendung eines Warteschlangensystems in diesen Situationen hat folgende Vorteile: Scheduling - ermöglicht es Ihnen, eine nahezu unbegrenzte Menge an Arbeit zu planen, die durchgeführt werden soll, wenn Ressourcen verfügbar sind. Dies bedeutet, dass Sie einfach so viele Aufgaben (oder Jobs) eintragen können, wie Sie möchten und lassen Sie das Warteschlangen-System behandeln, um sie alle auszuführen. Load Balancing - verteilt automatisch Aufgaben über den Cluster, so dass jeder Knoten im Vergleich zum Rest überlastet wird. MonitoringAccounting - Fähigkeit, alle übergebenen Aufträge zu überwachen und zu fragen, welche Clusterknoten sie laufen lassen, ob they8217re beendet ist, einen Fehler aufgetreten ist usw. Außerdem können Sie die Jobhistorie abfragen, welche Tasks zu einem bestimmten Zeitpunkt von einem bestimmten Benutzer ausgeführt wurden usw. Natürlich, nur weil ein Warteschlangen-System installiert ist, bedeutet das, dass du es überhaupt benutzen musst. Sie können Ihre Aufgaben über den Cluster in irgendeiner Weise sehen, die Sie sehen, und das Warteschlangensystem sollte sich nicht stören. Allerdings werden Sie höchstwahrscheinlich am Ende brauchen, um die oben genannten Features in irgendeiner Weise zu implementieren, um den Cluster optimal zu nutzen. Einreichen von Jobs Ein Job in SGE stellt eine Aufgabe dar, die auf einem Knoten im Cluster ausgeführt werden soll und enthält die Befehlszeile, die zum Starten der Aufgabe verwendet wird. Ein Job kann spezifische Ressourcenanforderungen haben, sollte aber generell agnostisch sein, auf welchen Knoten im Cluster er läuft, solange seine Ressourcenanforderungen erfüllt sind. Alle Aufträge erfordern mindestens einen verfügbaren Steckplatz auf einem Knoten im Cluster zu laufen. Die Einreichung von Aufträgen erfolgt über den Befehl qsub. Let8217s versuchen, einen einfachen Job einzugeben, der den Hostname-Befehl auf einem gegebenen Clusterknoten ausführt: Die Option - V auf qsub gibt an, dass der Job die gleichen Umgebungsvariablen wie die Shell ausführen muss. (Empfohlen) Die Option - b auf qsub gibt an, dass die Befehl, der ausgeführt wird, könnte eine einzelne binäre ausführbare Datei oder ein bash-Skript sein. In diesem Fall ist der Befehl hostname eine einzelne Binärdatei. Diese Option nimmt ein y oder n Argument an, das entweder den Befehl anzeigt, ist ein Binär oder nein, es ist kein Binär. Die Option - cwd auf qsub sagt Sun Grid Engine, dass der Job im selben Verzeichnis ausgeführt werden soll, auf dem qsub aufgerufen wurde. Das letzte Argument für qsub ist der auszuführende Befehl (Hostname in diesem Fall) Beachten Sie, dass der Befehl qsub, wenn erfolgreich, die Jobnummer zu stdout ausdruckt. Sie können die Jobnummer verwenden, um den Job8217s Status und den Fortschritt innerhalb der Warteschlange zu überwachen, wie wir im nächsten Abschnitt sehen werden. Überwachen von Aufträgen in der Warteschlange Nun, da unsere Arbeit eingereicht wurde, sehen let8217s einen Blick auf den Job8217s Status in der Warteschlange mit dem Befehl qstat: Aus dieser Ausgabe können wir sehen, dass der Job im qw-Zustand ist, der für Warteschlange steht und wartet . Nach ein paar Sekunden wird der Job in ein r übergehen. Oder laufen. Geben Sie an, an welcher Stelle der Job beginnt zu laufen: Sobald der Job beendet ist, wird der Job aus der Warteschlange entfernt und wird nicht mehr in der Ausgabe von qstat angezeigt: Nun, da der Job beendet ist, lassen Sie sich auf den nächsten Abschnitt zu sehen Wie sehen wir eine job8217s Ausgabe. Anzeigen einer Job8217s-Ausgabe Sun Grid Engine erstellt Stdout - und Stderr-Dateien im Job8217s-Arbeitsverzeichnis für jeden ausgeführten Job. Wenn irgendwelche zusätzlichen Dateien während einer job8217s-Ausführung erstellt werden, befinden sie sich auch im Job8217s-Arbeitsverzeichnis, sofern sie nicht explizit an anderer Stelle gespeichert werden. Die Job8217s Stdout - und Stderr-Dateien werden nach dem Job benannt, wobei die Erweiterung in der job8217s-Nummer endet. Für den oben gestellten einfachen Job haben wir: Beachten Sie, dass Sun Grid Engine automatisch den Job-Hostnamen benannt hat und zwei Ausgabedateien erstellt hat: hostname. e1 und hostname. o1. Das e steht für stderr und das o für stdout. Die 1 am Ende der files8217 Erweiterung ist die Jobnummer. Also, wenn der Job wurde benannt mynewjob und wurde Job 23 eingereicht, die Ausgabedateien würde aussehen: Monitoring Cluster Usage Nach einer Weile können Sie neugierig sein, um die Last auf Sun Grid Engine zu sehen. Dazu verwenden wir den Befehl qhost: Die Ausgabe zeigt die Architektur (ARCH), die Anzahl der cpus (NCPU), die aktuelle Last (LOAD), den Gesamtspeicher (MEMTOT) und den aktuell verwendeten Speicher (MEMUSE) und den Swap Space ( SWAPTO) für jeden Knoten. Sie können auch die durchschnittliche Last (loadavg) pro Knoten mit der Option 8216-f8217 auf qstat anzeigen: Erstellen eines Job-Skripts Im Abschnitt 8216Submittieren eines Job8217 haben wir einen einzigen Befehlsnamen eingegeben. Dies ist nützlich für einfache Jobs, aber für komplexere Jobs, wo wir einige Logik integrieren müssen, können wir ein so genanntes Job-Skript verwenden. Ein Job-Skript ist im Wesentlichen ein bash-Skript, das eine Logik enthält und eine beliebige Anzahl von externen Programmscripts ausführt: Wie Sie sehen können, führt dieses Skript einfach einige Befehle aus (wie Echo, Datum, Katze usw.) und beendet. Alles, was auf dem Bildschirm gedruckt wird, wird in die Job8217s Stdout Datei von Sun Grid Engine gestellt. Da dies nur ein bash-Skript ist, kannst du irgendeine Form von Logik in das Job-Skript (d. H. Wenn Aussagen, während Loops, für Loops, etc.) setzen und Sie können eine beliebige Anzahl von externen Programmen aufrufen, um den Job abzuschließen. Let8217s sehen, wie Sie dieses neue Job-Skript ausführen. Sichern Sie das Skript oben auf homesgeadminjobscript. sh auf Ihrem StarCluster und führen Sie das folgende als den Sgeadmin-Benutzer aus: Nun, da der Job gesendet wurde, ruft let8217s qstat periodisch auf, bis der Job beendet ist, da dieser Job nur eine Sekunde dauern sollte, um zu laufen, sobald it8217s ausgeführt wurde : Nun, da der Job fertig ist, schauen wir uns die Ausgabedateien an: Wir sehen von der Ausgabe, dass die Stdout-Datei die Ausgabe der Echo-, Date - und Cat-Anweisungen im Job-Skript enthält und dass die Stderr-Datei ist Leere Bedeutung gab es keine Fehler während der job8217s Ausführung. Hatte etwas fehlgeschlagen, wie zB ein Befehl nicht gefunden Fehler, diese Fehler wäre in der Stderr-Datei erschienen. Löschen eines Auftrags aus der Warteschlange Was ist, wenn ein Job in der Warteschlange steckt, wird zu lange gedauert, um zu laufen oder wurde einfach mit falschen Parametern gestartet. Sie können einen Job aus der Warteschlange mit dem Befehl qdel in Sun Grid Engine löschen. Unten wir starten einen einfachen 8216sleep8217 Job, der für 10 Sekunden schläft, damit wir ihn mit qdel töten können: Nach dem Ausführen von qdel you8217ll bemerken Sie den Job aus der Warteschlange: OpenMPI und Sun Grid Engine OpenMPI müssen mit SGE-Unterstützung kompiliert werden (8211with-sge ), Um die enge Integration zwischen OpenMPI und SGE zu nutzen, wie in diesem Abschnitt dokumentiert. Dies ist der Fall auf allen StarCluster8217s öffentlichen AMIs. OpenMPI unterstützt eine enge Integration mit Sun Grid Engine. Diese Integration ermöglicht es Sun Grid Engine, die Zuordnung von Hosts zu parallelen Aufträgen zu veranlassen und ordnungsgemäß für parallele Aufträge zu berücksichtigen. OpenMPI Parallel Environment StarCluster setzt standardmäßig eine parallele Umgebung namens 8220orte8221 ein, die für die OpenMPI-Integration innerhalb von SGE konfiguriert wurde und eine Anzahl von Slots aufweist, die der Gesamtzahl der Prozessoren im Cluster entspricht. Sie können die SGE-Parallelumgebung durch Ausführen überprüfen: Dies ist die Standardkonfiguration für einen zwei Knoten, c1.xlarge Cluster (16 virtuelle Kerne). Round Robin vs Fill Up Modes Beachten Sie die Einstellung allocationrule in der Ausgabe des Befehls qconf im vorherigen Abschnitt. Dies definiert, wie man einem Job Slots zuordnet. Standardmäßig konfiguriert StarCluster die Roundrobin-Zuweisung. Dies bedeutet, dass, wenn ein Job 8 Slots zum Beispiel anfordert, wird es auf die erste Maschine gehen, greifen einen einzelnen Slot, wenn verfügbar, auf die nächste Maschine zu bewegen und greifen einen einzigen Slot, wenn verfügbar, und so weiter wrapping um den Cluster wieder, wenn nötig Um dem Job 8 Slots zuzuordnen. Sie können auch die parallele Umgebung so konfigurieren, dass sie die Slots so weit wie möglich mit der Füllzuweisungsregel lokalisieren kann. Mit dieser Regel, wenn ein Benutzer 8 Slots anfordert und eine einzelne Maschine 8 Steckplätze zur Verfügung hat, läuft dieser Job vollständig auf einer Maschine. Wenn 5 Slots auf einem Host und 3 auf einem anderen verfügbar sind, wird es alle 5 auf diesem Host und alle 3 auf dem anderen Host. Mit anderen Worten, diese Regel wird gierig alle Slots auf einem gegebenen Knoten, bis die Slot-Anforderung für den Job erfüllt ist. Mit dem folgenden Befehl können Sie zwischen Roundrobin - und Fillup-Modi umschalten: Damit wird vi (oder jeder Editor, der in der EDITOR env Variable definiert ist) geöffnet und Sie können die parallelen Umgebungseinstellungen bearbeiten. Um von Roundrobin zu ändern, um im obigen Beispiel zu füllen, ändern Sie die Zuordnung von: Submitting OpenMPI Jobs mit einer parallelen Umgebung Der allgemeine Workflow für das Ausführen von MPI-Code ist: Kompilieren Sie den Code mit mpicc, mpicxx, mpif77, mpif90, etc. Kopieren Sie die resultierenden Ausführbar auf denselben Pfad auf allen Knoten oder auf einen NFS-freigegebenen Speicherort auf dem Masterknoten Es ist wichtig, dass der Pfad zur ausführbaren Datei auf allen Knoten für mpirun identisch ist, um den parallelen Code korrekt zu starten. Der einfachste Ansatz ist, die ausführbare Datei irgendwo unter zu Hause auf dem Master-Knoten zu kopieren, da zu Hause NFS-geteilt über alle Knoten im Cluster ist. Führen Sie den Code auf X-Nummer von Maschinen aus: Wo die Hostdatei sieht so aus: Wenn Sie also eine SGE-Parallelumgebung mit OpenMPI verwenden, müssen Sie nicht mehr die Optionen - np, - hostfile, - host, etc. für mpirun angeben. Dies ist, weil SGE automatisch Hosts und Prozessoren zuweisen, die von OpenMPI für Ihren Job verwendet werden sollen. Sie müssen auch nicht die 8211byslot und 8211bynode Optionen an mpirun übergeben, da diese Mechanismen jetzt von den Füll - und Roundrobin-Modi behandelt werden, die in der SGE-Parallelumgebung angegeben sind. Anstatt die oben genannte Formulierung zu verwenden, erstellen Sie ein einfaches Job-Skript, das einen sehr vereinfachten mpirun-Aufruf enthält: Legen Sie dann den Job mit dem Befehl qsub und der orte parallelen Umgebung, die für Sie automatisch von StarCluster konfiguriert wurde: Die Option-Spezies, welche parallele Umgebung zu verwenden und Wie viele Slots zu beantragen. Das obige Beispiel fordert 24 Slots (oder Prozessoren) unter Verwendung der orte parallelen Umgebung an. Die parallele Umgebung kümmert sich automatisch um die Verteilung des MPI-Jobs unter den SGE-Knoten unter Verwendung der in den environment8217s-Einstellungen definierten Allokation. Sie können dies auch ohne ein Job-Skript wie folgt machen: qsub (1) - Linux man page Diese Handbuchseite ist Teil des POSIX Programmierhandbuchs. Die Linux-Implementierung dieser Schnittstelle kann sich unterscheiden (konsultieren Sie die entsprechende Linux-Manual-Seite für Details des Linux-Verhaltens) oder die Schnittstelle kann unter Linux nicht implementiert werden. Qsub - submit ein Skript Beschreibung Um ein Skript einzureichen, ist es, einen Batch-Job zu erstellen, der das Skript ausführt. Ein Skript wird von einer Anfrage an einen Batch-Server übermittelt. Das Dienstprogramm qsub ist ein vom Benutzer zugänglicher Batch-Client, der ein Skript einreicht. Nach erfolgreichem Abschluss muss das Dienstprogramm qsub einen Batchjob erstellt haben, der das übermittelte Skript ausführt. Das Dienstprogramm qsub muss ein Skript übermitteln, indem es eine Warteschlangenauftragsanforderung an einen Batch-Server sendet. Das Dienstprogramm qsub muss den Wert der folgenden Umgebungsvariablen in das VariableList-Attribut des Batch-Jobs setzen: HOME. LANG. LOGNAME. Schweinefleisch MAIL. SHELL Und TZ. Der Name der Umgebungsvariablen ist der aktuelle Name, der dem String PBSO vorangestellt ist. Hinweis: Wenn der aktuelle Wert der HOME-Variablen im Umgebungsraum des qsub-Dienstprogramms aabbcc ist. Dann muss qsub PBSOHOME aabbcc in das VariableList-Attribut des Batch-Jobs stellen. Zusätzlich zu den oben beschriebenen Variablen muss das qsub-Dienstprogramm der Variablenliste folgende Variablen mit den angegebenen Werten hinzufügen: PBSOWORKDIR Der absolute Pfad des aktuellen Arbeitsverzeichnisses des qsub-Dienstprogramms. PBSOHOST Der Name des Hosts, auf dem das Dienstprogramm qsub läuft. Das Dienstprogramm qsub muss dem Basisdefinitionsvolumen von IEEE Std 1003.1-2001, Abschnitt 12.2, Utility Syntax Guidelines entsprechen. Folgende Optionen werden durch die Implementierung unterstützt: - a datetime Definieren Sie die Zeit, zu der ein Batch-Job zur Ausführung berechtigt ist. Das Dienstprogramm qsub akzeptiert ein Options-Argument, das der Syntax des Zeitoperanden des Touch-Dienstprogramms entspricht. Tabelle: Umgebungsvariablenwerte (Dienstprogramme) Hinweis: Der Server, der die Ausführung des Batchjobs initiiert, fügt der Batch-Job-Umgebung weitere Variablen hinzu. Das Dienstprogramm qsub setzt das ExecutionTime-Attribut des Batch-Jobs auf die Anzahl der Sekunden, Epochthat entspricht der Ortszeit, die durch den Wert des datetime option-arguments ausgedrückt wird. Die Epoche ist in der Basis Definitions Volume von IEEE definiert Std 1003.1-2001, Abschnitt 3.149, Epoch. Operands Eingabedateien Umgebungsvariablen Asynchrone EreignisseBeenden Sie Ihren Batch-Job Wie Sie einen Batch-Job einreichen Nicht-interaktive Batch-Jobs werden mit dem Befehl qsub übergeben. Die allgemeine Form des Befehls lautet: Zum Beispiel, um den printenv-Befehl an das Batch-System zu übermitteln, führen Sie aus: Die Option - b y teilt dem Batch-System mit, dass der folgende Befehl eine binäre ausführbare Datei ist. Die Ausgabemeldung des Befehls qsub druckt die Job-ID, mit der Sie den Job8217s-Status innerhalb der Warteschlange überwachen können. Während der Job ausgeführt wird, erstellt das Batch-System Stdout - und Stderr-Dateien im Arbeitsverzeichnis von job8217s, die nach dem Job benannt sind, wobei die Erweiterung in der Job8217s-Nummer endet, für das obige Beispiel printenv. o jobID und printenv. e jobID. Die erste wird die Ausgabe des Befehls enthalten und die zweite wird die Liste der Fehler, wenn überhaupt, die während des Auftrags aufgetreten ist. Wenn Sie ein Programm ausführen, das Argumente benötigt und zusätzliche Optionen für das Batch-System übergibt, wird es schnell nützlich, sie in einer Skriptdatei zu speichern und dieses Skript als Argument für den Befehl qsub zu übermitteln. Zum Beispiel führt das folgende Skript script. sh einen einfachen MATLAB-Job aus: Hinweis: Um korrekt verarbeitet zu werden, muss das Skript am Ende der Datei eine leere Zeile enthalten. Um diese Datei script. sh dem Batch-System zu übermitteln, führen Sie Folgendes aus: Weitere MATLAB-Batch-Prozeduren finden Sie unter Ausführen von MATLAB Batch im SCC. Allgemeine Einreichungsrichtlinien Es gibt eine Reihe von Richtlinien (Optionen), die der Benutzer an das Batch-System übergeben kann. Diese Richtlinien können entweder als Argumente für den qsub-Befehl bereitgestellt oder in das Job-Skript eingebettet werden. In einer Skriptdatei sind die Zeilen, die diese Richtlinien enthalten, mit den Symbolen 8211 beginnen hier ein Beispiel: Unten ist die Liste der am häufigsten verwendeten Richtlinien:

No comments:

Post a Comment