Seitenbereiche:



Menü des aktuellen Bereichs:

Zusatzinformationen:

News

Alles rund um den SciencePark

Alles rund um den SciencePark

Positionsanzeige:

Inhalt:

Wissenschaftliches Rechnen (Scientific Computing)

Wenn Sie die JKU Infrastruktur für Wissenschaftliches Rechnen nutzen wollen, müssen Sie einen Antrag auf Nutzungskennung (k-Nummer) stellen, per SSH einloggen, Ihre Arbeitsumgebung konfigurieren, falls nötig Software kompilieren und schliesslich Ihre Jobs starten. Falls Sie irgendwo nicht weiter wissen sollten, kontaktieren Sie uns.

Wir betreiben mehrere Maschinen die jeweils verschiedene Anforderungen an Parallelität, Speicherplatz und Performance erfüllen:

  • Mach (mach.jku.at) - grosses SMP System mit 2048 CPU Cores und 16 Terabyte Hauptspeicher. Benutzen Sie diese Maschine falls Sie massive Parallelität oder grosse Mengen Hauptspeicher für Ihre Jobs benötigen. Die Grösse des Systems bedeutet leider auch dass es für eine grössere Anzahl kleiner Jobs nicht wirklich ideal geeignet ist. Diese wären eventuell besser geeignet für unseren Cluster:
  • Alex (alex.jku.austriangrid.at) - dies ist ein Cluster mit 48 Rechenknoten zu je 8 CPU Cores und entweder 96 oder 48 GB Hauptspeicher. Wenn dies für Ihren Job ausreichend ist, sollten Sie diese Maschine vorziehen. Sie ist meist robuster und zuverlässiger, schneller verfügbar, und dank der Tatsache dass sie statt einer riesengrossen auf viele kleinere Einheiten aufgeteilt ist, ist sie auch in vielen fällen etwas schneller. Mit MPI können Sie natürlich auch Jobs ausführen, die mehr Resourcen anfordern als auf den einzelnen Knoten verfügbar sind, jedoch könnte dies aufgrund des Kommunikations-Overhead zu Performance-Einbrüchen führen. Bitte testen Sie die erzielbare Performance auf beiden Systemen bevor Sie sich für das eine oder das andere entscheiden. Während Alex bestehende Projekte noch gut verarbeiten kann, ist sie ein legacy System, und für neue Projekte sollte man Lise bevorzugen.
  • Lise (lise.jku.austriangrid.at) - wie die Alex ist dies eine Altix ICE 8200, allerdings grösser und in mit einem schnelleren Interconnect ausgestattet. So hat sie 128 Rechenknoten (also insgesamt 1024 CPU Cores) das Interconnect ist Dual-Rail Infiniband, das über Mvapich2 in voller Bandbreite zur Verfügung steht. Die Software-Infrastruktur auf der Lise wurde durch Abteilung Wissenschaftliches Rechnen eigenständig entwickelt und implementiert und verwendet fast ausschließlich freie Software (Debian GNU/Linux als Betriebssystem, Torque/Maui als Batch System/Scheduler, Mvapich2 als MPI usw.) Hat man die Wahl zwischen Alex und Lise, sollte man Lise wählen.
  • Lilli (lilli.edvz.uni-linz.ac.at) - Diese Anlage steht als Compute Server nicht mehr zur Verfügung. Wir arbeiten an einer Ersatzlösung. Bitte weichen Sie in der Zwischenzeit auf eine alternative Rechenanlage aus. Wir beraten und unterstützen Sie gerne bei der Implementierung Ihrer Rechenläufe auf Mach, Alex oder Lise.

Kontakt

Hilfe erhalten Sie unter der Email-Adresse wradmin(at)jku.at oder bei:
DI Johann Messner (johann.messner(at)jku.at, Tel +43 732 2468 8203), oder
Faruk Kujundžić (faruk.kujundzic(at)jku.at, Tel. +43 732 2468 8613).

