Projets M1 - CHPS

Planning 2026 - 2027

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

Soutenances 1ère période 6 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.

 10h00-10h45 Groupe X
 10h45-11h30 Groupe X
 11h30-12h15 Groupe X

 14h00-14h45 Groupe X
 14h45-15h30 Groupe X
 15h30-16h15 Groupe X
 16h15-17h00 Groupe X

Organisation

Choix du groupe et du sujet

Il faut constituer des groupes de quatre personnes. 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 > hugo.bollore@uvsq.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

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.

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.

Celui-ci devra être publique et vous devrez transmettre le lien vers celui-ci à :

Vous devrez indiquer dans le champ objet « [PPN] Lien dépôt Groupe x» et dans le mail la liste des étudiants de votre groupe

Déroulement des projets

Plusieurs étapes seront obligatoires:

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 > hugo.bollore@uvsq.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 faudra aussi préparer une présentation de 20 minutes avec 15 minutes de questions. Les slides seront à envoyer avant la soutenance aux mêmes destinataires que précédemment.

Sujets

1) Optimisation avec MAQAO d’un code MiniMD

Evaluation des performances séquentielles puis parallèles de miniMD à partir des rapports MAQAO (sans LLM). Optimisation des points chauds remontés par MAQAO (encore une fois sans LLM).

Production par un LLM d’une miniapp fonctionnellement équivalente à miniMD : discutez de sa qualité par rapport à miniMD (taille et lisibilité du code, précision de la simulation, consommation mémoire, performance etc.). Utilisation de MAQAO (sans LLM) pour évaluer la performance puis comparaison avec celle du miniMD original (là encore sans LLM).

Sur le miniMD original, obtenir d’un LLM des analyses de performance et des optimisations possibles d’abord à partir du simple code et d’un profil (perf record ou MAQAO lprof) puis avec en sus le rapport complet MAQAO. Analyse de ce qui pourrait être amélioré dans MAQAO pour y parvenir (ou s’en rapprocher) sans avoir besoin d’intégrer un LLM dans cet outil. Production d’un script Python ou d’un programme C permettant d’automatiser au moins une de ces améliorations à partir de la version texte des résultats MAQAO (CSV/JSON/TXT).

2) Path tracing: méthodes de Monte Carlo pour la synthèse d’images

Les techniques de ray tracing pour la synthèse d’images en trois dimensions deviennent de plus en plus répandues. Leur principe est de simuler le trajet des photons (ou “rayons”) dans le but d’obtenir un rendu réaliste.

En particulier, l’objectif de ce sujet sera d’implémenter un renderer fonctionnant sur le principe du path tracing, une approche combinant le ray tracing “classique” avec les méthodes de Monte-Carlo (càd. utilisant des procédés aléatoires pour résoudre des problèmes déterministes). Cette approche consiste à choisir aléatoirement les rebonds des rayons quand ils rencontrent un obstacle. Elle a notamment l’avantage de converger vers la solution exacte de l’équation de rendu, qui décrit l’équilibre entre la lumière reçue et émise par une surface, permettant ainsi des rendus particulièrement fidèles. Le projet se déroulera de la manière suivante.

Premier semestre:

Second semestre:

3) Implémentation GPU de l’algorithme VPSR dans le framework Turbulence et application à l’inférence de LLM

Contexte scientifique et technique

L’optimisation des opérations en virgule flottante et la réduction de la précision numérique sont des enjeux cruciaux pour accélérer l’inférence en intelligence artificielle. Cependant, le choix du mode d’arrondi joue un rôle fondamental : l’arrondi au plus proche (Round-to-Nearest, RN) peut entraîner une accumulation d’erreurs lors de longues réductions, tandis que l’arrondi stochastique (Stochastic Rounding, SR) limite cette dérive au prix d’une légère fluctuation.

Ce projet s’articule autour de Turbulence, un framework d’instrumentation basé sur IREE Turbine (développé par Y. Chatelain). Il intercepte les calculs flottants au niveau du compilateur (MLIR) pour injecter de l’arithmétique stochastique et émuler la basse précision.

L’objectif du projet est d’étendre ce framework pour y intégrer l’algorithme VPSR (Variable-Precision Stochastic Rounding) détaillé dans un article récent des encadrants (qui sera fourni aux étudiants). Cet algorithme, intégré à la bibliothèque PRISM, permet de simuler de manière efficace n’importe quel mode d’arrondi et n’importe quelle précision variable directement au sein des modèles PyTorch. L’enjeu final est d’utiliser ces outils pour explorer les configurations matérielles simulées et trouver les paramètres optimaux pour l’inférence.

Déroulement du projet

Semestre 1 : Extension du framework Turbulence et optimisation GPU

