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 2023 : Feuille de route 2022-2023 (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

Outils

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

TPU, IPU, FGPA, …#

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

Optimisations logicielles#

Calcul matriciel#

Autres que CPU, GPU#

Lectures


Eléments théoriques#

Crypographie, block chain#

Lectures

Algorithmes Distribués#

(à venir)

Lectures

Vidéo

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#

Structures de données#

Lectures

Threads et synchronisation#

  • threads, application multi-threadées

  • variables globales, synchronisation

  • threads et processus

Lectures

Plus proches voisins en grandes dimensions#

Distribution des calculs, stratégies de stockage, SQL NoSQL#

Lectures

Logiciels

Distribution des calculs en Python

Compression des données#

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

Lectures

Modules

Workflow de données#

Lectures

Modules

Deep Learning#

Vidéos
Cours

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é…

Données massives avec python#

Voir Données massives avec Python.


Map Reduce#

Map Reduce en pratique#

Lectures

Vidéos

avec Spark et Spark SQL#

Les notebooks ont été déplacés sur Introduction à Spark.

Lectures

FAQ

Modules

Getting started, installation, setup#

SPARK#

Voir Spark approximatif.


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.

Feuilles de routes des années passées#