PBS Pro

PBS ist ein Batch-System welches sich um die Priorisierung und Management der Jobs kümmert. Jobs werden an PBS übermittelt, und PBS verteilt sie auf die Rechenknoten, ausgehend von den Anforderungen, Verfügbarkeit, Priorität usw.

Beim Aufgeben der Jobs auf Alex ist zu bedenken dass die Knoten jeweils 8 physische Kerne haben, durch das Hyperthreading aber 16 angezeigt werden. Da Hyperthreading für gewisse Aufgaben nützlich ist, bei anderen aber eher störend sein kann, ist PBS konfiguriert um höchstens 8 Cores pro Node zuzuweisen. Damit soll verhindert werden, dass Hyperthreading unabsichtlich verwendet wird. Wer es braucht, kann es natürlich nutzen, indem der Job angepasst wird um mehr Threads auszuführen.

Auf der Mach ist es sehr wichtig, die Hauptspeicheranforderungen nicht zu unterschätzen. Jobs werden in cpusets ausgeführt, die nur so viel CPU Kerne und Hauptspeicher enthalten wie sie angefordert haben. Ist der angeforderte Speicherplatz ausgeschöpft muss das System den Swap-Speicher nutzen - obwohl noch womöglich grosse Mengen RAM frei wären. Abgesehen davon dass es unsinnig ist bei einer Maschine mit 16 TB RAM mit dem Speicher zu geizen, ist es auch kontraproduktiv. Benutzung des Swap generiert viel system-auslastung, eine Art der Auslastung die sich auf die Performance der ganzen Maschine sehr nachteilig auswirkt. Die Folge einer massiven Swap-Aktivität ist immer ein grosser Performance-Einbruch für alle, in vielen Fällen geht es so weit dass das System nicht mehr ansprechbar ist oder sogar gleich absturzt. Daher im Zweifelsfall lieber etwas zu viel als zu wenig Hauptspeicher anfordern

qsub

Der Befehl qsub dient der Übergabe der Jobs an PBS. Er nimmt den Pfad eines Scripts als Argument, oder Sie können auch das Kommando, welches Sie ausführen wollen, per Pipe übergeben:


echo "/pfad/zu/ihrem/programm" | qsub

Wenn ein Job so übergeben wird, landet die Ausgabe in der Datei STDIN.o<job-id> und die Fehlerausgabe in der Datei STDIN.e<job-id>. Der Name STDIN kommt dadurch zustande dass der Job vom STDIN übernommen wurde, also lassen Sie sich nicht dadurch verwirren dass STDOUT und STDERR in so benannte Dateien geschrieben werden.

Durch das Erstellen eines PBS script kann man mehr Optionen angeben, und hat auch eine Vorlage für die spätere Ausführung. Dies ist die Standardmethode die dazu vorgesehen wurde, Jobs zu übergeben. Ein Beispielscript könnte so aussehen:

#!/bin/bash
#PBS -o myjob.out
#PBS -j oe
#PBS -l ncpus=8
#PBS -l walltime=1:30:00
#PBS -M ihre.email(/\t)domain.org
<Ihr Programm>

Die Zeilen die mit #PBS anfangen sind keine Kommentare. Sie dienen dazu Optionen an qsub zu übergeben. Die Optionen die man im Script sieht dienen dazu:

  • die Ausgabe in die Datei myjob.out zu schreiben,

  • die Ausgabe und Fehlerausgabe zusammenzuführen,

  • 8 CPU Cores für den Job anzufordern,

  • die "walltime", die voraussichtliche Laufzeit des Job, anzufordern, und

  • PBS anzuweisen an die Mail-Adresse ihre.email(/\t)domain.org zu schreiben, falls der Job durch das Batch System vorzeitig beendet wird.

Die letzte Zeile beinhaltet den Kommandozeilenbefehl den Sie im Job ausführen wollen.

