Icone fr 02

Aprendizaje profundo con Apache Spark — Parte 1

Autor: Favio Vázquez

Este artículo representa la primera parte de una discusión sobre Distributed Deep Learning con Apache Spark. Analizaremos principalmente qué es Spark y los conceptos básicos de Spark + DL. Puedes encontrar la segunda parte aquí: Deep Learning With Apache Spark — Part 2.

  Introducción de  Apache Spark

 

apache spark

 

Apache Spark TM

Spark sus creadores lo definen como una tecnología rápida y genérica para el procesamiento de datos a gran escala.

Rápido en comparación con los enfoques anteriores en la gestión de grandes volúmenes de datos, como el clásico MapReduce. El secreto de Spark radica en la memoria (RAM) que hace que el procesamiento sea más rápido que el realizado en el disco

Generica significa, que se puede usar para múltiples funciones tales como: ejecución de SQL distribuido, creación de canalizaciones de datos, asimilación de datos en bases de datos, ejecución de algoritmos de aprendizaje automático, trabajo con estructuras gráficas, etc.

 

 

RDD

 

 

 

image 1

Imagen sacada de PySpark-Pictures de Jeffey Thompson

El punto de partida de Apache Spark es el Resilient Distributed Dataset (RDD), un set de datos dividido en particiones.

Un RDD es un conjunto de elementos, con tolerancia a fallas (fault-tolerant) , que se pueden ejecutar en paralelo. Puede crearlos paralelizando una colección que ya tienen en su programa driver o haciendo referencia a un dataset en un sistema de memoria externo como HDFS, HBase o cualquier fuente de datos que ofrezca un formato de entrada Hadoop.

 

rdd

 

Una cosa para recordar acerca de Spark es que en todas las transformaciones los resultados no se contaran de inmediato, sino que se aplica una estructura de gráfico. Las transformaciones se calculan solo cuando se define el gráfico.

 

Por defecto, cada RDD se puede recalcular cada vez que se realiza una acción en él. Sin embargo, también puede mantener un RDD en la memoria utilizando el método de caché, y en este caso Spark mantendrá los elementos alrededor del clúster en la memoria para un acceso futuro más rápido. También ofrece soporte para almacenar RDD en un disco o replicarlos en múltiples nodos

 

Si desea obtener más información sobre las transformaciones y acciones de RDD en Spark, consulte en la documentación oficial:

RDD Programming Guide – Spark 2.3.0 Documentation
Spark 2.3.0 programming guide in Java, Scala and Pythonspark.apache.org

Dataframe

image 2

 

Imagen sacada de PySpark-Pictures de Jeffey Thompson

Comenzando con la versión Spark 2.0.0 DataFrame, el dataset está organizado en columnas con nombre. Conceptualmente es equivalente a una base de datos relacional o un data frame en R / Phyton, pero con sistemas de optimización más sofisticados.

En este artículo no profundizaremos sobre el dataset, pero digamos que lo podemos definir como una colección distribuida de datos que pueden derivarse del  JVM object y luego manipularse mediante transformaciones funcionales. También están disponibles en Scala y Java.

Los dataframe se pueden se puede obterner de una variedad de fuentes tales como: datos estructurados, tabla en Hive, bases de datos externas o RDD existentes.

image 3

 

https://aspgems.com/blog/big-data/migrando-de-pandas-spark-dataframes

En resumen, el dataframe API es el medio utilizado por los desarrolladores de Spark para facilitar el trabajo con datos en el framwork. Es muy similar a los de Pandas y R pero con muchas ventajas. En primer lugar es que pueden distribuirse alrededor de los clusters, para que puedan trabajar con muchos datos; en segundo lugar  es que están optimizados.

Este fue definitivamente el paso más importante, que hizo que el uso de Spark fuera mucho más rápido con Java o Scala.

 

 

image 4

 

 

La persona responsable de esta optimización es Catalyst. Este último toma set de queries y crea un plan optimizado y distribuido para el cálculo.

 

 

 

 

 

 

image 5

Deep Learning y Apache Spark

 

image 6

https://becominghuman.ai/building-an-image-classifier-using-deep-learning-in-python-totally-from-a-beginners-perspective-be8dbaf22dd8

Si quiere saber más sobre el aprendizaje profundo, lea primero los siguientes artículos:

 

A “weird” introduction to Deep Learning

My journey into Deep Learning

¿Por qué utilizar Deep Learning en Apache Spark?

  1. Apache Spark es un framework  para el cálculos distribuido en un clúster.
  2. Hay partes del aprendizaje profundo que son computacionalmente pesadas y la distribución de estos procesos es problemática; Apache Spark es una gran solución.

Hay varias maneras de utilizar el aprendizaje profundo con Apache Spark, los enumeramos a continuación:

  1. Elephas: Distributed DL con Keras e PySpark:

maxpumperla/elephas

  1. Yahoo! Inc.: TensorFlowOnSpark lleva los programas de Tensorflow a los clusters de Apache Spark:

yahoo/TensorFlowOnSpark

 

  1. CERNDistributed DL con un enfoque en distributed training usando Keras y Apache Spark:

cerndb/dist-keras

  1. Qubole el aprendizaje profundo ha demostrado producir modelos altamente efectivos de aprendizaje automático en diferentes áreas (tutoriales Keras + Spark):

Distributed Deep Learning with Keras on Apache Spark | Qubole

  1. Intel Corporation: BigDL (Distributed Deep Learning Library for Apache Spark)

intel-analytics/BigDL

Deep Learning Pipelines

 

 

 

 

image 7

 

 

Databricks

En lo que nos enfocaremos en estos dos artículos  Deep Learning Pipelines.

databricks/spark-deep-learning
spark-deep-learning – Deep Learning Pipelines for Apache Sparkgithub.com

Deep Learning Pipelines es una biblioteca de código abierto creada por Databricks que proporciona API de alto nivel para el aprendizaje profundo escalable en Phyton con Apache Spark.

No pasará mucho tiempo antes de que se convierta en una API oficial, así que vale la pena echarle un vistazo.

Algunas de las ventajas de esta biblioteca, en comparación con las enumeradas anteriormente, son:

  • Proporciona API listas para usar que permiten el uso de aprendizaje profundo con unas pocas líneas de código.
  • Se centra en la integración de fácil uso sin sacrificar el rendimiento.
  • Esta creado por los desarrolladores de Apache Spark, por lo que es más probable que surja como una API oficial.
  • Está escrita en Python, por lo que se integra con las librerias más importantes y utiliza la potencia del Tensorflow y Keras, son dos de los más utilizados en el el aprendizaje profundo.

En la siguiente parte nos enfocaremos completamente en la DL pipelines library  y cómo usarlas. Veremos en particular algunos temas tales como: transfer learning en una simple pipelibe, cómo usar modelos pre entrenados para trabajar con una cantidad “pequeña” de datos y hacer predicciones, etc.

 

Si desea obtener más información sobre Pipeline en Data Science con Python, eche un vistazo a estos artículos de Matthew Mayo:

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 1: A Gentle Introduction

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 2: Integrating Grid Search

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 3: Multiple Models, Pipelines…

 

Para Pipeline en Spark, mire aquí:

 

ML Pipelines – Spark 2.3.0 Documentation