BigDL=BigData+Deep Learning

Hoy en día cuando escuchamos hablar de alguna gran empresa como Google, Facebook o Amazon solemos preguntarnos: “qué saben sobre mí, qué hacen con mis datos”… En este artículo revisaremos Big Data y Deep Learning, dos grandes conceptos que tales empresas manejan muy bien y luego veremos cómo los ponen a trabajar y cómo explotan nuestros datos usando herramientas como BigDL.


El término Big Data normalmente hace referencia a grandes volúmenes de datos que tienen una gran variabilidad y una gran velocidad de crecimiento, aunque también deberían incluirse en esta definición todas las tecnologías que han surgido para poder acometer los retos que supone la gestión de estos volúmenes de datos.

Hablando del conjunto de tecnologías que han aparecido junto el Big Data hemos de destacar una: Apache Spark.

Apache Spark es un “engine” de análisis unificado para el procesamiento de datos a gran escala. Proporciona APIs de alto nivel en Java, Scala, Python y R, y un motor optimizado que admite gráficos de ejecución general. También es compatible con un amplio conjunto de herramientas de alto nivel que incluyen Spark SQL para SQL y procesamiento de datos estructurados, MLlib para aprendizaje automático, GraphX ​​para procesamiento de gráficos y Structured Streaming para procesamiento incremental y flujo de datos.

Spark.apache.org

De acuerdo con dicha definición oficial, Spark, como “engine” o motor multipropósito, permite hacer casi cualquier cosa con grandes volúmenes de datos. Y entre esas cosas figura el Machine Learning con su MLlib.

El Machine Learning o Aprendizaje automático hace referencia a la capacidad de una máquina o software para aprender mediante la adaptación de ciertos algoritmos de su programación respecto a cierta entrada de datos en su sistema.

Pero en el caso que nos ocupa, que es poder hacer Deep Learning, en Intel desarrollaron BigDL a fin de incorporar tales capacidades a Apache Spark.

El Deep Learning lleva a cabo el proceso de Machine Learning usando una red neuronal artificial que se compone de un número de niveles jerárquicos.

¿Qué es BigDL?