Beachten Sie dass die Zeilen mit #PBS einfach Kommandozeilenargumente beinhalten - es handelt sich hierbei um nichts anderes als eine Notation mit der man die Argumente in der Datei festhalten kann. Zieht man es vor qsub ohne Script aufzurufen kann man die Argumente auch direkt an qsub übergeben. Der Aufruf von qusub mit dem obigen Script ist äquivalent zum Aufruf von:

qsub -o myjob.out -j oe -l ncpus=8 -l walltime=1:30:00 -M ihre.email(/\t)domain.org -- <Ihr Programm>

Der doppelte Strich vor dem Programmnamen dient dazu das Ende der Kommandozeilenargumente anzuzeigen, alles danach wird als ein im Job auszuführendes Kommando interpretiert.

Bitte beachten Sie auch den Resource Request - dies ermöglicht es PBS, die Jobs effizienter zu reihen. Die Angabe einer "walltime" - der Zeitdauer die Ihr Job für die Ausführung brauchen wird - erlaubt PBS kürzer dauernde Jobs "einzuschieben" während auf das Freiwerden der Resourcen für grössere Jobs gewartet wird. Wenn zum Beispiel PBS 4 Knoten für einen Job mit hoher Priorität allozieren muss, werden die Knoten frei gehalten bis genug Resourcen beisammen sind. Wenn es aber voraussichtlich noch 3 Stunden dauert bis genug Resourcen da sind, PBS kann während dieser "toten Zeiten" Jobs von kurzer Dauer vorziehen - auch wenn diese Jobs eine geringe Priorität haben. Die Angabe der Walltime erlaubt es PBS die Jobs effizienter zu reihen, die verfügbaren Resourcen besser zu nutzen, und nicht zuletzt besteht die Chance dass Ihr Job früher zur Ausführung kommt.

Beim Anfordern der Walltime ist zu beachten nicht zu viel anzufordern (dies würde für den Job weniger Chancen bieten, vorgezogen zu werden), aber auch nicht zu wenig anzufordern. Die Jobs werden nach dem Ablauf der angeforderten Walltime beendet, egal ob die Berechnung fertig ist oder nicht. Deswegen bemühen Sie sich bitte, eine möglichst realistische Schätzung zu machen, und fordern Sie etwa 10-20% mehr als Sicherheitspuffer. Sie können das Hilfsprogramm hvlt_pbstimestats nutzen, um basierend auf den Laufzeiten Ihrer bisherigen Jobs eine Schätzung zu erhalten.

qsub und MPI (SGI MPT)

Um einen MPI job über PBS zu starten, benutzen Sie das folgende Beispielscript:


#!/bin/bash
#PBS -o myjob.out
#PBS -j oe
#PBS -l select=2:ncpus=6:mpiprocs=6
#PBS -l walltime=11:30:00
#PBS -M ihre.email(/\t)domain.org
mpiexec <Ihr MPI-Programm>

Wie Sie sehen können ist der Resource request leicht abgeändert, es wird die "select" Anforderung benutzt, mit Parametern ncpus und mpiprocs. Das obige beispiel würde zwei Knoten mit je 6 CPU Kernen und 6 MPI processen, also insgesamt 12 MPI Prozesse. Das zur Ausführung der MPI-Programme üblicherweise verwendete 'mpirun' ersetzen Sie bitte durch 'mpiexec' - hierbei handelt es sich um ein spezifisch an PBS angepasstes Utility, im Grunde ein Wrapper-Script das vom PBS vorbereitete Variablen zur Ausführung an mpirun übergibt. Dadurch wird Ihr Programm automatisch mit der per Select angeforderter Anzahl MPI threads, auf den vom PBS zugewiesenen Knoten, ausgeführt.

Mit PBS Jobs können Sie auch andere MPI implementationen nutzen. Ersetzen Sie hierzu die Kommandozeile durch einen passenden Aufruf Ihrer MPI Bibliothek und übergeben Sie dieser das Machinefile, dessen Name in der Umgebungsvariable $PBS_NODEFILE abgelegt wurde. Diese Datei wird vom PBS automatisch generiert und auf den entsprechenden Rechenknoten abgelegt.

