Projets M1 - CHPS

Planning 2023 - 2024

Les projets sont divisés en deux périodes. Les dates importantes sont les suivantes.

Soutenances 1ère période 10 janvier

Assister aux soutenances de vos camarades est enrichissant, c’est pourquoi la présence est obligatoire à l’ensemble des soutenances.

Vous disposez de vingt minutes de présentation et quinze minutes de questions. Vous devez présenter en français mais vous pouvez avoir vos supports (slides) en anglais si vous le souhaitez.

 9h45-10h30 Groupe 1
 10h30-11h15 Groupe 4
 11h15-12h00 Groupe 5

 14h00-14h45 Groupe 2
 14h45-15h30 Groupe 3
 15h30-16h15 Groupe 7

Soutenances 2ème période 13 mai

Assister aux soutenances de vos camarades est enrichissant, c’est pourquoi la présence est obligatoire à l’ensemble des soutenances.

Vous disposez de vingt minutes de présentation et quinze minutes de questions. Vous devez présenter en français mais vous pouvez avoir vos supports (slides) en anglais si vous le souhaitez.

Planning non définitif :

 9h45-10h30 Groupe 7
 10h30-11h15 Groupe 3
 11h15-12h00 Groupe 2

 14h00-14h45 Groupe 1
 14h45-15h30 Groupe 5
 15h30-16h15 Groupe 4

Organisation

Choix du groupe et du sujet

Il faut constituer des groupes de trois ou quatre personnes (trois groupes de trois et quatre groupes de quatres). Chaque groupe classera les sujets suivant par ordre de préférence.

Pour indiquer votre choix de groupe et de sujet, merci d’envoyer un mail à < hugo POINT bollore AROBASE uvsq POINT fr >. Suivez scrupuleusement les instructions suivantes:

Les sujets seront attribués en essayant de satisfaire vos choix. Si votre mail ne respecte pas les consignes ci-dessus (il manque des membres en CC, il n’y a pas tous les sujets, le mail est envoyé trop tôt, etc.), vous serez moins prioritaire sur le choix des sujets que les groupes ayant respecté les consignes.

Les attributions finales de projet vous seront communiquées rapidement.

Prise de contact avec l’encadrant et déroulement des projets

Une fois votre sujet final confirmé vous devez prendre contact avec l’encadrant. L’encadrant vous indiquera ce qu’il attend de vous dans le projet et quels sont les objectifs pour la première et deuxième période.

L’encadrant pourra vous aider par mail et vous devrez planifier plusieurs rendez-vous au cours de l’année. C’est votre responsabilité de prendre contact avec lui et de lui demander des rendez vous ou lui poser des questions quand vous avez besoin d’aide.

Un minimum de trois rendez-vous est obligatoire par semestre.

On vous conseille le déroulement suivant pour le premier semestre (à minima, bien sûr vous pouvez demander d’autres rendez vous):

Travail

Chaque groupe doit obligatoirement mettre en place un dépôt github contenant les sources de vos travaux ainsi que tout script d’expérimentation.

Le travail peut être réparti mais vous devez tous participer au développement de votre projet. A ce titre, il n’est pas accepté qu’une personne n’ait aucune contribution sur le dépôt github.

Vous devrez impérativement renseigner vos noms et prénoms sur vos comptes github pour que l’on puisse évaluer les participations de chacun.

Rapports et soutenances

À la fin de chaque période un rapport sera envoyé par mail en mettant en destinataires < hugo POINT bollore AROBASE uvsq POINT fr > et votre encadrant.

Chaque rapport doit faire environ 10 pages en police 11 simple interligne. Ceci sans compter les figures ou les pages blanches, soit environ 4000 mots.

Le plagiat est strictement interdit, nous vous invitons à prendre connaissance de la charte anti-plagiat.

Le code source produit durant le projet sera propre, indenté, commenté et documenté. Il devra être envoyé sous forme d’un lien vers un dépôt public.

Il faudra aussi préparer une présentation de 20 minutes avec 15 minutes de questions. Les slides seront à envoyer à la fin de la soutenance aux mêmes destinataires que précédemment.

Sujets

