Les projets sont divisés en deux périodes. Les dates importantes sont les suivantes.
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
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
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.
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):
Premier rdv en octobre après avoir fait un premier état de l’art sur le sujet proposé,
Deuxième rdv quelques semaines plus tard pour vous assurer de la bonne direction prise ainsi que pour éclaircir les possibles interrogations,
Troisième rdv fin novembre pour discuter de l’avancement du projet et des priorités à donner avant la fin du semestre,
Quatrième rdv début janvier pour faire un point avant la première soutenance et discuter des objectifs de la deuxième période
Rendez vous à la demande selon vos besoins et la disponibilité de l’encadrant (pensez à prendre rdv à l’avance par mail).
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.
À 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.
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.
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.
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.
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).
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.
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
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 :
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.
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.
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.
Le projet se déroulera selon le planning suivant :