qstat

Der Befehl qstat dient dazu die Warteschlange und die darin befindlichen laufenden und gereihten Jobs anzuzeigen. Mit der Option -f können Sie detaillierte Ausgabe anfordern, in der alle verfügbaren Jobparameter angezeigt werden.

Die Ausgabe von qstat sieht so aus:


horrovac@service0:~/src/c> qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
41158.service0 STDIN agpXXXXX 00:00:21 R workq
41160.service0 STDIN agpXXXXX 00:00:00 R workq
45228.service0 STDIN kXXXXXX 00:00:00 R workq
47490.service0 STDIN horrovac 00:00:00 R workq

Die wohl nützlichste information die Sie hier bekommen ist die job ID. Die ID brauchen Sie um mit anderen PBS Utilities Jobparameter oder -Ablauf zu steuern.

Auf der alex können Sie stattdessen den Befehl hvlt_qstat verwenden. Dies ist ein eigens auf der JKU geschriebener Befehl mit etwas benutzerfreundlicherer Ausgabe.

hvlt_qstat

qdel

Mit diesem Befehl können Sie einen Job aus der Queue löschen, unabhängig davon ob er gerade ausgeführt oder nur gereiht ist. Listen Sie die Jobs mit qstat und benutzen Sie die Job ID als Argument zu qdel. Mit qdel können nur eigene Jobs gelöscht werden.

GNU module

Um den Anforderungen einer grossen Anzahl verschiedener Nutzungsmuster zu entsprechen, wird zur Konfiguration der Arbeitsumgebung GNU module verwendet. Dies erlaubt das Laden oder Entfernen verschiedener zur Nutzung der Softwarepakete angepasster Umgebungen ohne zusätzliche Komplexität einzubringen. Die Module werden nach Softwareinstallationen vom Sysadmin konfiguriert und getestet. Zur Nutzung der Software reicht es, das Modul zu laden.

Module laden und entfernen

Nutzung von Module ist einfach. Um ein Modul zu laden nutzen Sie den Befehl:


module add icc

Dadurch wird das "icc" Module geladen, welches die Verwendung vom Intel compiler ermöglicht. Wenn Sie sich entscheiden, doch nicht mit dem Intel compiler zu arbeiten, können Sie es wieder entfernen und zum vor dem Laden des Module verwendeten Compiler zurückkehren:

module delete icc

Dieser Befehl entfernt alle Modifikationen die durch das Laden des Module vorgenommen wurden spurlos. Dies ist mit althergebrachten Shell Scripts nur sehr schwer möglich.

Geladene Module anzeigen

Um anzuzeigen welche Module gerade geladen sind, benutzen Sie den Befehl:


<username>@service0:~> module list
Currently Loaded Modulefiles:
   1) icc/11.0 3) git/1.6.4.1
   2) subversion/1.6.11 4) extralibs/1.0

Dies ist die Liste die Sie nach dem Einloggen (auf alex) in Ihrer Arbeitusmgebung vorfinden. Manche Module sind nützlich genug um sie standardmässig zu laden. icc soll als Standard-Compiler verwendet werden weil er die bestmögliche Performance bietet, git und subversion werden als weitverbreitete Versionskontrollsoftwarepakete oft benötigt, und das spezielle Module "extralibs" bietet eine zentrale Lokation um zusätzliche nützliche Bibliotheken einzubinden.

Verfügbare Module anzeigen

Um anzuzeigen welche Module verfügbar sind, nutzen Sie den Befehl:


horrovac@service0:~> module avail