BigDL es un framework para Deep Learning distribuido sobre Apache Spark que fue desarrollado por Intel y liberó a la comunidad de código abierto con el propósito de unir el procesamiento de Big Data y Deep Learning (https://github.com/intel-analytics/BigDL).

BigDL utiliza Intel® Math Kernel Library (Intel® MKL) y técnicas de computación paralela para lograr un rendimiento muy alto en servidores basados ​​en el procesador Intel® Xeon®, comparable al rendimiento de una GPU.

BigDL se implementa como una librería sobre Spark, para que los usuarios puedan escribir sus aplicaciones de Deep Learning como programas estándar de Spark. Como resultado, BigDL se puede integrar sin problemas con otras librerías de Spark (Spark SQL y DataFrames, pipelines de Spark ML, Spark Streaming, Structured Streaming, etc.) y puede ejecutarse directamente sobre los clústeres existentes de Spark o Hadoop.

¿Por qué BigDL?

Los escenarios más recomendados para uso de BigDL son:

  • Si necesitamos analizar gran cantidad de datos que están almacenados en HDFS, HBaseHive dentro de un cluster Spark/Hadoop.
  • Si necesitamos añadir funcionalidades de Deep Learning a nuestros programas o flujos de trabajo en Spark.
  • Si necesitamos ejecutar nuestras aplicaciones de Deep Learning sobre un cluster Spark/Hadoop en el cual se comparten recursos con otro tipo de aplicaciones (ETL, feature engineering, análisis de gráficos, …).
Empezando con BigDL

Para poder empezar con BigDL, en nuestro caso usaremos la API Python (API scala disponible) necesitaremos:

  • Java JDK 8 o superior.
  • Intérprete de python: Python 2.7, Python 3.5 o Python 3.6.
  • Instalador de paquetes Pip.

Para instalar BigDL:

En caso de que no tengamos instalado Pyspark, se instalará automáticamente una vez se haya instalado BigDL.

Una vez tenemos todo lo necesario para poder usar BigDL, podemos comprobar que todo está correcto:

Mi primera red neuronal

Llegados a este punto tenemos todo lo necesario para trabajar con BigDL, así que nuestro siguiente paso será ver cómo podemos construir modelos de Deep Learning. Para ello vamos a ver un ejemplo donde construimos un clasificador de textos basado en un modelo CNN, LSTM  o GRU (a discreción del usuario).

El primer paso que debemos realizar es la creación de un contexto de Spark y la inicialización de BigDL:

Lo siguiente que hacemos es cargar el conjunto de datos 20 Newsgroup que vamos usar, lo transformamos en un RDD de Sample, y lo troceamos en conjunto de entrenamiento y conjunto de validación.

Definimos la topología de la red neuronal que vamos a utilizar, en este caso definimos 3 topologías diferentes entre las que puede elegir el usuario:

Para finalizar creamos un Optimizer, al cual le pasamos el modelo que vamos a utilizar, el conjunto de datos de entrenamiento y una serie de hyper-parámetros y lanzamos el entrenamiento.

Los pasos mostrados son, de forma esquemática, lo necesario para que un data scientist pueda construir sus modelos de Deep Learning con BigDL. En https://github.com/intel-analytics/BigDL/tree/master/pyspark/bigdl/models/textclassifier se encuentra el código completo del ejemplo visto.

¿Cómo definir un modelo?

En el ejemplo del apartado anterior vimos un modelo de Deep Learning, sin detenernos en el cómo se define un modelo en BigDL. Por ello, en las siguientes líneas veremos las distintas posibilidades que ofrece, además de varios ejemplos.

En BigDL existen 2 formas de definir un modelo:

  • Sequential, la que usamos en el ejemplo del apartado anterior y suele ser la más habitual para modelos no muy complejos.
  • Functional, la que usaremos cuando nuestro modelo sea muy complejo. Expresa el modelo en forma de grafo.

A continuación revisaremos ejemplos simplificados de cómo definir nuestros modelos con ambas filosofías.

Sequential style

Functional style

Sequential style

Functional style

Sequential style

Functional style

Sequential style

Functional style

BigDL y otros frameworks

Una característica muy deseable en librerías como BigDL es la interoperabilidad con otros frameworks existentes y ampliamente usados por la comunidad de data scientists. En BigDL tenemos soporte para Tensorflow, Keras y Caffe.

En este apartado nos centraremos en Tensorflow y Keras, pues nos parecen más interesantes debido a que actualmente son muy usados y tienen una comunidad bastante amplia detrás.

Cargar un modelo Tensorflow en BigDL

Tensorflow

Lo primero que tenemos que hacer es generar los archivos .pb y .bin de nuestro modelo en Tensorflow.

Una vez tenemos los archivos .pb y .bin, ya podemos cargar el modelo en BigDL.

Guardar un modelo functional de BigDL en formato Tensorflow

En este apartado vamos a ver la operación inversa a la anterior, la cual solo está disponible para modelos BigDL desarrollados con la API Functional.

Construir un modelo Tensorflow y ejecutar en BigDL

Keras

Debemos tener en cuenta que BigDL solo es compatible con Keras 1.2.2 y con Tensorflow como backend, por lo que tendremos que tener instalada la dependencia de keras==1.2.2. Además, si nuestros modelos están en formato .h5 también deberemos tener instalada la dependencia h5py.

Cargar un modelo Keras en BigDL

En caso de que dispongamos de un fichero .json con la definición del modelo Keras que queremos cargar en BigDL.

También podemos definir nuestro modelo en Keras y generar a continuación el fichero .json que usaremos para cargar en BigDL.

Conclusiones

Como hemos visto en las líneas precedentes, con BigDL cualquier data scientist podrá crear y entrenar modelos de Deep Learning sobre Apache Spark sobre grandes cantidades de datos de forma distribuida, haciendo que los tiempos de entrenamiento sean más cortos y permitiendo a dichos modelos explorar más patrones que hagan aprender más al modelo.

Por otro lado, BigDL también ofrece a los data scientists la posibilidad de que los modelos que ya tienen desarrollados en otros framewoks, como Tensorflow o Keras, puedan ejecutarse sobre Apache Spark con muy pocas adaptaciones y una alta reutilización de código del modelo.

Miguel Ángel Prieto Martos

Soy ingeniero en informática “old-school” con 15 años de experiencia desarrollando proyectos de diversa índole y en IT (principalmente JAVA). Allá por 2015, el término Big Data despertó gran interés en mí e hizo que reorientara mi carrera profesional. Ahora, dentro del equipo Data Tech Labs, me dedico a la investigación y prospección de nuevas tecnologías para mejorar la plataforma de datos Datio-BBVA, así como a ampliar mis conocimientos en Machine Learning.

More Posts