Projets M1 - CHPS

Planning 2024 - 2025

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

Soutenances 1ère période 8 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 6
 10h45-11h30 Groupe 3
 11h30-12h15 Groupe 4

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

Soutenances 2nde période 7 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.

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

 14h00-14h45 Groupe 4
 14h45-15h30 Groupe 3
 15h30-16h15 Groupe 6

Organisation

Choix du groupe et du sujet

Il faut constituer des groupes de trois ou quatre personnes (trois groupes de trois, trois groupes de quatre). 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.

Premier semestre:

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) 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) AI-ACCE (AI based Assembly Code Cycles Estimator)

Design and implementation of a Machine Learning based tool aiming at evaluating the cost, in CPU cycles, of an innermost loop’s assembly code on a specific target architecture (Haswell).

Part I: Sequential implementation and first protoype

  1. State of the art: compile a list of lectures, publications, books, … related to the subject.
  2. Design a sequential implementation of a Machine Learning model in C++.
  3. Train the model on a set of benchmarks measured on a Haswell CPU. The model must take as input the benchmark loop assembly code and its associated cost in CPU cycles.
  4. Validate and tune the model until the predictions reach a reasonable degree of precision for the given validation set of assembly codes.
  5. Extend the set of training and validation benchmarks

Part II: Parallelization

4) CTS (Cryptocurrency Trading Simulator)

Design and implemention of a simulator for a secure cryptocurrency trading platform. The simulator must run as a server allowing multiple bots/external programs to trade through an API.

Part I: Sequential implementation and first protoype

  1. State of the art: compile a list of lectures, publications, books, … related to the subject.
  2. Design a client/server architecture in C++ using Linux sockets where the server initializes and configures the market with all required parameters from a given file. The evolution of the price of the available cryptocurrencies must evolve every second using a model of your chosing: Pseudo-random, reproducing the evolution of a real cryptocurrency using its time-series data, …
  3. Design an API allowing a client to access market information and issue operations. All portfolios must be handled on the server side.
  4. Implement a transactions and states logging system on both the the server and client.

Part II: Parallelism

  1. Update the server to handle multiple connexions and multiple transactions in parallel using Pthreads with each client limited to 1 transaction every 1 ms.
  2. Deploy multiple clients and generate trading logs.
  3. Add market and trades analysis/report:

Bonus:

Secure the infrastructure using cryptographic primitives: - Encrypt the traffic between the server and clients using OpenSSL - Hash the transactions data to ensure their validity and authenticity - Ensure cryptographically that the logs are tamper proof - Enforce authentication for clients

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 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) Suite de benchmarks pour la caractérisation d’un nœud de calcul hétérogène

Contexte

Au cours des dix dernières années, les architectures modernes pour le calcul haute performance se sont considérablement complexifiées en intégrant, au sein d’un même nœud, des processeurs “classiques” (des CPUs) et des accélérateurs (généralement des GPUs). Ces systèmes hétérogènes offrent des profils de performance très différents d’une application à une autre. Dès lors, il est crucial pour les ingénieurs HPC de bien caractériser ces spécificités afin d’optimiser l’exploitation des ressources à disposition, en guidant le développement logiciel pour relever des défis scientifiques et industriels toujours plus complexes.

Objectifs

Ce projet propose de concevoir une suite de benchmarks et de micro-benchmarks permettant de caractériser précisemment la performance crête d’un noeud de calcul hétérogène (CPU et GPU). En particulier, on s’intéressera aux grandeurs suivantes :

L’outil produit devra être portable : les benchmarks seront implémentés en C++, à l’aide de bibliothèques telles que Kokkos, OpenMP ou OpenCL. Il devra également générer un rapport détaillé des résultats obtenus (e.g. traces en format type JSON), comportant des tableaux et/ou des graphes pour chaque grandeur d’intérêt mesurée.

Une attention particulière sera portée sur la qualité du génie logiciel (gestion de version, système de build, etc.), ainsi que sur la compréhension des concepts théoriques de mesures de performance et des architectures matérielles.

Déroulement

Le projet se déroulera selon le planning suivant :

  1. Premier semestre
  1. Second semestre

7) Générateur de signature biologique basé sur les signaux électrocardiogramme