1) Implémentation d’un réseau de neurones pour la reconnaissance de chiffres manuscrit

Un problème classique pour aborder le machine learning est la résolution du jeu de données MNIST. Il s’agit d’une base de données regroupant des images de chiffres manuscrits de petite taille (28x28) en noir et blanc.

Le but est d’entraîner un programme (dans notre cas un réseau de neurones) à classifier chaque image dans la bonne catégorie (un chiffre de 0 à 9). Ce réseau de neurones devra être implémenté de zéro en C ou C++, ce qui nécessitera de se familiariser avec la théorie dans un premier temps.

Le projet se déroulera de la manière suivante.

Pour le premier semestre:

Puis, à partir du second semestre:

En résumé, l’objectif du premier semestre sera de développer une version minimale, et celui du deuxième d’améliorer le temps d’entraînement et la précision.

2) Détection de cancers du sein a l’aide d’une IA

L’objectif de ce projet est d’implementer en Python, avec des extensions C/C++, un outil utilisant un réseau de neurones à convolutions afin de détecter la présence de tissus cancéreux dans un ensemble d’images au format PNG obtenues par IRM.

La première partie – premier semestre – consistera à implémenter une infrastructure neuronale séquentielle en C/C++ invoquée depuis des scripts Python, ainsi qu’identifier empiriquement la topologie idéale du réseau de neurones (la topologie qui permet le meilleur taux de détection/précision). Une analyse des performances séquentielles devra aussi être fournie en plus des résultats de fiabilité de détection.

La seconde partie – second semestre – consistera à paralléliser l’implémentation séquentielle et à comparer les performances des différentes versions en utilisant plusieurs compilateurs, librairies et configurations parallèles.

3) Implémentation d’un processeur parallele et distribué

Ce projet consiste à implémener une architecture processeur parallèle et distribuée. L’architecture en question est 64-bits et propose des registres scalaires, vectoriels, ainsi que matriciels. Plus de détails seront fournis avec la spécification.

Pour la première partie, il faudra implémenter le décodage des instructions ainsi que leur exécution séquentielle (mono-coeur).

La seconde partie se portera sur l’implémentation du parallélisme de tâches (multi-coeurs) et le rajout d’instructions de communication entre les différents coeurs/domaines NUMA.

4) Algorithme génétique pour l’auto-tuning de programme

Face à la multiplication des architectures matérielles et des outils, il est devenu difficile pour les ingénieurs HPC de configurer leurs applications afin d’obtenir l’efficacité maximale. Pour palier à ce problème, de nouvelles technique d’auto-tuning (configuration automatique) ont vu le jour. L’objectif de ce projet est d’implémenter en C ou C++, un outil qui explore automatiquement l’espace des configurations et aide le développeur dans son travail d’optimisation.

Pour cela, les étudiants devront réaliser un travail bibliographique pour mieux comprendre le domaine de l’auto-tuning, puis implémenter un algorithme génétique (GA) à partir de zéro afin de résoudre un problème de type “Black-box optimization”. Le projet se composera en deux phases :

Premier semestre :

Second semestre :

Une attention particulière sera portée sur la qualité logicielle, et également sur la compréhension de la littérature autour de l’auto-tuning. Quelques programmes cible seront fournis par l’encadrant.

5) Méthodes ensemblistes pour la modélisation

On dispose d’un jeu de données regroupant les exécutions d’un programme avec plusieurs configurations. On souhaite modéliser ce programme via des techniques d’IA afin de pouvoir plus facilement explorer l’espace des configurations. L’objectif de ce projet est d’implémenter en C ou C++ une technique ensembliste pour la régression, à partir de zéro. Plus spécifiquement, on s’intéressera aux méthodes de bagging (et optionnellement de boosting) se basant sur les arbres de décisions.

Pour cela, les étudiants devront réaliser un travail bibliographique pour mieux comprendre le domaine des techniques ensemblistes et le fonctionnement des arbres de décisions, puis implémenter un ou plusieurs de ces algorithmes. Le projet se composera en deux phases :

Premier semestre :

Second semestre :

