Le champ des possibles
Des Transformers récents
sur une clé de 2017
Trois expériences avec un agent IA, et une autre perception de ce qu’il est possible de construire.
En bref
Une clé d’inférence lancée en 2017 peut exécuter un modèle de décision de 2026 et un Transformer visuel de 2023, avec une qualité proche des références sur Mac. Pour le vérifier, l’agent a porté un ancien runtime sur Apple Silicon, reconstruit les graphes et corrigé des erreurs numériques. Un premier essai GPT-2 avait montré un calcul réel, mais seulement partiel.
Le résultat qui m’intéresse dépasse le matériel : des questions successives ont pu devenir des expériences mesurées, sans que je prenne en charge moi-même chaque difficulté d’implémentation. Ce carnet suit ce chemin, y compris ses échecs et ses limites.
Tout commence par une clé USB
Je branche une ancienne Intel Movidius Neural Compute Stick sur mon Mac. Je veux d’abord savoir ce qu’elle contient, si elle est encore utilisable et quels modèles pourraient y tenir. La question prend vite une autre dimension : avec nos connaissances actuelles, que pourrait-on faire de ce matériel ?
“Let's think from first principle, if we were to rewrite the whole stack from scratch.”
Une des questions de départ, extraite de la session
Je n’avais pas conçu les trois expériences à l’avance. Je demandais un premier résultat démontrable. Ce résultat devait nous apprendre assez de choses pour choisir la suite.
Le matériel réel
Intel NCS1 / Myriad 2
- Lancement
- 20 juillet 2017 [1]
- Calcul vectoriel
- 12 cœurs SHAVE
- Mémoire
- 4 Gbit, environ 0,5 Go
- Notre chemin d’exécution
- FP16, graphes statiques, USB
Poids, constantes, activations, buffers et firmware se partagent cette mémoire. La taille des poids ne suffit pas à prédire si un modèle peut tourner.
L’idée d’une « machine à remonter le temps » apparaît ici : exécuter des modèles arrivés plus tard sur un accélérateur de 2017. Elle porte sur le matériel. Les poids, les données d’entraînement et une partie de la pile logicielle n’étaient pas disponibles au lancement.
Expérience 01 · GPT-2, publié en février 2019
Peut-on commencer par un vrai calcul de GPT-2 ?
Nous prenons les poids préentraînés de GPT-2 Small. Le premier objectif est limité et vérifiable : envoyer sa projection d’attention QKV sur la clé, puis comparer ses sorties à celles du Mac. La matrice de 768 × 2 304 représente 1 771 776 paramètres, soit 1,42 % du modèle.
L’agent écrit un petit sérialiseur pour le format binaire de l’ancien NCSDK. Le calcul s’exécute avec le firmware Intel d’origine. Puis il est intégré à une génération de texte : la clé calcule cette projection du premier bloc, le Mac exécute le reste.
Le premier résultat est réel, mais hybride
Génération · tokens/s1,678 msnoyau QKV sur la clé
5,322 msQKV avec USB et API
3 / 3séquences greedy identiques au CPU
Protocole, mémoire et tentative qui échoue
GPT-2 Small contient 124 439 808 paramètres. Le budget théorique représente environ 237 Mio de poids FP16 et 36 Mio de cache KV à 1 024 tokens, avant le firmware et les espaces temporaires. Ce calcul ne démontre pas que le modèle entier peut être alloué.
Une tentative de chargement successif de toutes les projections denses échoue sur l’expansion MLP du premier bloc, avec le statut NCSDK −2. La même forme 768 × 3 072 fonctionne isolément. La cause n’a pas été établie. La grande projection vocabulaire, 768 × 50 257 et 73,62 Mio, fonctionne aussi seule.
Un test de parité sur une fenêtre de 256 tokens WikiText-2 donne 100 % d’accord top-1. Il s’agit d’un contrôle de l’implémentation, pas du benchmark WikiText-2 complet.
Expérience 02 · Crivo-17M, octobre 2026
Un modèle de décision complet, neuf ans après la clé
Je souhaite explicitement essayer un modèle de décision de type Jev. Nous choisissons Crivo-17M, un encodeur Ettin/ModernBERT compact. Il lit une demande et une liste d’options, puis renvoie une probabilité pour chacune. Il ne génère pas de texte libre.
« Ok, vas-y avec Crivo-17M et BANKING77. Travaille jusqu’à une démo avec toute l’inférence sur le stick, compare avec le Mac et documente le code et les résultats dans le repo. »
Instruction donnée pendant la session
Le modèle a sept couches, une largeur de 256 et 16,9 millions de paramètres. Nous passons à OpenVINO 2020.3, porté nativement sur ARM64. L’agent écrit directement un graphe IR v7 : embeddings, normalisations, RoPE, attention, MLP, tête de décision et softmax. Tout le réseau reste résident sur la clé.
Une décision réellement enregistrée
BANKING77:test:64“Can I reactivate my lost card that I found this morning in my jacket pocket?”
card_linkinglost_or_stolen_cardcompromised_cardVoir les 77 probabilités de cet exemple
| Intention | Probabilité |
|---|
Les 3 080 messages du test BANKING77 sont traités avec les 77 intentions, sans troncature : 79,64 % de macro-F1 sur la clé, contre 79,59 % sur le CPU et le GPU du Mac. Quatorze décisions diffèrent du CPU, sur 3 080. Le petit écart de score ne permet pas de conclure à une amélioration de qualité.
Ce qu’il a fallu traduire pour le runtime de 2020
| Opération du modèle | Expression dans notre graphe |
|---|---|
| LayerNorm | Réductions de moyenne et variance, puis arithmétique |
| GELU | Erf et opérations élémentaires |
| RoPE et attention | Constantes de rotation, GEMM dynamiques et softmax |
| Attention locale | Attention dense avec masque de fenêtre |
Les formes sont fixes : 960 tokens et 77 options pour BANKING77. Le fichier de poids et constantes FP16 fait 34,2 Mio. La démo à trois options utilise un autre graphe de 64 tokens et prend environ 52 ms ; ce chiffre ne représente pas le test complet à 77 intentions.
Le port implémente les décisions choice, pas toute l’API Jev. BANKING77 teste la conservation de qualité d’un modèle sur un autre matériel, pas une capacité générale sur des tâches inconnues.
Protocole complet · Exporteur Crivo · Profil des 354 étapes sur le device
Expérience 03 · DINOv2 (2023) + AnomalyDINO (2024 / WACV 2025)
Une anomalie, un premier pilote, puis le papier
Nous choisissons DINOv2 Small, un Transformer visuel de 22,1 millions de paramètres et douze blocs. La méthode AnomalyDINO compare les caractéristiques d’une image à celles d’un exemple normal. Pas besoin de réentraîner le réseau sur la clé.
Le premier pilote est volontairement réduit : 224 × 224, une seule catégorie, bottle. Les 83 images de test et trois références normales indépendantes donnent 99,15 % d’AUROC image et 546 ms de latence médiane sur le stick. La capture, la calibration et plusieurs inférences en direct sont aussi vérifiées avec la caméra physique du Mac.
La même bouteille, deux étapes de l’expérience


