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-2020 (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

BLAS, LAPACK, calcul matriciel

Notebook

Pas vraiment un notebook, un exemple d’utilisation d’une fonction LAPACK dans un code python / cython : Résoudre une régression linéaire avec BLAS (et le code associé direct_blas_lapack.pyx).

Lectures

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


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.