------------------------------ /usr/share/modules ------------------------------
3.1.6 modulefiles/java/1.6.0_18
modulefiles/NAMD/1.66 modulefiles/module-cvs
modulefiles/R/2.10.0 modulefiles/module-info
modulefiles/R/2.10.1 modulefiles/modules
modulefiles/acml/4.4.0 modulefiles/mpich-ch-p4
modulefiles/charmm/c35b3 modulefiles/mpich-ch-p4mpd
modulefiles/cilk/5.4.6 modulefiles/mpich-g2/1.2.7p1
modulefiles/dot modulefiles/mpt/1.23
modulefiles/extralibs/1.0 modulefiles/null
modulefiles/fftw3/3.2.2 modulefiles/numpy/1.4.1
modulefiles/gcc/4.4.2 modulefiles/perfcatcher
modulefiles/git/1.6.4.1 modulefiles/sqlite3/3.6.17
modulefiles/gromacs/4.0.5 modulefiles/subversion/1.6.11
modulefiles/gromacs/4.0.7 modulefiles/subversion/1.6.5
modulefiles/icc/11.0 modulefiles/use.own

------------------------ /usr/share/modules/modulefiles ------------------------
NAMD/1.66 module-cvs
R/2.10.0 module-info
R/2.10.1 modules
acml/4.4.0 mpich-ch-p4
charmm/c35b3 mpich-ch-p4mpd
cilk/5.4.6 mpich-g2/1.2.7p1
dot mpt/1.23
extralibs/1.0 null
fftw3/3.2.2 numpy/1.4.1
gcc/4.4.2 perfcatcher
git/1.6.4.1 sqlite3/3.6.17
gromacs/4.0.5 subversion/1.6.11(default)
gromacs/4.0.7 subversion/1.6.5
icc/11.0 use.own
java/1.6.0_18

Modules und Softwareversionen

In der obigen Liste werden einige Module mit gleichem Namen aber unterschiedlichen Versionsnummern angezeigt. Diese Versionsnummern entsprechen den installierten Softwareversionen. Wenn Sie zum Beispiel das subversion-Module laden, wird die als Standard konfigurierte Version 1.6.11 geladen. Wenn Sie stattdessen eine spezifische Version brauchen, beispielsweise 1.6.5, können Sie das Module so laden:


module add subversion/1.6.5

Sollte keine Version als Standard definiert sein, wird die erste aus der lexikalisch sortierten Liste der Versionen geladen. Module sind Verzeichnisse, die Versionen sind Dateien in diesen Verzeichnissen, und geladen wird was als erstes aufgelistet wird. Sollten Sie der Meinung sein dass die automatisch geladene Version die falsche ist, melden Sie es uns damit wir den Fehler korrigieren können.

Software-Kompilierung

Eine Bitte vorweg: kompilieren Sie nicht einfach drauf los, sondern sehen Sie sich zunächst ein wenig um. Es könnte sein, dass die Software die Sie benötigen bereits installiert ist. Die zentrale Location für zusätzlich installierte Software ist /apps, bitte zunächst dort danach suchen. Wenn sich dort ein Verzeichnis mit Ihrer Software befindet, so wird es wahrscheinlich auch ein Module dazu geben (konsultieren Sie hierzu die Information über GNU module). Wenn Sie spezielle Bibliotheken benötigen, versuchen Sie bitte zunächst diese einfach einzubinden - zusätzliche Bibliotheken werden in /apps/extralibs installiert, diese Location ist standardmässig in den entsprechenden Variablen eingebunden, also könnte es sein dass es ohne weitere Massnahmen mit der vorinstallierten Software funktioniert.

Falls Sie immer noch nicht finden, was Sie benötigen - entweder weil's überhaupt nicht da ist oder Sie eine andere Version brauchen - fangen Sie noch nicht an mit dem Kompilieren, reden Sie erst mit uns. Wenn Sie dies brauchen, so könnten's andere auch benötigen und es ist besser sowas Systemweit zur Verfügung zu stellen statt einzelne Installationen zu haben. Wenn die Software oder Bibliothek zu alt sein sollten, erinnern Sie uns bitte diese zu aktualisieren. Wir haben es bereits mindestens einmal gemacht, wir heben uns die Scripts und die Anweisungen zur Installation auf (sollte es dabei Schwierigkeiten geben), also wird es uns wohl weniger Mühe kosten als Sie, und von unserer Arbeit können danach alle profitieren.

