Información y ayuda

HPC Universidad de Oriente

Herramientas de usuario

Herramientas del sitio


hpc-script-r

R

R es un poderoso software para estadística, gráficos, entre otros.

Hay dos comandos para ejecutar un script de R: Rscript y R CMD BATCH. Estos difieren en la forma que procesan la salida.

1. Cálculos en serie usando R CMD BATCH

Al usar R CMD BATCH toda la salida se direcciona a un fichero con terminación .Rout, cuyo nombre es igual al del script de R, a menos que se indique de otra forma. Por ejemplo:

#!/bin/bash

#SBATCH --nodes=1
#SBATCH --ntasks=1

module load R

R CMD BATCH Rcode.R

En el script de Slurm anterior la salida del trabajo se encontrará en el fichero Rcode.Rout. Note que no se especificaron los ficheros de salida y error. Para redireccionar la salida a un fichero específico, se debe sustituir la última línea por:

R CMD BATCH Rcode.R Rcodeoutput.txt

En caso de ser necesario pasar argumentos al script de R, ellos deben ser especificados inmediatamente después de R CMD BATCH y precedidos de -args:

R CMD BATCH -args "argumento1 argumento2 argumento3" Rcode.R Rcodeoutput.txt

2. Cálculos en serie usando Rscript

Al usar Rscript la salida no va a un fichero único, sino que hay que especificarlo mediante #SBATCH --output= y #SBATCH --error=. Por ejemplo:

#!/bin/bash

#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --output=slurm.%J.out
#SBATCH --error=slurm.%J.err

module load R

Rscript Rcode.R

En el ejemplo anterior, STDOUT será redireccionada a slurm.%J.out y STDERR a slurm.%J.err.

De ser necesario pasar argumentos a Rscript, se debe sustituir la última línea por:

Rscript -args "argumento1 argumento2 argumento3" Rcode.R

3. Cálculo en memoria compartida (multihilo)

Enviar un multihilo de R a SLURM es similar a enviar un trabajo OpenMP, ya que se ejecuta en varios núcleos de un mismo nodo usando la memoria del nodo. Por ejemplo:

#!/bin/bash

#SBATCH --nodes=1                
#SBATCH --ntasks-per-node=16    # 16 procesos por nodo (16 hilos)

module load R

Rscript Rcode.R

El script anterior enviará un trabajo que usa 16 núcleos (cores) de CPU en un nodo.

Asegúrese de usar límites en su código R de forma tal que use sólo 16 núcleos, ya que de otra manera se empeoran los tiempos de ejecución de la aplicación. Por ejemplo, cuando se usa el paquete paralelo de la función mclapply:

library("parallel")
...
mclapply(rep(4, 5), rnorm, mc.cores=16)

Descargar ejemplo.

hpc-script-r.txt · Última modificación: 2022/12/06 18:02 por Beatriz Valdés Díaz