Eléments logiciels pour le traitement des données massives

Eléments logiciels pour le traitement des données massives (ENSAE)

Cours animé par : Matthieu Durut, Xavier Dupré.

Le cours est évalué avec un projet informatique. Programme de l’année 2019 : Feuille de route 2019 (3A).


Eléments techniques

Anatomie et histoire d’un ordinateur

  • mémoire, cache, northbridge, southbridge

  • CPU, GPU, FGPA, ASICS

  • 2004 - espace entre deux circuits intégrés de 32 ns, passage à 24 ns ? effet quantique, passage d’électron

  • optimisation des calculs, parallélisation, notion de cache et de latence

Lectures

Machine Learning

CPU

Notebooks

Le notebook suivant montre comment écrire du code C++ tout en l’utilisant depuis Python pour mesurer une optimisation que proposent les processeurs CPU : le branching.

Code

  • ENH: Improves speed of one hot encoding, cette pull request (PR) modifie un code très court pour réduire le nombre d’allocations mémoire avec numpy

  • New K-means implementation for improved performances, cette pull request (PR) étudie une nouvelle implémentation de l’algorithme des k-means, il n’est pas évident de se plonger dans le code mais il faut lire les commentaires qui illustrent les différences de performances selon que la machine utilise ses caches L2, L3.

Lectures

Vidéos

Librairies

  • OpenMP : c’est une librairie très utilisée pour paralléliser les calculs en C++ sur plusieurs threads

  • OpenMPI : c’est une librairie utilisée pour synchroniser des calculs parallélisés sur plusieurs processeurs (ou machines)

  • daal4py, réécriture d’algorithme de machine learning optimisée pour les processeurs Intel

Intel propose une version de l’interpréteur python avec les principaux modules compilée spécifiquement pour ces processeurs : Intel Python. L’accélération n’est pas exceptionnelle pour un processeur avec un ou deux coeurs, mais elle l’est particulièrement sur des machines dédiées aux calculs.

GPU

Lectures sur le GPU

Lectures sur le C++

Python

Bas niveau

Sécurité et bas niveau

Optimisation

  • No Bits Left Behind : l’article quelques stratégies bas-niveau pour optimiser les programmes

Modules


Eléments théoriques

Crypographie, block chain

Lectures

Compilateur, compilation à la volée, JIT

La compilation à la volée ou JIT pour Just in Time est utilisé pour optimiser une partie du code après que l’exécution du programme ait démarrée. numba permet de demander à un compilateur JIT de remplacer le code python par un code optimisé en C++ souvent beaucoup plus rapide si ce code est purement numérique.

Lectures

à venir

Modules


Eléments logiciels

Compression des données

Lorsque les données sont volumineuses. Une solution consiste à les compresser.

Lectures

Modules

Workflow de données

Lectures

Modules

Framework de deep learning

Quelques modules spécialisé dans le calcul GPU:

Les ingénieurs cherchent sans arrêt à créer le bon outil, celui qui leur fait gagner du temps lors de la conception de programmes complexes. Voici quelques outils qui vont dans ce sens. Il faut toujours regarder la date de création de l’outil, s’il est toujours maintenu, s’il est utilisé…


Map Reduce

Map Reduce en pratique

Lectures

Vidéos

avec PIG

PIG n’est plus un langage très utilisé, il a été supplanté par Spark. Pour l’avoir utilisé quotidiennement en 2008-2009, sa logique est proche du :epkg:`SQL`, il était et doit encore être difficile à débugger dès qu’il inclut des scripts non PIG traitant des lignes de texte. Mais il était difficile de faire du PIG sans bien comprendre le map/reduce alors que Spark donne l’impression c’est plus facile.

Trois séances avaient été appliquées et dédiées à la découverte de Hadoop, un environnement qui permet d’exécuter des tâches Map/Reduce. Plusieurs angles d’approche sont possibles. Celle retenue est l’utilisation du langage PIG-latin dont la logique ressemble beaucoup à celle du SQL. Les outils Python simplifient la communication avec le cluster mais peuvent être effectuées via un terminal.

Trois projets réalisés par les élèves lors de l’année 2014-2015 :

Lectures

Getting started, installation, setup

PIG

Les examples sur PIG ne sont plus utilisés. Les instructions qui suivent datent de 2015. Il est très probable qu’elles ne fonctionnent plus telles quelles. Les notebooks proposés en exemple requièrent une surcouche apportée par le module pyenbc. Le python n’est pas l’objet de ce cours, les notebooks sont utilisés pour pouvoir regrouper dans un même document toutes les opérations effectuées dans un langage Map/Reduce. La page En résumé : Anaconda décrit comment installer ces outils sur les trois OS principaux Windows, OS X, Linux.


Bibliographie

Cours

Articles

Liens

Librairies / outils

  • amazon-dsstne : moteur de recommandation d’Amazon

  • Elastic Search : moteur de recherche

  • Giraph : Large-scale graph processing on Hadoop

  • Hadoop : système de fichier distribué + Map Reduce simple

  • Kafka : distributed streaming platform, conçu pour stocker et récupérer en temps réel des événements de sites web

  • Mesos : Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), Elixi

  • MLlib : distributed machine learning for Spark

  • Parquet : Apache Parquet is a columnar storage format available to any project in the Hadoop ecosystem.

  • Presto : Distributed SQL Query Engine for Big Data (Facebook)

  • Spark : Map Reduce, minimise les accès disques, (DPark clone Python de Spark, pas vraiment maintenu)

  • Spark SQL : SQL distribué, sur couche de Spark

  • Storm : Apache Storm is a free and open source distributed realtime computation system, conçu pour distribuer des pipelines de traitements de données

  • YARN : Ressource negociator

  • rapids : numpy, pandas version GPU

  • kubernetes : automatisation de déploiement d’applications dans des containers (type docker)

Librairies à suivre

  • multiverso : framework de parallélisation

  • lightLDA : Latent Dirichlet Application parallélisée

  • lightGBM : A fast, distributed, high performance gradient boosting (GBDT, GBRT, GBM or MART) framework based on decision tree algorithms.