Nicht zuletzt nutzen wir die neuesten Tools und höchstmögliche Optimierungen, und wir binden Bibliotheken ein, die die höchste Performance versprechen. Dies ist manchmal recht komplex und verlangt einiges an Erfahrung, so dass es sich auszahlen kann auf unsere Unterstützung zurückzugreifen.

Schlussendlich, am Kompilieren kommt man manchmal gar nicht vorbei. Hierfür stehen ihnen zur Verfügung verschiedene Versionen von Intel Compiler (icc, icpc, ifort usw.) or GNU compiler collection (gcc, g++, gfortran...). Wenn Sie gcc verwenden möchten laden Sie bitte unbedingt das gcc-module, weil ansonsten die recht veraltete Standardversion verwendet wird.

Nach dem Laden des Module sollte das Build System (z.B. Autotools) in der Lage sein den richtigen Compiler und Bibliotheken zu finden und einzubinden. Bitte kontrollieren Sie immer die Ausgabe der Konfiguratios- und Build-Tools um sicherzustellen dass tatsächlich die richtigen Komponenten verwendet werden. Manchmal werden Umgebungsvariablen umgangen oder ignoriert, manche Softwarepakete verlangen nach einer Konfiguration durch Umschreiben der Makefiles usw. Dies ist ein zu grosses Feld um es hier abzudecken, jedenfalls sollte bei Standard-Tools keinerlei Zusatzkonfiguration notwendig sein - es ist nicht nötig dem Compiler extra Header- oder Bibliotheks-Suchpfade zu übergeben. Hierfür sorgt das Module.

Für arithmetische Operationen werden Sie die beste Performance erhalten indem Sie die blas- und lapack-Interfaces der Intel Math Library (MKL) einbinden. Inkludieren Sie sie in Ihren CFLAGS (oder übergeben Sie sie etwaigen Konfigurationsscripts) als Compiler-Flags:


-lmkl_blas95_lp64 -lmkl_blas95_lp64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5

Wenn Sie die höchstmögliche Optimierung auf die Prozessorarchitektur erhalten wollen, benutzen Sie die Flags:

-O3 -ipo -axSSE4.2 -msse4.2 -parallel

Dies ist die höchstmögliche Optimisation für alle Rechenknoten (diese enthalten leicht unterschiedliche Prozessormodelle), also werden so kompilierte Programme auf allen Rechenknoten laufen (jedoch nicht auf dem Login-Node).

Arbeitsspeicher-Topologie bei Altix UV 1000

Obwohl mach.edvz.uni-linz.ac.at ein single system image ist, bei dem ein Prozess auf den gesamten Speicher zugreifen kann, gibt es unterschiede bei den Zugriffsgeschwindigkeiten. Die Maschine besteht aus einzelnen Nodes die über NUMAlink miteinander verbunden sind um einen einzigen Speicherbereich zu ergeben. Zugriffsgeschwindigkeiten hängen davon ab wie "nah" ein Speicherbereich am Prozessor liegt, auf dem der jeweilige Prozess läuft. Der Graph zeigt Zugriffslatenzen zwischen Node und Speicher. Zu beachten ist dass bei NUMA ein CPU-Socket ein Node ist, ein physikalischer Node also aus zwei Nodes in dieser Darstellung besteht. Die geringste Latenz (10) besteht beim Zugriff auf den eigenen Speicher, sie steigt (13) bei dem benachbarten CPU-Socket, bei den Sockets der benachbarten physikalischen nodes (40), dann weiter bei den Sockets in der gleichen IRU (Blade enclosure), und am höchsten ist sie schliesslich bei allen nicht unmittelbar verbundenen Sockets.