Ce semestre sera dédié à l’implémentation de la méthode VPSR au cœur de la chaîne de compilation et à son accélération matérielle.

  1. Prise en main : Étude de l’article scientifique décrivant l’algorithme VPSR et appropriation de la base de code du framework Turbulence (dépôt local privé).
  2. Implémentation IREE / Python : Pilotage d’IREE en Python afin d’étendre Turbulence pour intercepter et remplacer chaque appel à une opération flottante standard sur le GPU par un appel personnalisé à l’algorithme VPSR.
  3. Adaptation GPU (Vectorisation) : L’algorithme VPSR devra être optimisé pour exploiter efficacement l’architecture matérielle des processeurs graphiques, en mettant l’accent sur une exécution hautement vectorisée.
  4. Validation : Vérification logicielle de l’implémentation GPU de VPSR et de sa correction numérique sur des petits exemples de test.

Semestre 2 : Expérimentation et optimisation de l’inférence LLM

Forts d’un environnement d’exécution GPU fonctionnel, les étudiants utiliseront ces outils pour mener des campagnes d’expérimentation sur des réseaux de neurones complexes.

  1. Reproduction expérimentale : Utiliser l’implémentation GPU validée pour reproduire les expériences clés de l’article sur un modèle de type GPT-2. L’objectif est d’utiliser PRISM/Turbulence pour simuler différentes configurations d’arrondi (ex: SR sur les projections MLP, RN sur la tête de prédiction) à différentes précisions, et d’observer expérimentalement l’impact sur la qualité du modèle (perplexité).
  2. Recherche de configurations optimales à grande échelle : Appliquer et évaluer ce pipeline d’inférence en précision variable sur un autre modèle de langage moderne et plus imposant (par exemple un modèle de la famille LLaMA). L’enjeu sera de déterminer expérimentalement les meilleures configurations d’arrondi et de précision couche par couche pour maximiser les performances de l’inférence tout en préservant la qualité des prédictions.

4) Conception d’un solveur pour l’aéronautique

Dans l’industrie aéronautique, l’aéroacoustique est utilisée pour modéliser la propagation d’ondes sonores dans les flux d’air enveloppant un avion en vol. Il est alors possible de simuler le bruit produit par un avion au niveau du sol lors du décollage et de l’atterrissage afin d’assurer le respect des normes environnementales et de permettre la conception de futurs modèles d’avion. Les simulations numériques reposent sur une approximation du modèle physique d’origine sur un domaine d’intérêt et en utilisant une technique de discrétisation adaptée. Le modèle numérique résultant est représenté par un système linéaire dont la résolution nous permet de simuler la pression acoustique dans les différentes parties du modèle.

Ce système linéaire a la particularité de comporter à la fois des parties creuses (présence significative de zéros) et des parties denses (faible présence ou absence de zéros). De plus, pour produire un résultat réaliste, le nombre d’inconnues dans le système peut être extrêmement important ce qui fait de sa résolution un défi de taille.

Le but de ce projet est de concevoir un solveur pour ce type de systèmes linéaires et l’implémenter en langage C, C++ ou Fortran (au choix).

Premier semestre

  1. Recherche et familiarisation avec les méthodes directes de résolution de systèmes linéaires creux et denses.
  2. Implémentation d’un premier solveur séquentiel simple traitant la totalité du système linéaire comme dense.
  3. Tests et validation du solveur dense.
  4. Choix et implémentation d’une technique permettant de tirer l’avantage du caractère creux de certaines parties du système linéaire conduisant à un solveur couplé creux/dense.
  5. Tests et validation du solveur creux/dense.
  6. Analyse des performances et identification des goulots d’étranglement dans la version séquentielle.

Deuxième semestre

  1. Exploration et implémentation d’approches de parallélisation (en mémoire partagée puis en mémoire distribuée).
  2. Mesures comparatives des performances entre la version séquentielle et la version parallèle (scalabilité, temps de calcul, consommation de mémoire et d’énergie).

Aller plus loin

La résolution de grands systèmes linéaires creux/denses posant de nombreux défis algorithmiques et techniques, ce projet permet également d’explorer des approches visant à réduire la quantité de calculs et la consommation de mémoire telles que la compression numérique de rang faible ou le calcul out-of-core. Il sera également possible de s’intéresser plus en profondeur aux problématiques de composabilité entre la partie creuse et la partie dense du solveur ainsi que de pratiquer le paradigme de programmation à base de tâches.

5) Optimisation du stockage de donnée d’un code Monte-Carlo pour le calcul de la densité d’état des matériaux à transition de spin

On s’intéresse à la simulation numérique des nano-matériaux à transition de spin (SCO), et plus particulièrement au calcul de la densité d’état de tels matériaux par une méthode de Monte Carlo.

Le projet consiste dans un premier temps à porter une solution de stockage de donnée développée pour le code Dyprosco dans un code MCES pour la simulation de matériaux 2D. Puis on proposera une solution pour le stockage de tableaux de densité d’état dans le cas de matériaux 3D. Au second semestre on adaptera ces solutions à la version parallèle du code MCES.

Etat de l’art et objectifs :

