Skip to content
Xavier Basset Carnets d’expérimentation

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.

La clé Intel Movidius bleue, photographiée sur le bureau près du Mac

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.

Figure 1. La clé utilisée dans les trois expériences. Photographie : Xavier Basset. Il s’agit du Myriad 2, pas du Myriad X de la NCS2.

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.

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/s
Mac CPU
59,39
Mac + clé
44,89

1,678 msnoyau QKV sur la clé

5,322 msQKV avec USB et API

3 / 3séquences greedy identiques au CPU

Figure 2. Le débit hybride inclut le Mac. Trois générations greedy de 64 tokens, mêmes prompts, CPU à quatre threads. Les temps QKV proviennent d’un test séparé. Rapport et frontières de mesure.
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.

Sérialiseur NCSDK · Mesures QKV · Trace de l’échec

La question suivante devient plus précise : quel modèle pourrait prendre une décision entière sur la clé ?

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_linking
98,00 %
lost_or_stolen_card
1,95 %
compromised_card
0,04 %
Voir les 77 probabilités de cet exemple
Distribution FP16 enregistrée, sans renormalisation
IntentionProbabilité

Télécharger l’extrait JSON

Figure 3. Relecture d’une mesure sur le stick, 894 tokens, 660,91 ms. Aucun modèle n’est exécuté par cette page. Seules les trois premières probabilités sont dessinées ci-dessus ; la distribution FP16 complète peut légèrement différer de 100 % à cause de l’arrondi. Prédictions originales.

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èleExpression dans notre graphe
LayerNormRéductions de moyenne et variance, puis arithmétique
GELUErf et opérations élémentaires
RoPE et attentionConstantes de rotation, GEMM dynamiques et softmax
Attention localeAttention 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

Une décision entière fonctionne. Peut-on maintenant changer de cas d’usage et regarder une image ?

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

Image réelle MVTec ADBord cassé d’une bouteille, image bottle/test/broken_large/000.png
Distances calculées sur la cléCarte réelle 16 par 16 calculée sur le stick à la résolution 224

224 × 224 · Carte de 16 × 16 patches. Pilote sur bottle : 99,15 % d’AUROC image.

Figure 4. Sorties réelles, premier essai one-shot. Bleu : distance faible, rouge : distance forte. Les palettes sont mises à l’échelle séparément. L’extension ajoute aussi les rotations et le protocole du papier : ces deux cartes ne constituent pas un test isolé de résolution. Image MVTec AD, © MVTec Software GmbH, CC BY-NC-SA 4.0 ; cartes dérivées sous les mêmes termes. Pilote · Extension.

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
Avant6,956erreur absolue maximale53 lignes avec erreur > 0,1
Après0,0163erreur absolue maximale0 ligne avec erreur > 0,1
# export_dino.py, activation du contournement
g.expand_vector_constants = size == 448
Figure 5. Même entrée FP16 et mêmes valeurs apprises, test réduit à la première LayerNorm. Le correctif répète des constantes et augmente le volume du graphe. Ces erreurs sont celles du test isolé, pas du modèle complet. Reproducteur et chiffres exacts · Code du contournement.

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.

Pourcentages, moyennes des trois essais
MétriquePapierStickMac CPU / GPU
AUROC image96,596,5496,52
F1-max image96,095,9995,98
AP image98,198,1398,15
AUROC pixel96,396,2896,26
F1-max pixel57,957,9857,94
AUPRO ≤ 0,391,791,7691,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.

ObstacleAdaptation réaliséeCode
Ancien runtime sur Apple SiliconPortage natif et correction de durée de vie des sémaphores USB/XLinkPatch ARM64
Format de graphe historiqueSérialisation NCSDK puis IR v7, sans ancien convertisseur Pythongraph.py
legacy_ir.py
Encodeurs récentsReconstruction explicite des graphes à partir des poids ouvertsCrivo · DINO
PCA et masque64 itérations, normalisation, signe déterministe et échelle anti-débordementpca_ir.py
Vérifier où tourne le modèleTransport, profilage, comparaisons indépendantes et conservation des artefactsPont 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é.

GraphePoids et constantesEntrées / sorties
Crivo BANKING7734,2 MioIDs, masques, positions / 77 probabilités
DINO à 22441,3 MioImage, référence / carte 16 × 16 et score
DINO à 448178,5 MioImage, 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
  1. 8ed64d4 · GPT-2, premier calcul réel
  2. f686c61 · Crivo, modèle complet
  3. 583b8f0 · DINO 224 et caméra
  4. 76d8fbb · 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

  1. Intel Movidius NCS1. Annonce du 20 juillet 2017 · FAQ Intel, mémoire de 4 Gbit · Caractérisation expérimentale des accélérateurs, 2019.
  2. GPT-2. OpenAI, Better Language Models and Their Implications, 14 février 2019. Notre implémentation et ses limites.
  3. 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.
  4. Vision. Oquab et al., DINOv2, avril 2023. AnomalyDINO, prépublication mai 2024, WACV 2025 · Table 2, réglage comparé · MVTec AD, CVPR 2019.
  5. 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.
  6. 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/

Expériences conçues et orientées par Xavier Basset, réalisées avec un agent de code IA. Article préparé avec le même mode de collaboration. Les citations signalées comme verbatim sont des extraits de la session ; les paragraphes de récit sont une rédaction éditoriale.

La construction et la présentation de ce carnet sont inspirées de Sparks of Weight-Space Programming, Rikiya Takehi, Jayden Teoh, Alex Zhang et Omar Khattab, novembre 2026. Nos expériences concernent l’intégration et l’exécution de modèles sur un ancien accélérateur.

Crédits et termes : photo de la clé, Xavier Basset. Image et cartes MVTec AD : CC BY-NC-SA 4.0. Crivo : CC BY-NC 4.0. DINOv2 et AnomalyDINO : Apache 2.0. Détails des visuels · Retour en haut