Die tabelarische Darstellung mit den spezifischen Latenzwerten für die ersten 48 Nodes (der Rest folgt dem gleichen Muster):

01234567891011121314151617181920212223242526272829303132333435363738394041424344454647
0101340406262555562625555626255556262555562625555626255556262555578787070787870707878707078787070
113 1040406262555562625555626255556262555562625555626255556262555578787070787870707878707078787070
24040 10135555484855554848555548485555484855554848555548485555484870706363707063637070636370706363
3404013 105555484855554848555548485555484855554848555548485555484870706363707063637070636370706363
462625555 1013404062625555626255556262555562625555626255556262555578787070787870707878707078787070
56262555513 10404062625555626255556262555562625555626255556262555578787070787870707878707078787070
6555548484040 101355554848555548485555484855554848555548485555484870706363707063637070636370706363
755554848404013 1055554848555548485555484855554848555548485555484870706363707063637070636370706363
86262555562625555 10134040626255556262555562625555626255556262555578787070787870707878707078787070
9626255556262555513 104040626255556262555562625555626255556262555578787070787870707878707078787070
1055554848555548484040 1013555548485555484855554848555548485555484870706363707063637070636370706363
115555484855554848404013 10555548485555484855554848555548485555484870706363707063637070636370706363
12626255556262555562625555 101340406262555562625555626255556262555578787070787870707878707078787070
1362625555626255556262555513 1040406262555562625555626255556262555578787070787870707878707078787070
145555484855554848555548484040 10135555484855554848555548485555484870706363707063637070636370706363
15555548485555484855554848404013 105555484855554848555548485555484870706363707063637070636370706363
1662625555626255556262555562625555 1013404062625555626255556262555578787070787870707878707078787070
176262555562625555626255556262555513 10404062625555626255556262555578787070787870707878707078787070
18555548485555484855554848555548484040 101355554848555548485555484870706363707063637070636370706363
1955554848555548485555484855554848404013 1055554848555548485555484870706363707063637070636370706363
206262555562625555626255556262555562625555 10134040626255556262555578787070787870707878707078787070
21626255556262555562625555626255556262555513 104040626255556262555578787070787870707878707078787070
2255554848555548485555484855554848555548484040 1013555548485555484870706363707063637070636370706363
235555484855554848555548485555484855554848404013 10555548485555484870706363707063637070636370706363
24626255556262555562625555626255556262555562625555 101340406262555578787070787870707878707078787070
2562625555626255556262555562625555626255556262555513 1040406262555578787070787870707878707078787070
265555484855554848555548485555484855554848555548484040 10135555484870706363707063637070636370706363
27555548485555484855554848555548485555484855554848404013 105555484870706363707063637070636370706363
2862625555626255556262555562625555626255556262555562625555 1013404078787070787870707878707078787070
296262555562625555626255556262555562625555626255556262555513 10404078787070787870707878707078787070
30555548485555484855554848555548485555484855554848555548484040 101370706363707063637070636370706363
3155554848555548485555484855554848555548485555484855554848404013 1070706363707063637070636370706363
327878707078787070787870707878707078787070787870707878707078787070 10134040626255556262555562625555
33787870707878707078787070787870707878707078787070787870707878707013 104040626255556262555562625555
3470706363707063637070636370706363707063637070636370706363707063634040 1013555548485555484855554848
357070636370706363707063637070636370706363707063637070636370706363404013 10555548485555484855554848
36787870707878707078787070787870707878707078787070787870707878707062625555 101340406262555562625555
3778787070787870707878707078787070787870707878707078787070787870706262555513 1040406262555562625555
387070636370706363707063637070636370706363707063637070636370706363555548484040 10135555484855554848
39707063637070636370706363707063637070636370706363707063637070636355554848404013 105555484855554848
4078787070787870707878707078787070787870707878707078787070787870706262555562625555 1013404062625555
417878707078787070787870707878707078787070787870707878707078787070626255556262555513 10404062625555
42707063637070636370706363707063637070636370706363707063637070636355554848555548484040 101355554848
4370706363707063637070636370706363707063637070636370706363707063635555484855554848404013 1055554848
447878707078787070787870707878707078787070787870707878707078787070626255556262555562625555 10134040
45787870707878707078787070787870707878707078787070787870707878707062625555626255556262555513 104040
4670706363707063637070636370706363707063637070636370706363707063635555484855554848555548484040 1013
477070636370706363707063637070636370706363707063637070636370706363555548485555484855554848404013 10

