La programación con datos masivos en R (pbdR, a partir del inglésProgramming with Big Data in R)[1] es una serie de paquetes R y un entorno para el cálculo estadístico con grandes volúmenes de datos mediante el uso de la programación de alto rendimiento estadístico.[2] La pbdR utiliza el mismo lenguaje de programación que R con clases y métodos S3/S4 los cuales son usados entre los estadísticos y la minería de datos para el desarrollo de software estadístico. La diferencia significativa entre pbdR y el código R es que pbdR se centra principalmente en la memoria distribuida de los sistemas, donde los datos son distribuidos a través de varios procesadores y analizados en un modo por lotes, mientras que las comunicaciones entre procesadores se basan en MPI que se utiliza con gran facilidad en sistemas de computación de alto rendimiento (HPC). El sistema R se centra principalmente en máquinas simples multi-núcleo para el análisis de datos a través de un modo interactivo, tal como la interfaz gráfica de usuario.
Las dos implementaciones principales en R utilizando MPI son Rmpi[3] y pbdMPI de la pbdR.
La pbdR construida sobre pbdMPI utiliza paralelismo SPMD donde cada procesador se considera como esclavo y posee partes de los datos. El paralelismo SPMD introducido a mediados de 1980 es particularmente eficaz en entornos de cómputo homogéneos para datos de gran tamaño, por ejemplo, realizar la descomposición de valores singulares en una matriz grande, o realizar el análisis de clustering en grandes cantidades de datos de alta dimensión. Por otro lado, no hay ninguna restricción para utilizar paralelismo maestro/esclavo en entornos de paralelismo SPMD
El Rmpi[3] utiliza paralelismo maestro/esclavo donde un procesador principal (maestro) sirve como el control de los otros procesadores (esclavos). El paralelismo maestro/esclavo introducido a principios del 2000 es particularmente eficaz para tareas grandes en clusters pequeños, por ejemplo, el método bootstrap y la simulación Monte Carlo en estadística aplicada desde probabilidades i.i.d. es generalmente más utilizada en análisis estadístico. En particular, el paralelismo de extracción de tareas tiene mejor rendimiento para Rmpi en entornos de cómputo heterogéneos.
La idea del paralelismo PMD es para dejar que cada procesador haga la misma cantidad de trabajo, pero en partes diferentes de un conjunto grande de datos. Por ejemplo, un moderno GPU es una colección grande de coprocesadores más lento que pueden simplemente aplicar el mismo cálculo en partes diferentes sobre datos relativamente más pequeños, pero el paralelismo SPMD acaba con una manera eficaz de obtener soluciones finales (es decir, cronometrar que la solución sea más corta).[4] Es claro que pbdR no es solo propio para clusters pequeños, sino también más estable para analizar grandes volúmenes de datos y más escalable para supercomputadoras.[5] En resumen, pbdR
No le gusta el RMPI, ni paquetes paralelos en R,
No se centra en programación interactiva ni maestros/esclavos,
Pero es capaz de utilizar ambos paralelismos SPMD y de tarea.
Diseño de paquetes
La pbdR requiere el uso de varios paquetes desarrollados por el equipo núcleo pbdR. Los paquetes desarrollados son los siguientes.
General
I/O
Computación
Aplicación
Personalización
Cliente/Servidor
pbdDEMO
pbdNCDF4
pbdDMAT
pmclust
pbdPROF
pbdZMQ
pbdMPI
pbdADIOS
pbdBASE
pbdML
pbdPAPI
remoter
pbdSLAP
hpcvis
pbdCS
Entre estos paquetes, pbdMPI proporciona capas de funciones para una biblioteca MPI, y también produce una biblioteca compartida y un archivo de configuración para entornos MPI. Todos los demás paquetes confían en esta configuración para la instalación y carga de la biblioteca que evita dificultades de la biblioteca de enlaces y compilación. Todos los demás paquetes pueden utilizar fácil y directamente funciones MPI.
pbdMPI - Una interfaz eficaz para cualquier MPI OpenMPI o MPICH2 con énfasis en programas simples/datos múltiples (SPMD) estilo de programación paralela.
pbdSLAP - Incluye bibliotecas de álgebra lineal densa y escalable de doble precisión para R, basado en ScaLAPACK versión 2.0.2 el cual incluye varios paquetes de álgebra lineal escalables (denominados BLACS, PBLAS, y ScaLAPACK).
pbdNCDF4 - interfaz para unidatos paralelos NetCDF4 formato de archivos de datos
pbdBASE - Bajo nivel de códigos y capas ScaLAPACK
pbdDMAT - Clases matriciales distribuidas y métodos de programación, con enfoque en álgebra lineal y estadística.
pbdDEMO - Conjunto de paquetes de demostraciones y ejemplos, y esta viñeta unificada.
pmclust - Modelo paralelo basado en clustering utilizando pbdR
pbdPROF - Paquete de perfiles para códigos MPI y la visualización del análisis estadístico
pbdZMQ - Interfaz para ØMQ
Entre aquellos paquetes, el paquete pbdDEMO es una colección de 20 o más paquetes demos, los cuales ofrecen ejemplos de uso de varios paquetes pbdR, y contiene una viñeta que ofrece explicaciones detalladas para los demos y ayuda a comprender mejor la matemática o estadística.
Ejemplos
Ejemplo 1
Hola Mundo! Guarde el siguiente código en un archivo llamado "demo.r"
para ejecutar el código en el que Rscript es un programa ejecutable de línea de comandos.
Ejemplo 2
El siguiente ejemplo modificado desde pbdMPI ilustra la sintaxis básica del lenguaje de pbdR. Ya que pbdR está diseñado en SPMD, todo los scripts de R están almacenados en archivos y ejecutados desde la línea de comandos a través de mpiexec, mpirun, etc. Guardar el siguiente código en un archivo llamado "demo.r"
### Inicial MPI
library(pbdMPI, quiet = TRUE)
init()
.comm.size <- comm.size()
.comm.rank <- comm.rank()
### Colocar un vector x encima de todos los procesadores con valores diferentes
N <- 5
x <- (1:N) + N * .comm.rank
### Disminuye x utilizando la operación suma
y <- allreduce(as.integer(x), op = "sum")
comm.print(y)
y <- allreduce(as.double(x), op = "sum")
comm.print(y)
### Terminar
finalize()
y utiliza la orden
mpiexec-np4Rscriptdemo.r
para ejecutar el código en el que Rscript es un programa ejecutable de línea de comandos.
Ejemplo 3
El siguiente ejemplo modificado de la pbdDEMO ilustra el cálculo de la matriz básica de pbdR el cual realiza la descomposición de valores singulares en una matriz dada.
Guardar el siguiente código en un archivo llamado "demo.r"
# Inicializar el proceso grid
library(pbdDMAT, quiet=T)
if(comm.size() != 2)
comm.stop("Exactamente 2 procesadores son requeridos para este demo.")
init.grid()
# Configurar para recordar
comm.set.seed(diff=TRUE)
M <- N <- 16
BL <- 2 # bloquear --- pasando valores simples BL supone BLxBL blocking
dA <- ddmatrix("rnorm", nrow=M, ncol=N, mean=100, sd=10)
# LA SVD
svd1 <- La.svd(dA)
comm.print(svd1$d)
# Terminar
finalize()
y utiliza la orden
mpiexec-np2Rscriptdemo.r
para ejecutar el código en el que Rscript es un programa ejecutable de línea de comandos.
↑Ostrouchov, G., Chen, W.-C., Schmidt, D., Patel, P. (2012). "Programming with Big Data in R".
↑Chen, W.-C. & Ostrouchov, G. (2011). "HPSC -- High Performance Statistical Computing for Data Intensive Research".
↑ abYu, H. (2002). "Rmpi: Parallel Statistical Computing in R". R News.
↑Mike Houston. "Folding@ghome-GPGPU" Recuperado en 2007-10-04
↑Schmidt, D., Ostrouchov, G., Chen, W.-C., y Patel, P. (2012). "Tight Coupling of R and Distributed Linear Algebra for High-Level Programming with Big Data". High Performance Computing, Networking, Storage and Analysis (SCC), 2012 SC Companion: 811–815.
↑"100 most read R posts in 2012 (stats from R-bloggers) – big data, visualization, data manipulation, and other languages".