Skip to content

// pytorch → photons

Ingénieur logiciel · systèmes d'IA · Paris

Je fais tourner PyTorch sur du matériel exotique

Back-end à firmware — toute la partie discrète entre une puce de recherche et du code que l'on peut réellement lancer.

défiler

// couche_00 · signal

À propos

Systèmes d'IA, robotique et logiciels qui doivent dialoguer avec le matériel

Portrait d'Alhussein Jamil

Alhussein Jamil

Systèmes d'IA au plus près du matériel

Paris, France

Chez Arago, je travaille surtout sur les couches back-end PyTorch, la répartition du moteur d'exécution et le code de lancement d'un accélérateur IA photonique.

Avant cela : robots marcheurs et exosquelettes chez Wandercraft, puis vision par ordinateur pour l'automatisation robotique chez EyePick. Entre les deux, l'École polytechnique et Sorbonne Université.

J'aime le code qui doit composer avec le réel : matériel capricieux, physique, latence, humains, hypothèses bancales. Et oui, il m'arrive aussi de coder avec des assistants IA ; je savais déjà coder avant que cela devienne un marqueur social.

// couches_cachées · expérience

Là où j'ai été utile

Accélérateurs, robots, vision par ordinateur et prototypes qui ont dépassé le stade du carnet Jupyter

Quand le travail cesse d'être théorique.

Ingénieur logiciel, accélérateurs IA

Arago · Paris

  • Couches back-end PyTorch/ATen pour un accélérateur IA photonique : noyaux sur mesure, exécution de graphes et intégration à PyTorch.
  • Ordonnancement du moteur d'exécution : partitionnement des graphes, allocation rapide, transferts entre accélérateurs, sérialisation des lancements et files concurrentes.
  • Code hôte relié au firmware : les lancements deviennent des graphes de primitives pour cœurs mono et points de synchronisation.
  • Travail au plus près du matériel : émission d'ISA sur mesure, interfaces pilotes, configuration des accélérateurs, simulation et validation.
Voir plus

Silicium généraliste, approche PyTorch d'abord. Les API, le moteur d'exécution et les chemins firmware sont pensés pour les habitudes réelles des équipes d'IA.

Problème
La matmul photonique n'est qu'un noyau. Livrer le produit, c'est tout le trajet : PyTorch en entrée, moteur d'exécution et dispatch firmware au milieu, tenseurs en sortie sans casser les habitudes.
Ce que j'ai construit
Abaissement par le compilateur, moteur d'exécution côté hôte, chemins pilotes, allocation rapide, transferts entre accélérateurs, files de lancement et dispatch firmware.
Point délicat
Des régions de graphe ou des opérations isolées partent sur les accélérateurs, se décomposent en graphes de primitives, s'exécutent sur les cœurs mono, puis reviennent à PyTorch via des événements. Le tout doit rester familier pour une pile d'accélération classique.
PyTorchMoteur d'exécutionFirmwareAccélérateurs
GitHub ↗

Schéma d'exécution

Graphe PyTorch → découpage par le compilateur → exécution multi-accélérateur

01

Graphe de calcul PyTorch

entrée aten.mm norm gelu copie aten.mm add sortie
  • Les opérations ATen forment un véritable graphe de dépendances
  • Les arêtes de tenseurs indiquent où placer le calcul
  • Les régions accélérables sont isolées avant l'exécution
02

Compilateur + moteur d'exécution hôte

01 Abaisser le graphe
02 Répartir le calcul
03 Planifier les lancements et transferts
03

Exécution par accélérateur

sous-graphe A

Accélérateur 0

région -> DAG de primitives

Sessions d'exécution

file 0 file 1 file 2

Graphe primitif sur l'accélérateur

Cœur de contrôle
Unité de calcul laser
Synchronisation + événements matériel
PCIe / interconnexion des accélérateurs
sous-graphe B

Accélérateur 1

nœud ou région -> DAG de primitives

Sessions d'exécution

file 0 file 1 file 2

Graphe primitif sur l'accélérateur

Cœur de contrôle
Unité de calcul laser
Synchronisation + événements matériel
04

Résultat

  • Un lancement peut être un sous-graphe compilé ou une opération PyTorch isolée
  • Le firmware le transforme en DAG de primitives pour les cœurs mono
  • Les tenseurs intermédiaires circulent via PCIe ou les liens entre accélérateurs