FAQ

Q: Mein Job hat den Status "Suspended" und ein anderer Job läuft auf dem Knoten, obwohl andere Rechenknoten frei wären - wieso wird ausgerechnet mein Job geblockt?
A: Das geschieht aufgrund der Funktionsweise von PBS und der Unmöglichkeit, einmal gestartete Jobs zwischen den Knoten zu verschieben. Der Job der Ihren Job gestoppt hat hatte höhere Priorität (wahrscheinlich aufgrund des fairshare-ranking). Zu dem Zeitpunkt als er gestartet wurde waren keine anderen Rechenknoten verfügbar. Nachdem er gestartet wurde muss er bis zum Ende laufen. PBS kontrolliert die Verteilung, Starten und ev. Anhalten der Jobs, aber es kann keine Jobs auf andere Knoten verschieben. Dadurch entsteht manchmal die widersinnig erscheinende Situation in der sich zwei oder sogar noch mehr Jobs auf einigen Knoten "drängeln", während andere Knoten gar nichts machen.

Wenn Ihr Job seine Zwischenergebnisse auf der Festplatte speichert und die Berechnung von diesem Punkt an wiederaufnehmen kann (zum Beispiel macht gromacs dies), können Sie den Job unterbrechen und neu starten. Dadurch geht zwar ein wenig Rechenzeit verloren (vom letzten Zwischenergebnis bis zur Unterbrechung), aber der Job wird sofort auf einen der freien Knoten verteilt und läuft sofort wieder an. Im Normalfall ist es nicht möglich vorauszusagen, wie lang der andere Job noch läuft und wie lang Ihr Job auf die Wiederaufnahme warten müsste.

Q: Mein Job sitzt lange Zeit in der Queue und wird nicht ausgeführt, trotz freier Resourcen. Andere Jobs, die später dazugekommen sind, werden vor meinem Job gestartet. Was ist los?
A: Benutzen Sie qstat mit dem -f Switch und Ihrer Job ID um volle Ausgabe zum Job zu erhalten. In den meisten Fällen handelt es sich hier um Jobs für die mehr Resourcen angefordert wurden als PBS zur Verfügung stellen kann. Solche Jobs bleiben in der Regel in der Queue bis sie gelöscht werden. In diesem Fall werden Sie in der Ausgabe von qstat -f <Ihre Job-ID> eine Zeile wie diese vorfinden: "comment = Not Running: No available resources on nodes". In diesem Fall kontrollieren Sie die angeforderten Resourcen (die Zeilen die mit "Resource_List" anfange) um den Fehler zu finden. Im Fall meines Test-Jobs wäre dies z.B:


     Resource_List.ncpus = 16
     Resource_List.nodect = 1
     Resource_List.place = free
     Resource_List.select = 1:ncpus=16

Hieraus sieht man dass ich einen Rechenknoten mit 16 CPU Kernen angefordert habe. Das kann nicht funktionieren, da man maximal 8 Kerne pro Knoten anfordern kann. Damit mein Job mit so vielen Threads läuft müsste ich entweder 2 Knoten mit je 8 Kernen anfordern und meinen Job mit MPI laufen lassen, oder einen Knoten mit 8 Kernen anfordern und darin dann 16 Threads laufen lassen (was dank Hyperthreading vergleichbare Performance bringen könnte).

Wenn Sie aber keine Fehler entdecken können, kontaktieren Sie uns bitte und wir werden den Fehler für Sie suchen.