Direkt zum Inhalt

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 
. /etc/profile.d/modules.sh 
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

. /etc/profile.d/modules.sh
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

VariableInhalt
$PBS_O_WORKDIRabsoluten Pfad zum Verzeichnis, von dem aus das qsub-Kommando abgeschickt wurde
$PBS_NODEFILEabsoluter Pfad zur Datei, die die am Job beteiligten Knoten enthält; "/var/spool/pbs/aux/$PBS_JOBID"
$PBS_JOBNAMEName des Jobs, der im Skriptkopf mit "#PBS -N <jobname>" definiert wurde
$PBS_JOBIDID des Jobs in Form von "<ID-number>.mmaster"
$USEReigener Nutzername
$HOMEabsoluten Pfad zu /home/$USER
$SCRATCHabsoluten Pfad zu /scratch/$USER
$TMPDIRabsoluter 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
$NCPUSIm select-Statement (#PBS -l select=X:ncpus=Y:...) angegebene NCPUS-Zahl
$OMP_NUM_THREADSIst 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_NODENUMBei Multi-Node Jobs die lokale Nummer der beteiligten Node