Schéma simplifié — termes publics et génériques uniquement

Ingénieur en apprentissage automatique

EyePick · Paris

  • Développement de chaînes de vision par ordinateur pour l'automatisation robotique en temps réel : industrie, agriculture et cuisine.
  • Détection d'anomalies et classification d'images pour le contrôle qualité.
  • Adaptation de modèles ResNet lorsque les chaînes de type YOLO posaient des contraintes de licence.

Stagiaire en apprentissage par renforcement

Wandercraft · Paris

  • Entraînement de politiques de contrôle par RL pour le robot bipède Cassie et l'exosquelette Eve.
  • NVIDIA Isaac Gym et Ray RLlib pour la simulation parallèle et l'entraînement distribué.
  • Transfert sim-to-real avec apprentissage par imitation, adaptation de domaine et adaptation visuelle.

Stagiaire en algorithmes d'IA

Poppins (anciennement Mila) · Paris

  • Difficulté adaptative pour un jeu thérapeutique destiné aux enfants dyslexiques.
  • Clustering et métriques de jeu pour ajuster la difficulté sans retour explicite des enfants.
  • Travail sur l'algorithme et son intégration dans le jeu.

// poids · outils

Le chemin jusqu’ici

Compétences, formation, enseignement, langues et centres d’intérêt

Programmation

  • Python
  • C++
  • C
  • OCaml
  • Java
  • C#
  • SQL

Systèmes d'IA

  • Exécution PyTorch
  • Abaissement de graphes
  • Moteurs d'exécution
  • ISA sur mesure
  • Noyaux
  • Exécution multi-cœurs

Apprentissage automatique

  • Vision par ordinateur
  • Apprentissage par renforcement
  • Apprentissage par imitation
  • Transfert sim-to-real
  • Déploiement de modèles

Robotique

  • NVIDIA Isaac Gym
  • Ray RLlib
  • Contrôle robotique
  • Automatisation industrielle
  • Interfaces VR pour robotique

Outils

  • Linux
  • Git
  • Docker
  • Débogage
  • Intégration matériel/logiciel

Formation

  • École polytechnique

    Diplôme d'Ingénieur — équivalent master · 2020 — 2024

  • Sorbonne Université — UPMC

    Master 2 — Systèmes intelligents · 2023 — 2024

  • Lycées Buffon & Louis-le-Grand

    CPGE — MPSI → MP* · 2018 — 2020

Enseignement

  • Master X-HEC

    Intervenant invité en apprentissage automatique auprès d'étudiants en master.

  • Lycée Saint-Louis

    Examinateur oral (colleur) en mathématiques pour les étudiants en CPGE.

Langues

Français bilingue · Arabe langue maternelle · Anglais bilingue · Espagnol intermédiaire

Centres d’intérêt

  • MMA
  • Énigmes
  • Violon
  • Escalade

// propagation · travaux

Projets

Projets personnels avec de vraies démos

open source · RL · MuJoCo

DropRL — locomotion bipède

Un pipeline d'entraînement Ray RLlib sur MuJoCo, avec export de politiques de locomotion de type Cassie.

PythonRay RLlibMuJoCo
Problème
Faire marcher un bipède type Cassie en simulation sans lui apprendre des raccourcis absurdes.
Ce que j'ai construit
Un pipeline d'entraînement Ray RLlib sur MuJoCo, avec export de politiques de locomotion de type Cassie.
Point délicat
Le score peut monter pendant que la démarche reste mauvaise. L'essentiel du travail a été de rendre la marche crédible.
/ droprl · cassie · signaux de débogage RL synchronisés avec la vidéo t = 0.0s
/ droprl · snake-v0 · agent IA itération 0 · récompense 0.0 · score 0
étoile · politique π

projet de fin d'études · VR · robotique

Toucher affectif — VR

Une expérience Unity en VR avec contrôle du bras Franka Emika via Redis, calibration du suivi des mains et évaluations d'agréabilité/intensité dans le casque.

UnityVRFrankaRedis
Problème
Faire coïncider un geste de pinceau en VR avec un dispositif robotique réel, assez précisément pour une étude de psychophysique.
Ce que j'ai construit
Une expérience Unity en VR avec contrôle du bras Franka Emika via Redis, calibration du suivi des mains et évaluations d'agréabilité/intensité dans le casque.
Point délicat
Synchroniser rendu, robotique/haptique et réponses subjectives sans briser l'illusion.

