Principe de fonctionnement

BootGPT repose sur le Master Boot Record (MBR) de 512 octets, entièrement rédigé en assembleur 16 bits. Ce petit programme charge, via l’interruption BIOS int 13h, un réseau de neurones de 11,5 KB réparti sur les 23 secteurs suivants, puis effectue l’inférence en mode réel sur un processeur 386. Aucun système d’exploitation, aucune bibliothèque C et même aucun runtime ne sont impliqués : le processeur exécute directement les opérations arithmétiques nécessaires à la propagation du réseau.

; boot.asm – charge les poids et lance l'inférence
mov ah, 0x02          ; int 13h – lecture secteur
mov al, 23            ; nombre de secteurs à lire
mov ch, 0x00          ; cylindre 0
mov cl, 0x02          ; secteur de départ (après le MBR)
int 0x13
; ... appel du forward pass avec imul/idiv ...
int 0x10              ; affichage du texte généré

Architecture et contraintes matérielles

Le modèle est un réseau à un seul niveau caché, entraîné sur des séquences de huit caractères. Les poids sont quantifiés en entier 8 bits (int8) avec des échelles puissance‑de‑deux, ce qui permet d’utiliser uniquement les instructions imul et une division entière (idiv) pour chaque multiplication‑accumulation. Cette contrainte d’instructions garantit que le code tient dans les 510 octets réservés au code du MBR, tandis que les poids, le vocabulaire et les chaînes de caractères occupent les secteurs de données. Le processeur 386, limité à 16 bits, ne dispose pas de registre SIMD ; le choix de la quantification int8 minimise donc la charge de calcul et la consommation de mémoire.

Processus d’entraînement et quantification

Le jeu de données est généré par corpus_gen.py, qui crée 3 Mo de faux journaux d’amorçage (dmesg) à partir d’une version de noyau Linux et d’un disque virtuel. Chaque session de boot utilise un journal différent, afin d’éviter la redondance qui rendrait le modèle trop prévisible. Le script train.py entraîne le réseau avec des embeddings de caractères, applique une fonction d’activation softclip implémentée en assembleur (cdq/idiv) et effectue un échantillonnage argmax alimenté par un bruit temporel. Après l’entraînement, les poids sont quantifiés en int8 et les échelles sont arrondies à la puissance de deux, garantissant une correspondance exacte entre la sortie Python et celle du code assembleur, vérifiée caractère par caractère.

Comparaison avec d’autres projets de boot sector

Des initiatives comme sectorllm ou sectorlisp‑nn exécutent des modèles beaucoup plus lourds (transformer à 5 couches, interpréteur Lisp) en utilisant quelques kilooctets d’assembleur 16 bits, mais ils conservent les poids dans le même espace limité. BootGPT adopte l’extrême opposé : l’intégralité du moteur d’inférence tient dans le MBR de 510 octets, les poids étant stockés dans les secteurs suivants. Le résultat n’est pas un générateur de texte général, mais un « hallucinateur » de logs d’amorçage, capable de reproduire le format d’un dmesg Linux avec des timestamps, des adresses PCI et des événements ACPI, même pour du matériel fictif. Cette spécialisation montre que, sous des contraintes de taille sévères, un réseau très petit peut encore produire une sortie cohérente lorsqu’il est entraîné sur un domaine limité.