Une attention particulière sera portée sur la qualité logicielle. Les données d’entraînement seront mises à disposition par l’encadrant pendant le premier semestre.

6) Validation des métriques de MAQAO et analyse critique de ses rapports

Étudier l’outil MAQAO et comprendre ses principales métriques. Écrire plusieurs programmes étalon permettant de valider ces métriques.

Dans un deuxième temps, transposer cette étude pour estimer la qualité de l’assistance fournie par l’outil sur des mini-apps fournies.

Au premier semestre l’accent sera mis sur les aspects single-thread et notamment déroulage et vectorisation de boucle puis, au second semestre, sur les aspects parallèles (multithreads ou/et multiprocessus).

Les programmes analysés par MAQAO seront compilés par des versions récentes des principaux compilateurs (GNU, LLVM, propriétaire Intel ou AMD, etc.) et exécutés sur un processeur x86 sous Linux.

Référence : http://www.maqao.org

7) Arrondi stochastique pour le calcul scientifique

Le standard IEEE-754 [1] est largement utilisé pour le calcul flottant dans les codes de simulation numérique. En raison de la taille limitée de la mantisse, le résultat d’une opération flottante doit être arrondi. Par défaut l’arrondi utilisé est l’arrondi déterministe au plus près, qui choisit le flottant représentable le plus proche du résultat.

Nous nous intéressons à un mode d’arrondi alternatif: l’arrondi stochastique (SR, Stochastic Rounding) [2]. Dans l’arrondi stochastique nous arrondissons vers l’un des deux représentables qui encadrent le résultat avec une probabilité qui dépend de la distance relative à ces représentables.

Ces dernières années, SR est étudié de près car la communauté scientifique a réalisé qu’il permettait un calcul plus juste pour des petites précisions. En particulier, des études ont montré que SR présente des avantages pour des codes d’apprentissage automatique, de résolution d’équations différentielles, ou pour des simulations météorologiques. Des travaux théoriques [3,4,5,6] ont également établi que pour différents algorithmes des bornes d’erreurs probabilistes pour SR en O(√ n) où n est le nombre d’opérations réalisées. Ces bornes probabilistes sont bien meilleures que les bornes obtenues avec l’arrondi déterministe au plus près qui sont en O(n).

Certains processeurs domaine-spécifique, comme le Loihi d’Intel [7] implémentent SR en matériel. Néanmoins, le coût en énergie et en temps de SR est supérieur à celui de l’arrondi déterministe. Il faut donc évaluer les avantages de SR au niveau de la justesse de calcul en regard à ce surcoût en énergie et temps.

Ce projet est l’occasion de s’intéresser de plus près à ce domaine. Le projet se décompose en deux parties:

[1] Kahan, William. “IEEE standard 754 for binary floating-point arithmetic.” Lecture Notes on the Status of IEEE 754.94720-1776 (1996): 11. https://people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF

[2] What Is Stochastic Rounding?, Nick Higham. https://nhigham.com/2020/07/07/what-is-stochastic-rounding/

[3] Connolly, Michael P., Nicholas J. Higham, and Theo Mary. “Stochastic rounding and its probabilistic backward error analysis.” SIAM Journal on Scientific Computing 43.1 (2021): A566-A585. https://epubs.siam.org/doi/10.1137/20M1334796

[4] Ipsen, Ilse CF, and Hua Zhou. “Probabilistic error analysis for inner products.” SIAM journal on matrix analysis and applications 41.4 (2020): 1726-1741. https://arxiv.org/pdf/1906.10465.pdf

[5] Arar, E. M. E., Sohier, D., de Oliveira Castro, P., & Petit, E. (2022). Stochastic rounding variance and probabilistic bounds: A new approach. arXiv preprint arXiv:2207.10321. https://arxiv.org/abs/2207.10321

[6] El Arar, E. M., Sohier, D., de Oliveira Castro, P., & Petit, E. (2023). Bounds on non-linear errors for variance computation with stochastic rounding. arXiv preprint arXiv:2304.05177. https://arxiv.org/abs/2304.05177

[7] https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html

[8] https://github.com/verificarlo/verificarlo

[9] https://www.gem5.org/