Dans [1,2] la méthode dite de Monte-Carlo Entropie Sampling (MCES) est introduite et permet la simulation des matériaux SCO en approximant l’Hamiltonien pour toute température T à partir de l’approximation du cacul combinatoire de la densité d’état de la molécule considérée. Dans [3,4] une méthode de calcul exact reposant sur une méthode de programmation dynamique remplace la méthode MCES pour le calcul de la densité d’état. Un des verrous de cette méthode est sa complexité mémoire exponentielle. Afin de permettre le calcul à l’échelle nanoscopique un format de stockage a été crée pour stockée l’ensemble des tableaux de densité d’état nécessaire au calcul [4].

Dans ce projet on souhaite mettre en oeuvre une solution logicielle pour ré-utiliser ce format de stockage dans le code MCES afin de contenir la complexité mémoire du code code MCES qui elle est quadratique.

Les développements seront réalisés sur le code Monte-Carlo-SCO développé au LI-ParRAD et en réutilisant les composants logiciel du logiciel Dyprosco (également développé au LI-PaRAD).

Mots-clefs : Monte-Carlo, Combinatoire, Physique des nano-particules, format de stockage, C + MPI

[1] J. Linares, C. Enachescu, K. Boukheddaden, F. Varret, Monte Carlo entropic sampling applied to spin crossover solids: the squareness of the thermal hysteresis loop, Polyhedron, 2003, 22, 14-17, 2453–2456, Elsevier Science

[2] I. Sheto, J. Linares, F. Varret, Monte Carlo entropic sampling for the study of metastable states and relaxation paths, Physical review E, 1997, 56

[3] J. Linares, C. Cazelles, P.-R. Dahoo, D. Sohier, T. Dufaud, et al.. Shape, size, pressure and matrix effects on 2D spin crossover nanomaterials studied using density of states obtained by dynamic programming. Computational Materials Science, 2021, 187, pp.110061. ⟨10.1016/j.commatsci.2020.110061⟩. ⟨insu-02953987⟩

[4] T. Dufaud, J. Linares, D. Sohier. Parallel Dynamic Programming for the Exact Computation of Density of State for 2D Spin-Crossover Nanomaterials. Algorithms, 2026, 19 (2), pp.111. ⟨10.3390/a19020111⟩. ⟨hal-05490616⟩

6) Programmation GPU AMD, benchmark et analyse de performances

L’objectif de ce projet est d’étudier la programmation HPC sur GPU AMD et les méthodes d’analyse de performances associées. Le projet comprendra la conception de benchmarks synthétiques permettant d’explorer différentes pratiques de développement GPU et d’étudier leur impact sur les performances. Ces benchmarks seront développés à l’aide de différentes API et bibliothèques (HIP, OpenMP, rocBLAS, etc.) afin de comparer les performances et les caractéristiques des différents backends.

Les étudiants devront également compiler et exécuter des applications HPC sur cluster, puis utiliser et comparer différents outils de profiling GPU AMD pour analyser leurs performances. Une analyse critique des outils sera menée afin d’identifier leurs forces, limites et besoins non couverts, et de proposer des pistes d’amélioration ainsi que de nouvelles fonctionnalités facilitant l’analyse et l’optimisation des applications GPU.

7) Analyse de performance et impact des optimisations des compilateurs LLVM sur la suite NPB

LLVM est une infrastructure open source permettant, entre autres, de concevoir des compilateurs. Les optimisations appliquées à un code source engendre de grandes variations sur la durée d’exécution des programmes. Les développeurs ont parfois besoin d’aller plus loin qu’un simple niveau d’optimisation (comme O2, O3 ou Ofast) et de comprendre dans le détail ce que le compilateur a appliqué sur le code pour arriver à une performance donnée.

Pour ce faire, LLVM donne des outils permettant de comprendre ces optimisations : -Rpass=, -Rpass-missed= permettent d’afficher à la compilation les transformations appliquées ou non (missed) dont le nom correspond à l’expression régulière donnée ; ou encore -fsave-optimization-record qui enregistre toutes les optimisations appliquées ou non dans un fichier YAML (lisible avec opt-viewer si nécessaire). Ces flags sont documentés dans la documentation LLVM.

NPB, créée par la NASA, comprend plusieurs catégories de problèmes et tailles variables, largement documentées.

L’objectif est d’analyser les performances séquentielles et parallèles des benchmarks NPB compilés avec des compilateurs basés sur LLVM (clang, icx, …).

Plan

Préliminaire

Sélectionner quatre benchmarks NPB à analyser tout au long du projet. La complexité en temps et en mémoire ainsi que la compréhension globale du kernel sont des informations importantes pour la suite du projet.

Première phase

Compilation NPB, premiers runs simples des benchmarks puis développement des scripts pour l’exécution automatique des kernels en séquentiels, caractérisation des indicateurs de performances et analyse de performances des optimisations llvm sur la base de ces indicateurs.

Seconde phase

Développement de script pour l’exécution en parallèle, caractérisations des indicateurs de performances pour la partie parallèle, analyse de performance de la partie parallèle sur la base de ces indicateurs et mise en relation avec l’analyse faites à la phase 1.

Mots clefs: Optimisation, LLVM, Analyse de performance