TensorFlow avec Spark 2.3: Le Meilleur des Deux Mondes

L’intégration de Tensorflow dans Spark apporte de nombreux bénéfices et crée de nombreuses opportunitées.

Cet article est basé sur une conférence du DataWorks Summit 2018 à Berlin. Cette conférence portait sur les nouvelles fonctionnalités de la nouvelle release 2.3 d’Apache Spark, un framework Big Data open source pour du calcul distribué sur clusters.

Étant donnée l’intérêt que j’éprouve pour le Deep Learning, je me suis demandé pourquoi je devrais utiliser une telle combinaison de software pour entraîner et utiliser mes models. Et, il se trouve que l’on peut profiter de la puissance de chacun des deux dans un grand nombre de cas d’usage. Mais, pour commencer, essayons d’abord d’utiliser un model de deep learning pour de la reconnaissance d’image en utilisant Tensorflow dans Spark 2.3.

Tensorflow

TensorFlow est la bibliothèque open source de Google dédiée au calcul numérique de haute performance. Prenant avantage de la puissance des GPUs, TPUs et CPUs, aussi bien sur serveur que sur cluster ou mobiles, elle est principalement utilisée dans les domaines du Machine Learning et plus spécifiquement du Deep Learning.

TensorFlow fournis un support pour le C++, le Python et plus récemment pour le Javascript avec TensorFlow.js. La bibliothèque en est déjà à la version 1.8 et embarque un wraper officiel du nom de Keras.

TensorFlow utilise Cuda et CudNN de Nividia pour communiquer avec les GPUs. Contrairement aux CPUs, les GPUs sont conçus pour le calcul parallèle et les opération matricielles, très présentes dans le Machine Learning, Deep Learning. Ainsi les traitements de données tirent profit de ces calcul parallélisés.

Etant donné la complexité de la multiplication Matricielle, voici un Benchmark. Essayons par la même occasion d’implémenter cette opération avec et sans Tensorflow.

Multiplication Matricielle

On constate que passé une certaine dimension, le temps de calcul d’une multiplication matricielle explose avec les CPUs alors que pour des GPUs il reste très bas.

Sans Tensorflow

Avec Tensorflow

Apache Spark

Apache Spark est un framework open source efficace et scalable dédié au Big Data. Il est reconnu pour sa capacité à faire des calculs lourds et distribués sur clusters avec un volume important de données. Il est à la fois simple d’usage et rapide. Plus simple qu’ Hadoop MapReduce, Spark permet de développer en Java, Scala, Python et R. Le framework est 100 fois plus rapide qu’Hadoop MapReduce.

Apache Spark est général. Il peut être utilisé en tant que moteur de requêtes SQL et peut aussi bien gérer du streaming avec Spark Streaming. En plus de cela, Spark embarque un bibliothèque de Machine Learning du nom de MLlib.

Le framework peut tourner sur des clusters Hadoop 2 avec YARN, Mesos, Kubernetes ou en standalone, et permet l’accès à des données de différentes source telles que HDFS, Cassandra, HBase et Amazon S3.

Le nouvelle release de Spark: Apache Spark 2.3, apporte de nombreuses fonctionnalités.

Charger des images à partir d’un système de fichiers

Voici un example de code pour charger des images à partir d’un système de fichiers

TensorFlow x Apache Spark 2.3: TensorFrame

Avec la release Spark 2.3, TensorFlow est supporté. On peut donc combiner la puissance des DataFrames, des Transformers et des Estimators à celui de TensorFlow et Keras.

Comme vous avez pu l’observer l’opération est plutôt directe. Il suffit juste de transformer le model en transformer ou en estimator.

Cas d’usage

Mais comment tirer profit de TensorFlow dans Spark ? Voici quelques cas d’usage:

Une des étapes les plus chronophages dans l’entraînement du model de Deep Learning est le choix des hyperparamètres. Un petit changement peut avoir de grandes conséquences, mais nous n’avons pas le temps de tester toutes les combinaisons possibles. Cependant, nous pouvons gagner du temps en utilisant TensorFlow. En effet, on peut réaliser du paramétrage de précision des hyperparamètres en associant à chaque noeud du cluster Spark différents paramètres, lancer les entraînements en même temps tout en effectuant une validation croisée pour ne garder que le meilleur.

En plus de tout cela, cette combinaison de logiciels est également utile au déploiement et à la scalabilité. Grâce à Spark, il est possible de pousser un model pré-entraîné sur les noeuds et ainsi distribuer la charge de calcul. Et il est aussi possible de monter en charge, si notre service se trouve saturé nous pouvons y ajouter un noeud.

Conclusion

Pour conclure, cette nouvelle release d’Apache Spark offre la possibilité d’appliquer les avantages du calcul distribué au domaine du Deep Learning/Machine Learning.

Par |2018-09-28T13:05:52+00:00May 29th, 2018|Data Science, DataWorks Summit 2018, Évènements|2 Commentaires

À propos de l'auteur :

2 Comments

  1. […] Support des UDFs Pandas / Vectorizés dans in PySpark […]

  2. […] TensorFlow on Spark 2.3: Le Meilleur des Deux Mondes L’article couvre les nouvelles fonctionnalité de la version 2.3 d’Apache Spark, un framework open source pour le cacul distribué. Elle insiste sur l’integration de Tensorflow dans Spark et les bénéfices de combiné ces deux technologies. […]

Laisser un commentaire