
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

