
Grundlegende Bedienung des Batchsystems TORQUE
TORQUE ist abgeleitet von Terascale Open-Source Resource and QUEue Manager. Es dient dazu, Jobs
in Warteschlangen einzureihen und abzuarbeiten. TORQUE
organisiert die Verarbeitung der Jobs in den Warteschlangen auf
den Compute-Knoten (Clients). Im Internet befindet sich ein
Administrator-Handbuch
zu Torque. Dieses
Administrator-Handbuch enthält das für Nutzer hilfreiche
Kapitel Submitting and
Managing Jobs. Die Informationen sind auf mehrere
WWW-Seiten verteilt und durch ein Inhaltsverzeichnis gegliedert
und verlinkt.
Jobs werden beim Batchsystem
PBS über das Kommando 'qsub' gestartet. Dazu wird im
einfachsten Fall lediglich das zu startende shell-Skript
angegeben:
qsub meinjob
Die Datei 'meinjob' enthält
z.B. einfach folgenden Aufruf eines Executables, was die Anzahl
der Primzahlen bis zu einer Obergrenze ermittelt:
/home/thilo/quell/prim 32345678
qstat
qstat -a
qstat -n
qstat -q
Nach Beendigung des Jobs landen
Ausgaben auf stdout/err in zwei Dateien im aktuellen
Verzeichnis.
Parameter kann man z.B. als Umgebungsvariabeln übergeben. Z.B.
ändern wir obiges Miniskript 'meinjob' so ab:
/home/thilo/quell/prim $LIMIT
und stellen den Job so ein:
qsub -v LIMIT=32345678 meinjob
Mit dem Parameter -l können
Ressourcenanforderungen spezifiziert werden, z.B. benötigter
Hauptspeicher etc. (siehe dazu 'man qsub' und 'man
pbs_resources'). Die wichtigste ist hierbei eine Obergrenze für
die erlaubte Rechenzeit (cput, CPU-Time):
qsub -N primlang -v LIMIT=987654321 -l walltime=20:00 meinjob
qsub -l nodes=4:ppn=2,walltime=3:00:00 meinmpijob
Hier werden für den Job
insgesamt 4 Knoten mit je 2 CPUs reserviert. Die maximale
Laufzeit des Jobs beträgt 3 Stunden. PBS legt eine Datei an, in
der die zugeteilten Rechner aufgelistet sind. Diese ist über
$PBS_NODEFILE im gestarteten Skript zu erreichen und kann z.B.
an mpirun oder ähnliche Mechanismen übergeben werden.
qsub -N mysim -I -l walltime=1:00:00
Dabei blockiert der
qsub-Befehl, bis das
Batchsystem den Job startet. Man befindet sich dann unmittelbar
in einer Shell auf dem Knoten, der dem Job zugeteilt wurde und
kann dann dort den gewünschten Prozess starten. Schließt man
die Shell, wird der Job beendet.
Mit dem Kommando qdel können eigene Jobs gelöscht
werden.
Ein Vorlage-Script zum Absetzen eines Batch Jobs
Folgendes Script kann als Vorlage für ein eigenes Script zum
Absetzen eines Batch-Jobs dienen. Die mit PBS beginnenden Zeilen werden vom
qsub-Kommando als Teil der Parameterliste ausgewertet, wodurch
eine umständliche lange Kommandozeile vermieden werden kann.
Ein Aufruf des Batch-Jobs kann somit einfach durch qsub script.sh erfolgen.
#!/bin/sh ## ## Details unter: http://www.clusterresources.com/wiki/## # ## ## Job-Bezeichnung ## #PBS -N meinjob # ## ## Ausgabe für stdout(-o) und stderr(-e) Streams ## oder mit "#PBS -j oe" aus stderr und stdout gemeinsame Ausgabe erzeugen ## #PBS -o meinjob.log #PBS -e meinjob.err # ## ## Importiere Shell-Environment aus der Shell, in welcher der Job per qsub ## abgesetzt wurde ## #PBS -V # ## ## Resourcenliste für den Job: ## nodes=<Knotenzahl> (Anzahl der der Knoten bei parallelen Jobs ## bei seriellen Jobs immer nodes=1 setzen) ## nodes=<Knotenzahl>:ppn=<Prozessoren pro Knoten> ## walltime=[[HH:]MM:]SS (maximale Ausführungsdauer) ## vmem=<Größe> (Bedarf von Virtuellem Speicher bei mehr als 200MB) ## mem=<Größe> (Bedarf von Phys. Speicher; z.B. mem=1024mb) ## (gültige Einheiten: b, kb, mb, gb, tb) ## file=<Größe> (max. Massenspeicher-Bedarf) ## nice=<Wert> (Nice-Level: -20 bis 19) ## #PBS -l nodes=1 #PBS -l walltime=10:00:00 # ## ## Eine E-Mail bei Start & Ende der Ausführung verschicken ## a := bei Job-Abbruch (abort) ## b := bei Job-Beginn (begin) ## e := bei Job-Ende (end) ## #PBS -m abe # ## ## Queue festlegen: ## #PBS -q long # ## ## Job bei Fehler nicht erneut ausführen ## #PBS -r n # ## ## Interaktive Jobs ## # geht mit "#PBS -i" # Umgebungsvariablen: # $PBS_JOBNAME (Jobbezeichnung / -N) # $PBS_O_HOME (Home-Verzeichnis des Users) # $PBS_O_LOGNAME (Username des beauftragenden Users) # $PBS_O_SHELL (Shell-Interpreter dieses Scripts) # $PBS_JOBID (eindeutige Job-Id) # $PBS_O_HOST (Hostname des aktuellen Knotens) # $PBS_O_PATH (Suchpfad/PATH-Variable des Scripts) # $PBS_NODEFILE (Knotenbezeichnungen) # $PBS_O_WORKDIR (Arbeitsverzeichnis des Jobs) # # Beispiel: Anzahl der dem Job zugeordneten Knoten NPROCS=$(wc -l < $PBS_NODEFILE) # Starte MPI-Kommando "meinprogramm" im Verzeichnis, in dem der Job abgesetzt # wurde: cd $PBS_O_WORKDIR /opt/mpich/bin/mpirun -v -machinefile $PBS_NODEFILE -np $NPROCS meinprogramm