Beispielskript für OpenMPI
Bitte verwenden Sie beim Aufruf von "mpirun" keine Parameter wie z.B. "-np". OpenMPI wurde gegen die Taskmanagement Libraries von PBS gebaut und bekommt alle Parameter automatisch aus der Laufzeitumgebung des Jobs.
#!/bin/bash
#PBS -N MPI-Test
#PBS -l select=2:ncpus=20:mem=20GB:mpiprocs=20
#PBS -l walltime=12:00:00
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
#PBS -o MPI-Test_pbs.out
#PBS -e MPI-Test_pbs.err
module add openmpi software
mpirun software.bin
Beispielskript für einen GPU-Job
Um einen Knoten mit einer GPU zu buchen, ergänzt man das "select"-Statement um die Angabe ":ngpus=1":
#!/bin/bash
#PBS -N GPU-Test
#PBS -l select=1:ncpus=20:mem=20GB:mpiprocs=20:ngpus=1
#PBS -l walltime=12:00:00
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
#PBS -o GPU-Test_pbs.out
#PBS -e GPU-Test_pbs.err
module add tensorflow
python3 my_tf_job.py
Bitte bedenken Sie, dass es nur 3 Knoten mit je einer GPU im Cluster gibt. Möchten Sie auf 2 GPUs rechnen, erhöhen Sie den Zähler für "select", lassen aber "ngpus" bei 1.
Beispielskript für GPU-Job mit Desktopumgebung (Remotezugriff)
Die GPU-Knoten bieten die Möglichkeit eine Desktopumgebung zu starten, auf die man mit dem Remote-Protokoll "VNC" (abgesichert per SSL-Verschlüsselung) zugreifen kann. Dies kann nützlich sein, um Rechenergebnisse zu visualisieren oder um eine Anwendung interaktiv mit grafischer Nutzeroberfläche laufenzu lassen. Starten Sie dafür einen normalen GPU-Job und führen als Anwendung das bereitgestellte Skript "start-desktop" aus. Alle weiteren Anweisungen für den Zugriff erhalten Sie per Mail.
#!/bin/bash
#PBS -N GPU-Visualisierung
#PBS -l select=1:ncpus=20:mem=60GB:mpiprocs=20:ngpus=1
#PBS -l walltime=04:00:00
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
start-desktop
Nach Einwahl auf dem GPU-Knoten öffnen Sie ein Terminal, laden das Modul Ihrer Anwendung und starten diese durch Aufruf des Programms im Terminal. Auf Grund der Modularisierungen sind die Anwendung nicht im Startmenü der Desktopumgebung zu finden.
Weitere Beispielskripte
Gaussian arbeitet prinzipiell auf einem Knoten. Das für MPI zuständige Softwarepaket ‚Linda‘ wurde nach Analysen der Skalierung (Benchmarking) nicht beschafft. Demzufolge können für Gaussian Jobs maximal 12 Kerne (2 CPU á 6 Kerne) reklamiert werden.
#!/bin/bash
#PBS -N gaussian
#PBS -l select=1:ncpus=12:mem=2gb
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
#PBS -o gaussian_pbs.out
#PBS -e gaussian_pbs.err
module add gaussian
PBS_O_WORKDIR=$SCRATCH/gaussian-files
cd $PBS_O_WORKDIR
g16 < ./fe48a.com
Bemerkung: wird wie im oben aufgeführten Skript keine Gaussian Version spezifiziert, so wird die höchste Version im Modulsystem geladen (gaussian/16b01-sse4). Executable heißt g16. Eine andere Form ist die direkte Versionsangabe, z.B. 'module add gaussian/09e01'; Executable heißt g09
#!/bin/bash
## options for requesting resources
## select - number of chunks (should be number of cores you want to use)
## ncpus - cores per chunk (should be 1)
## mem - requested memory per chunk
## place - how to distribute jobs across the machine (should be free or scatter)
#PBS -l select=32:ncpus=1:mem=250mb,place=free
## walltime - requested run-time of the job
#PBS -l walltime=24:00:00
## queue the job should be submitted to
## 'default' queue direct the job automatically
#PBS -q default
## supress requeueing
#PBS -r n
## location of the output of the job files
##PBS -W sandbox=PRIVATE
## Name of the Job, name is used for the output files and the 'job name' in qstat
#PBS -N caseName
## Job files are placed in ~/pbs.JOBID directory while job is running and copied afterwards to working directory
##PBS -e $PBS_JOBNAME_err.log
##PBS -o $PBS_JOBNAME_out.log
## Select the OpenFOAM Version you want to use, see "module av openfoam" for more
## OpenFOAM v1712
module add openfoam/gcc/7.1.0/v1712
## OpenFOAM 5.x
# module add openfoam/gcc/7.1.0/5.x
## execute mpi job
mpirun simpleFoam -case /scratch/username/path/to/case -parallel
#!/bin/bash
#PBS -N Ansys
#PBS -l select=1:ncpus=12:mem=2GB:mpiprocs=12
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
module load ansys/18.2
module load intel/impi
cd $PBS_O_WORKDIR
CORES=`cat $PBS_NODEFILE | wc -l`
export ANSYSLMD_LICENSE_FILE={Port}@{Lizenzserver} # optional
fluent 3ddp -mpi=intel -cnf=$PBS_NODEFILE -g -t$CORES -i inputfile > outfile
Bitte verzichten Sie beim Aufruf von "mpirun" auf Parameter wie z.B. "-np". OpenMPI wurde gegen die Taskmanagement Libraries von PBS gebaut und bekommt alle Parameter automatisch aus der Laufzeitumgebung des Jobs.
#!/bin/bash
#PBS -N MPI
#PBS -l select=10:ncpus=1:mem=2gb:mpiprocs=1
#PBS -l walltime=24:00:00
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
#PBS -o MPI-Test_pbs.out
#PBS -e MPI-Test_pbs.err
module add openmpi/gcc/9.1.0/4.1.5
cd $PBS_O_WORKDIR
mpirun ./Programm.exe
#!/bin/bash
#PBS -l select=2:ncpus=4:mpiprocs=4:mem=6gb,walltime=2:00:00
#PBS -r n
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
# Beispielhafte Inputfiles können Sie hier finden:
#
http://winserv.imfd.tu-freiberg.de:2080/v6.12/books/exa/default.htm
JOBNAME="example" # = Namensbasis des Inputfiles
WORKDIR="$SCRATCH/$PBS_JOBID"
LINKNAME="panfs_$PBS_JOBID"
echo "ABAQUS JOB: $JOBNAME"
echo "Loading modules"
module add abaqus/2019
NCPUSTOT=`qstat -f $PBS_JOBID | sed -n -e 's/ //g' -e 's/Resource_List.ncpus=//p'`
mkdir -v "$WORKDIR"
cd "$PBS_O_WORKDIR"
ln -v -s "$WORKDIR" "$LINKNAME"
cd "$WORKDIR"
cp -v -t ./ "$PBS_O_WORKDIR"/"$JOBNAME".inp
EXEC="abaqus interactive job=$JOBNAME cpus=$NCPUSTOT"
echo "running: $EXEC"
$EXEC
mv -v -f -t "$PBS_O_WORKDIR" "$JOBNAME".*
rm -v -f *
cd "$PBS_O_WORKDIR"
rmdir -v "$WORKDIR"
rm -v -f "$LINKNAME"
echo "finished"
#!/bin/bash
#PBS -N Name
#PBS -l select=1:ncpus=4:mem=15gb:mpiprocs=4
#PBS -l walltime=48:00:00
#PBS -l place=pack
#PBS -q short
#PBS -m abe
## Anpassen und zweite Raute entfernen:
##PBS -M
Ihre [dot] Mailadresse [at] tu-freiberg [dot] de
#PBS -o orca.out
#PBS -e orca.err
module load openmpi/gcc/7.1.0/2.1.1
module load orca/4.0.1
cd $PBS_O_WORKDIR
/trinity/shared/applications/orca/4.0.1/bin/orca inputfile >>outputfile.out
Häufig verwendete Umgebungsvariablen
Beim Schreiben von Skripten kann es hilfreich sein, mit Variablen anstatt mit statischen Einträgen (z.B. Orderpfade) zu arbeiten, um das Skript einfacher portieren zu können. Nachfolgend finden Sie eine Liste an Variablen, die in der Laufzeitumgebung eines Jobs zur Verfügung stehen. Vermeiden Sie das manuelle Überschreiben der nachfolgenden Variablen, um den systemseitigen Ablauf der Jobs nicht zu stören
Variable | Inhalt |
---|---|
$PBS_O_WORKDIR | absoluten Pfad zum Verzeichnis, von dem aus das qsub-Kommando abgeschickt wurde |
$PBS_NODEFILE | absoluter Pfad zur Datei, die die am Job beteiligten Knoten enthält; "/var/spool/pbs/aux/$PBS_JOBID" |
$PBS_JOBNAME | Name des Jobs, der im Skriptkopf mit "#PBS -N <jobname>" definiert wurde |
$PBS_JOBID | ID des Jobs in Form von "<ID-number>.mmaster" |
$USER | eigener Nutzername |
$HOME | absoluten Pfad zu /home/$USER |
$SCRATCH | absoluten Pfad zu /scratch/$USER |
$TMPDIR | absoluter Pfad in ein temporäres Verzeichnis im Arbeitsspeicher des Knoten. Kann als besonders schneller node-lokaler Scratch genutzt werden. Größenlimit ist der angeforderte Arbeitsspeicher des Jobs, bei 100% Füllstand wird der Job abgebrochen. Erstellte Dateien werden bei Jobende ungefragt gelöscht und müssen daher, wenn gewünscht, manuell bei Jobende wegkopiert werden, z.B. nach $SCRATCH/$PBS_JOBNAME |
$NCPUS | Im select-Statement (#PBS -l select=X:ncpus=Y:...) angegebene NCPUS-Zahl |
$OMP_NUM_THREADS | Ist im Normalfall gleich der Zahl der $NCPUS . Auf diese Variable greifen Anwendungen zurück, die mit mehreren Threads (OpenMP) arbeiten. Mit MPI parallelisierte Anwendungen nutzen diese Variable im Normalfall nicht. (Diese Variable kann durch die manuelle Angabe im select-Statement (#PBS -l select=X:ncpus=Y:ompthreads=Z:...) überschrieben werden.) |
$PBS_NODENUM | Bei Multi-Node Jobs die lokale Nummer der beteiligten Node |