224 × 224 · Carte de 16 × 16 patches. Pilote sur bottle : 99,15 % d’AUROC image.
Ce premier résultat ne suffit pas à se comparer au score principal du papier. Je demande alors le passage à 448 × 448 et aux quinze catégories de MVTec AD. C’est cette demande qui fait apparaître un défaut invisible dans le pilote.
À 1 025 tokens, un calcul devient incorrect
Doubler la largeur et la hauteur multiplie environ par quatre le nombre de tokens et par seize les paires de l’attention. À cette taille, le runtime ancien corrompt certaines lignes lorsqu’il applique une constante vectorielle à tout un tenseur. L’agent isole le problème dans un test de LayerNorm, puis contourne ce chemin en déployant explicitement les constantes.
Un défaut reproduit, puis corrigé
LayerNorm isolée · 1 025 tokens# export_dino.py, activation du contournement
g.expand_vector_constants = size == 448
Le protocole complet demande aussi un masque calculé par PCA. La SVD randomisée de scikit-learn n’existe pas dans ce runtime. L’agent construit une approximation par 64 itérations de puissance FP16, directement dans le graphe, puis vérifie ses sorties. C’est une adaptation algorithmique documentée.
Au terme de ces itérations, les 1 725 images des quinze catégories et trois essais one-shot indépendants donnent 96,54 ± 0,39 % d’AUROC image sur la clé, 96,52 ± 0,40 % sur le Mac et 96,5 ± 0,4 % dans le papier, pour le même réglage AnomalyDINO-S à 448. Les six métriques sont conservées dans les résultats. [4]
Protocole complet, six métriques et limites du résultat
Réglage ciblé : AnomalyDINO-S (448), one-shot, agnostic, table 2 du papier. Huit rotations par référence normale. Les trois essais gardent trois références indépendantes, et non trois références combinées. Les catégories ont le même poids dans la moyenne.
| Métrique | Papier | Stick | Mac CPU / GPU |
|---|---|---|---|
| AUROC image | 96,5 | 96,54 | 96,52 |
| F1-max image | 96,0 | 95,99 | 95,98 |
| AP image | 98,1 | 98,13 | 98,15 |
| AUROC pixel | 96,3 | 96,28 | 96,26 |
| F1-max pixel | 57,9 | 57,98 | 57,94 |
| AUPRO ≤ 0,3 | 91,7 | 91,76 | 91,72 |
L’AUROC mesure la qualité de classement, pas un pourcentage de bonnes réponses à un seuil. F1-max est une statistique d’évaluation sur les seuils, pas un seuil de déploiement choisi. Des moyennes proches ne signifient pas que chaque distance de patch est identique.
Les scores 99,15 % du pilote et 96,54 % de l’extension concernent des populations et protocoles différents. Ils ne mesurent pas à eux seuls l’effet du changement de résolution. La démo caméra reste à 224, sans étude de précision sur des scènes caméra.
Protocole détaillé · Prédictions par image · Vérification caméra
Le code entre la question et la preuve
Ces résultats ont demandé de relier plusieurs niveaux : compilation ARM64, cycle de vie USB, format de graphe, opérations Transformer, mémoire et précision numérique. C’est ce travail d’ingénierie que l’agent a pris en charge, en testant les hypothèses et en comparant les sorties.
| Obstacle | Adaptation réalisée | Code |
|---|---|---|
| Ancien runtime sur Apple Silicon | Portage natif et correction de durée de vie des sémaphores USB/XLink | Patch ARM64 |
| Format de graphe historique | Sérialisation NCSDK puis IR v7, sans ancien convertisseur Python | graph.py legacy_ir.py |
| Encodeurs récents | Reconstruction explicite des graphes à partir des poids ouverts | Crivo · DINO |
| PCA et masque | 64 itérations, normalisation, signe déterministe et échelle anti-débordement | pca_ir.py |
| Vérifier où tourne le modèle | Transport, profilage, comparaisons indépendantes et conservation des artefacts | Pont MYRIAD Index des preuves |
Comment les modèles sont chargés, et ce qui reste sur le Mac
Pour Crivo et DINO, le firmware Intel est chargé en RAM par USB. Le Mac fournit un XML décrivant les opérations et un binaire FP16 de poids et constantes. Le plugin MYRIAD compile et charge ce graphe, qui reste résident pendant les appels. Aucun firmware n’a été réécrit ou flashé.
| Graphe | Poids et constantes | Entrées / sorties |
|---|---|---|
| Crivo BANKING77 | 34,2 Mio | IDs, masques, positions / 77 probabilités |
| DINO à 224 | 41,3 Mio | Image, référence / carte 16 × 16 et score |
| DINO à 448 | 178,5 Mio | Image, banque de 6 Mio / carte 32 × 32 et score |
À 448, les constantes déployées augmentent le fichier, pas les 22,1 millions de paramètres appris. Les volumes ci-dessus excluent les activations, le firmware et les buffers.
Le graphe d’encodage des références DINO s’exécute aussi sur la clé. Il est fermé avant de charger le graphe anomalie. Le Mac copie et concatène les vecteurs des huit rotations ; il ne calcule pas ces caractéristiques. Le graphe qualité utilise trois têtes indépendantes, soit 18 Mio de banques. Le test de latence utilise une seule tête et 6 Mio.
La capture, le décodage, le recadrage, la normalisation des images, la tokenisation, les échanges USB, les métriques et l’affichage restent sur le Mac. Les couches du modèle, la PCA et le score DINO 448 tournent sur la clé. Son profil compte 965 étapes exécutées, dont 419 pour la PCA, sans noyau CPU déclaré. Cela ne signifie pas que l’hôte n’utilise aucun CPU.
Calibration et inférence · Profil final · Environnement exact
Le matériel et les noyaux Intel sont réutilisés. Les modèles sont préentraînés. L’agent a écrit et adapté les morceaux qui rendent leur rencontre possible, puis produit les moyens de vérifier le résultat.
Et si le prochain défi était l’énergie ?
L’idée de la « machine à remonter le temps » portait aussi sur cette question : qu’aurions-nous pu faire avec ce matériel et son budget énergétique, si nous avions su écrire ce code à l’époque ? Nous avons donc cherché à estimer la consommation d’une inférence.
Mais les compteurs du Mac ne donnaient pas une mesure isolée de la clé. Attribuer une consommation à son seul calcul, au milieu de l’activité de l’hôte et des échanges USB, aurait produit un chiffre difficile à défendre. Nous avons arrêté cette piste avant d’en faire un résultat.
« On n'aura pas de retour très robuste à présenter sur la consommation d'énergie sans outiller davantage. Retirons cette mesure de l'expérimentation. »
Décision prise pendant la session
La question reste ouverte. Un prochain protocole pourrait synchroniser une mesure électrique USB avec les requêtes, distinguer le repos, le chargement et l’inférence, puis rapporter des joules par décision ou par image, à qualité comparable. Il faudrait aussi préciser la frontière : la clé seule, ou le système complet avec son hôte ?
Au-delà de cette clé, cela donne envie d’explorer des modèles compacts et des usages locaux, intermittents, contraints par une batterie ou par la disponibilité du calcul. Quelle quantité de calcul suffit réellement à résoudre un problème donné ? Nous n’avons pas encore mesuré la réponse énergétique. Nous avons maintenant de quoi construire l’expérience.
Un clin d’œil à Hoomano
Il y a moins de dix ans, chez Hoomano, nous mobilisions une équipe, de la recherche, des données et beaucoup d’intégration pour qu’un robot puisse estimer l’attention de son interlocuteur. [5] Les résultats me paraissent aujourd’hui bien modestes face à ce que nous venons de faire tourner. Ce contraste est vertigineux : je peux désormais engager ces expériences en restant concentré sur les questions à poser.
« On a une intelligence qui peut résoudre des problèmes d'ingénierie et d'intégration en réécrivant du code from scratch »
Ma formulation au moment de préparer ce récit
Il reste à concevoir un problème intéressant, à fixer ce qui compterait comme preuve et à juger les résultats. Mais un ancien frein d’implémentation mérite désormais d’être réexaminé. Je l’ai découvert progressivement, en voyant les questions devenir des artefacts vérifiables.
Et si nous étions des millions à vivre ce chemin ?
Ce qui m’intéresse maintenant, c’est la multiplication de ces parcours. Des personnes connaissent intimement un problème sans avoir tous les moyens techniques de l’explorer. Si elles peuvent engager ce travail, observer un résultat et itérer, quelles expériences vont-elles tenter ? Quels projets restés à l’état d’idée vont enfin rencontrer le réel ?
Quels projets écartons-nous encore pour des freins d’hier ?
Protocoles, limites et code ouvert
Ces essais portent sur une clé physique et un Mac M2 Pro de 16 Gio. Ils ne constituent pas un benchmark des agents IA ni une mesure du temps humain économisé. L’ancien matériel exécute des modèles ultérieurs avec une pile en partie ultérieure : NCSDK pour GPT-2, OpenVINO 2020.3 pour Crivo et DINO.
Le dépôt conserve les protocoles, les prédictions, les profils du device et la tentative qui a échoué. Un index de preuves relie les trois étapes. Les 48 artefacts historiques sont référencés par hash ; les changements de réorganisation ne remplacent pas les mesures d’origine.
Reproduire sur le Mac et la clé préparés
Les guides du dépôt listent les dépendances et les téléchargements nécessaires. Une seule application doit utiliser la clé à la fois.
# 01 · Génération hybride GPT-2
experiments/exp01_gpt2/README.md
# 02 · Préparer puis vérifier Crivo
bash experiments/exp02_crivo/setup.sh
.venv/bin/python -m experiments.exp02_crivo.scripts.run_crivo --no-reference
# 03 · Protocoles visuels et caméra
experiments/exp03_anomalydino/REPORT_224.md
experiments/exp03_anomalydino/PROTOCOL_448.md
La caméra est une démonstration locale. La page que vous lisez restitue les mesures archivées et ne demande aucun accès caméra.
Les trois jalons dans l’historique Git
8ed64d4· GPT-2, premier calcul réelf686c61· Crivo, modèle complet583b8f0· DINO 224 et caméra76d8fbb· DINO 448, les quinze catégories
Les jalons sont datés du 27 octobre 2026. Leur ordre retrace les étapes ; les dates des commits ne mesurent pas le temps de travail.
Références
- Intel Movidius NCS1. Annonce du 20 juillet 2017 · FAQ Intel, mémoire de 4 Gbit · Caractérisation expérimentale des accélérateurs, 2019.
- GPT-2. OpenAI, Better Language Models and Their Implications, 14 février 2019. Notre implémentation et ses limites.
- Crivo. Tardelli R. C. Stekel, Joint or Per-Option? Compact Encoders for Closed-Set Decisions, 22 octobre 2026. Révision évaluée · BANKING77, Casanueva et al., 2020.
- Vision. Oquab et al., DINOv2, avril 2023. AnomalyDINO, prépublication mai 2024, WACV 2025 · Table 2, réglage comparé · MVTec AD, CVPR 2019.
- Hoomano et LIRIS. Laboratoire commun BEHAVIORS.AI · Film CNRS, 2019. Le rapprochement dans le récit exprime mon regard rétrospectif sur cette période.
- Preuves de cette expérience. Rapports, prédictions et profils · Manifeste des 48 artefacts historiques. Les liens techniques de cette page pointent vers le commit
2efb014.
Citer ce carnet
Xavier Basset. « Des Transformers récents sur une clé de 2017 ». Carnet d’expérimentation, novembre 2026. https://xbasset.com/blog/2026/11/07/des-transformers-recents-sur-une-cle-de-2017/