Unity · VR · Franka Emika · Redis · suivi des mains

Simulation tactile

Simulation du toucher affectif

Une caresse au pinceau sur une main virtuelle, stimulus principal de l'étude.

Protocole et interface

Calibration

Calibration du suivi des mains

Le participant confirme les poses, puis suit un compte à rebours avant le début des essais.

Évaluation en VR

Interface agréabilité & intensité

Les réponses sont données dans le casque, sans interrompre le déroulé des essais.

jeu 2d · Unity · TDAH

Jeu de puzzles thérapeutique pour une étude sur le TDAH

Un monde central Unity avec quatre mini-jeux de réflexion, salles en pixel art, brouillard de guerre, logique de grille et puzzles physiques.

UnityC#Conception de jeu
Problème
Construire un prototype jouable pour observer comment des enfants ayant un TDAH passent de l'exploration à l'exploitation.
Ce que j'ai construit
Un monde central Unity avec quatre mini-jeux de réflexion, salles en pixel art, brouillard de guerre, logique de grille et puzzles physiques.
Point délicat
~200 heures seul sur la boucle de jeu, la conception des niveaux, les mécaniques, l'éclairage et la version de test utilisateur.

Monde central et choix du niveau

Un temple central avec statues repères et portails vers chaque mini-jeu.

Développé seul · ~200 heures · conçu pour des tests avec des enfants TDAH

4 mini-jeux

Puzzle de caisses colorées

Une salle façon Sokoban : pousser les caisses sur les dalles de la même couleur.

Pont fragile

Les chiffres sur les caisses indiquent combien de cases tiennent avant que le pont cède.

Glissade sur glace et pièges

La glace ne freine pas, les pics attendent au milieu, et l'erreur se paie vite.

Labyrinthe à la lampe torche

Un labyrinthe circulaire où le brouillard de guerre ne révèle que les cases proches du joueur.

IA de jeu · Pygame

Noine — Jeu du moulin

Une implémentation Pygame complète : règles, interface et bot Minimax.

MinimaxPygamePython
Problème
Coder le Jeu du moulin de bout en bout, avec une IA qui sait vraiment jouer.
Ce que j'ai construit
Une implémentation Pygame complète : règles, interface et bot Minimax.
Point délicat
La génération des coups change entre placement, déplacement et vol ; la recherche doit donc suivre l'état exact de la partie.
/ noine — jeu du moulin ·

cliquez sur un point · formez un moulin pour capturer une pièce

version Pygame originale

Plateau Noine en milieu de partie avec pièces orange et blanches
Milieu de partie
Plateau Noine pendant la capture d'une pièce après un moulin
Phase des moulins

géométrie · transport optimal

Distances de Wasserstein convolutives

Une implémentation Python des distances de Wasserstein convolutives (Solomon et al., SIGGRAPH 2015).

PythonGéométrie
Problème
Rendre les distances de transport optimal utilisables sur grilles et maillages.
Ce que j'ai construit
Une implémentation Python des distances de Wasserstein convolutives (Solomon et al., SIGGRAPH 2015).
Point délicat
S'appuyer sur la structure du domaine au lieu de matérialiser toute la matrice de coût.

Démonstrations de barycentres

Transition de formes 2D

Des points deviennent une étoile grâce à un barycentre de Wasserstein convolutif sur grille 2D.

Transition d'images RGB

Des barycentres calculés canal par canal mélangent deux photos couleur tout en conservant une structure lisible.

Transition 3D voxelisée

Un dinosaure voxelisé et un double tore interpolent par un barycentre 3D légèrement lissé.

Transport sur surface

Des gaussiennes à noyau de chaleur se mélangent sur un tore en 13 étapes, avec l'étalement visible.

// espace_latent · projets

Projets plus petits

Dépôts pour comprendre, tester ou vider une idée de la tête

…et bien d'autres.

// rendu · première_obsession

Premiers rendus 3D

Mes essais 3ds Max entre 10 et 15 ans

Enfant obsédé par Pixar. 3ds Max en autodidacte, chambres et personnages jusqu'à ce que j'arrête. Premier métier d'écran impossible à lâcher.

// couche_sortie · return

Contact

Projets, problèmes systèmes, nœuds techniques un peu étranges