Für eine korrekte Darstellung dieser Seite benötigen Sie einen XHTML-standardkonformen Browser, der die Darstellung von CSS-Dateien zulässt.

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
Mittels des Befehls 'qstat' kann man sich die im Batchsystem vorhandenen Jobs in verschiedenen Ansichten anschauen:
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 
Hier wird eine maximale CPU-Zeit von 20 Minuten definiert. Wird diese Zeit überschritten, wird der Job vom System beendet. Abhängig von dieser Zeit wird der Job auch in eine der definierten Queues geschoben. Zusätzlich wird über den Parameter -N noch ein Jobname vergeben, welcher in qstat auftaucht und auch für die Namen der stdout/err-Dateien verwendert wird (die man aber auch per qsub-Parameter ändern kann).
Im Falle von parallelen Jobs, die mehrere CPUs benötigen, muss die Anzahl der Knoten/CPUs angegeben werden. Da wir 2-CPU-Maschinen haben, ist es in der Regel sinnvoll, jeweils ganze Knoten mit je 2 CPUs zu reservieren:

 

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.

Zum Testen ist es auch möglich, einen "interaktiven" PBS-Job zu starten:
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