.. _l-projinfo3a: .. index:: 3A 3A - Projets informatiques ========================== .. contents:: :local: Travail attendu +++++++++++++++ Le projet a pour objectif l'implémentation d'un algorithme réparti, soit en utilisant le calcul sur GPU, soit via Map/Reduce, soit en implémentant vous-même la répartition des calculs sur plusieurs machines (virtuelles) via des primitives telles que `MPI `_ ou des `Key-Value Pair Storages `_. Les technologies proposées sont donc : * GPU : `CUDA `_ et C, ou CUDA et python via `pyCUDA `_ * n'importe quelle technologie sur CPU, une option proposée est un projet utilisant ;epkg:`python`, :epkg:`cython` et :epkg:`openmp`. Les projet :epkg:`td3a_cpp` ou :epkg:`td3a_cpp_deep` peuvent être utilisés comme point de départ. Vous êtes libres de traiter l'algorithme de votre choix avec la technologie de votre choix avec la contrainte que l'algorithme implémenté soit distribué par votre implémentation et non par la librairie que vous utilisez. Nous vous en proposons certains dans les articles ci-dessous. **A souligner dans le rapport et le code** * **GPU** : indiquer les parties parallélisées, les frontières entre CPU et GPU, une estimation du coût de l'algorithme CPU / GPU / nombre de verrous. * **Calcul distribué** : indiquer les parties parallélisées, les variables partagées, si cela est fait via un thread ou un processus, une estimation du coût de l'algorithme communication / CPU / nombre de verrous. .. _l-suggestio-articles-projet-3A: Suggestions d'articles ++++++++++++++++++++++ *Articles ou sujet que vous ne pouvez plus choisir* * `Map/Reduce Affinity Propagation Clustering Algorithm `_ ou `Parallel Hierarchical Affinity Propagation with MapReduce `_ * Algorithme `k-means clustering `_ *2014-2015* * `Parallel MCMC `_ * `Parallel Gradient Descent in Minibatches `_ * `FFT et convolutions sous GPU `_ * `Algos de PageRank `_ (p106) * `Recherche de valeurs propres en grande dimension `_ * `Algorithmes LASSO parallèles `_ * `Distributed Online Learning `_ * `Large-scale L-BFGS using MapReduce `_ * `LightLDA: Big Topic Models on Modest Compute Clusters `_ * `A Reliable Effective Terascale Linear Learning System `_ *2015-2016* * `Multi-Block ADMM for Big Data Optimization in Modern Communication Networks `_, optimisation distribuée (ADMM) * `A scalable system for primal-dual optimization `_, optimisation sous contrainte avec Map/Reduce et Spark * `Sorting and Permuting without Bank Conflicts on GPUs `_ * `Building Balanced k-d Tree with MapReduce `_ * `Scalable Models for Computing Hierarchies in Information Networks `_, Distributed Random Walks with Restart * `Optimally Pruning Decision Tree Ensembles With Feature Cost `_, voir section 5 * `Scalable Matrix Inversion Using MapReduce `_ *2016-2017* * `The Part-Time Parliament `_, ce papier introduit l'algorithme `Paxos `_ qui gère les problèmes de consensus entre machines. Une machine souhaite déléguer un travail à une autre mais elle a le choix. Comment s'assurer qu'une seule et une seule machine ne fait ce travail ? On pourra traiter n'importe qu'elle autre variance de l'algorithme plus récente. * `Schönhage-Strassen Algorithm with MapReduce for Multiplying Terabit Integers `_ * `A Fast Parallel Stochastic Gradient Method for Matrix Factorization in Shared Memory Systems `_ * `Asynchronous Methods for Deep Reinforcement Learning `_ * `Parallelizing Word2Vec in Shared and Distributed Memory `_ * `Exploiting Multiple Levels of Parallelism in Sparse Matrix-Matrix Multiplication `_ * `Hogwild!: A Lock-Free Approach to Parallelizing Stochastic Gradient Descent `_ * `L1-Regularized Distributed Optimization: A Communication-Efficient Primal-Dual Framework `_ * `Local Approximation of PageRank and Reverse PageRank `_ * `A Fast Parallel SGD for Matrix Factorization in Shared Memory Systems `_ * `CuMF_SGD: Fast and Scalable Matrix Factorization `_ *2017-2018* * `A Parallel Matrix Scaling Algorithm `_ * `Auto-Differentiating Linear Algebra `_ * `Efficient Distributed Locality Sensitive Hashing `_ * `Parallel GPU Implementation of Iterative PCA Algorithms `_ * `Large-Scale Matrix Factorization with Distributed Stochastic Gradient Descent `_ * `weighted minhash on gpu helps to find duplicate github repositories `_ (article de blog) *2018-2019* * `Estimating Mutual Information on Data Streams `_ * `Affinity Clustering: Hierarchical Clustering at Scale `_ (voir également `Spinner: Scalable Graph Partitioning in the Cloud `_, `Fennel: Streaming Graph Partitioning for Massive Scale Graphs `_, `METIS - Serial Graph Partitioning and Fill-reducing Matrix Ordering `_, `Balanced Label Propagation for Partitioning Massive Graphs `_) * `DSCOVR: Randomized Primal-Dual Block Coordinate Algorithms for Asynchronous Distributed Optimization `_ * `A Fast Parallel Stochastic Gradient Method for Matrix Factorization in Shared Memory Systems `_ *2019-2020* * `Anatomy of High-Performance Many-Threaded Matrix Multiplication `_ * `OpenMP parallelization of multiple precision Taylor series method `_ * `Parallel Adaptive Sampling with almost no Synchronization `_ * `Programming Parallel Dense Matrix Factorizations with Look-Ahead and OpenMP `_ *2020-2021* * `GADMM: Fast and Communication Efficient Framework for Distributed Machine Learning `_ * `The Indirect Convolution Algorithm `_ Nous vous recommandons d'adopter la démarche suivante: #. implémentation et débugging sur un petit jeu de données synthétiques où les choses sont sensées bien se passer et la taille du jeu de données rend le debugging plus rapide, #. application à un vrai jeu de données que vous aurez sélectionné sur un des sites suivants, :epkg:`DGML`, `Stanford Large Network Dataset Collection `_, `UCI Machine Learning Repository `_ ou autre (voir :ref:`l-datasources`), cette approche est aussi valable que de générer des jeux de données articielles de tailles différentes. Le site `Kaggle `_ `(2) `_ référence de nombreuses compétitions intéressantes. Toutefois, avant d'utiliser les données Kaggle, je vous encourage à lire les articles `Date use for teaching after competition concludes `_ et `Using a Kaggle contest as a term project `_. Les règles peuvent varier d'un projet à l'autre, prenez soin de les lire avant de choisir un projet car on ne peut pas tout faire avec les données disponibles sur ce site. .. index:: PageRank, k-means, factorisation de matrice Code de survie ++++++++++++++ * :ref:`blogpost_azure_file_attente`