Tutti i progetti

Progetto personale · Studio

microGPT in C: studiare un modello linguistico attraverso il codice

Un progetto di studio basato su microgpt-c di Vishal Baraiya. Ho aggiunto strumenti per addestrare, salvare e osservare il modello.

Da dove sono partito

Volevo seguire quello che succede dentro un modello linguistico: come il testo diventa numeri, come funziona l’attenzione e come cambiano i pesi durante l’addestramento. Sono partito da microgpt-c di Vishal Baraiya, accreditato nel README del mio repository.

Il mio contributo

Ho aggiunto parametri da riga di comando, salvataggio e caricamento del modello, campionamento top-k e gradient clipping. La separazione tra dati di addestramento e validazione, insieme all’esportazione della loss in CSV, permette di osservare l’esperimento. Una modalità interattiva consente di provare un prefisso e leggere il completamento.

Cosa si può verificare

Il repository contiene il codice C, il Makefile e un piccolo dataset di esempio. Il README documenta i comandi per addestrare, salvare e ricaricare i pesi. È un progetto di studio: la generazione su un dataset piccolo non dimostra le capacità di un modello pronto per un prodotto.

Una prova riproducibile

Verifica eseguita il 6 settembre 2026 sul repository pubblico: 2.000 passi, seed 42, 112.000 parametri. Il dataset contiene 5.059 righe, divise in 4.553 per l’addestramento e 506 tenute da parte. Il programma calcola la loss di validazione sulle prime 100 righe di questo secondo gruppo.

In questa esecuzione la loss di validazione passa da 2,4386 al passo 200 a 1,6223 al passo 2.000. Misura l’errore nella previsione del carattere successivo su quel campione; non la correttezza del codice generato.

Loss di validazione · seed 42
PassoLoss di validazione
2002,4386
4002,1493
6001,9945
8001,8687
10001,7967
12001,7285
14001,6904
16001,6434
18001,6254
20001,6223

I primi tre output, senza selezione

int *p = 0;
for (int i = 0; coat = i++)
return *p;

Il secondo esempio contiene codice C non valido. Il test riguarda un solo seed e un piccolo dataset: mostra l’andamento dell’addestramento, non la capacità di programmare. Salvataggio e caricamento dei pesi sono stati verificati nella stessa prova.

Ripeti la prova

Darwin arm64 · Apple clang version 21.0.0 (clang-2100.0.123.102)

git clone https://github.com/Elgabor/microgpt-c-v2.git
cd microgpt-c-v2
git checkout baf96c2ea79f72781d6d9cc35f0baf79fa86e63f
make
./gpt -s 2000 --seed 42 --val-every 200 -o model.bin --log loss.csv -n 3
./gpt --load model.bin --seed 42 -n 3

Compilatore e architettura possono produrre piccole differenze numeriche. Il seed viene reinizializzato al caricamento, quindi i campioni generati possono differire da quelli a fine addestramento.

Dati e configurazione

Codice e riferimenti

Apri il repository