Springe direkt zu Inhalt

R

Einleitung

R ist eine Programmiersprache und Softwareumgebung für statistiche Rechnungen und Graphiken.

Lokale Pakete

Viele Pakete werden automatisch mit R installiert.  Wenn einem aber ein bestimmtes R-Paket fehlt, kann man dieses lokal im eigenen home-Verzeichnis installieren. 

Achtung: Die Installation innerhalb eines Batch-Jobs funktioniert in der Regel nicht, daher sollte sie einmal direkt auf dem Login-Knoten durchgeführt werden.

Dazu muss man zunächst die gewünschte Version von R starten:

module load R/4.1.0-foss-2021a
R

In R muss man dann install.packages aufrufen, etwa:

install.packages('ergm')

Beim ersten Mal wird man aufgefordert, einen Server auszuwählen, von dem das Paket heruntergeladen werden soll. In der Regel sollte man sich für einen Server in Deutschland entscheiden.

Job-Skripte

Ein einfaches Beispiel-Skript, das an Slurm geschickt werden kann, könnte folgendermaßen aussehen:

#!/bin/bash

#SBATCH --job-name=my_R_job
#SBATCH --ntasks=1                             
#SBATCH --mem-per-cpu=4096
#SBATCH --time=1-12:00:00
#SBATCH --qos=standard

module load R/3.5.1-foss-2018b

cd /scratch/${USER}/r-jobs

Rscript script.r arg1 arg2

Mit dem R-Paket Rmpi können parallele Jobs gestartet werden. In diesem Fall muss die Anzahl der Tasks durch den Slurm-Parameter --ntasks angegeben werden. Allerdings sollte die Anzahl der zu startenden Prozesse, die an mpirun mit der Option -np lediglich 1 sein.

Achtung!  Es wird von  Rmpi ein Steuerprozess gestartet.  Deshalb muss man einen Task mehr anfordern, als man tatsächliche Programmprozesse verwenden will.  Wenn man dies nicht tut, bekommt man eine Fehlermeldung wie

There are not enough slots available in the system to satisfy the 8 slots that were requested by the application

#!/bin/bash

#SBATCH --job-name=my_R_job
#SBATCH --ntasks=8                             
#SBATCH --mem-per-cpu=4096
#SBATCH --time=1-12:00:00
#SBATCH --qos=standard

module load R/3.5.1-foss-2018b

cd /scratch/${USER}/r-jobs/

mpirun -n 1  Rscript rmpi_job.r ${SLURM_NTASKS} arg1 arg2