Come Costruire e Addestrare il Tuo GPT su un Laptop Comune
La maggior parte dei tutorial sulle reti neurali oggi si riduce a due scenari. Ti viene chiesto di chiamare l'API OpenAI con un paio di righe di Python, oppure di scaricare un modello già pronto da Hugging Face e chiamare il metodo .generate(). In entrambi i casi, tutti i meccanismi interni rimangono dietro le quinte. Ottieni un risultato, ma a malapena capisci come le moltiplicazioni matriciali trasformino il testo grezzo in frasi significative.
Recentemente ho scoperto il repository llm-from-scratch dello sviluppatore angelos-p. È un workshop interattivo dove scrivi ogni componente di un modello linguistico da zero. Nessuna astrazione pesante: solo PyTorch puro, matematica chiara, e addestramento di un modello da 10 milioni di parametri sul tuo laptop in meno di un'ora.
Входной текст
│
▼
┌─────────────────┐
│ Tokenizer │ "hello" → [20, 43, 50, 50, 53]
└────────┬────────┘
▼
┌─────────────────┐
│ Token Embed + │ Векторы токенов + позиция
│ Position Embed │ (размерность n_embd)
└────────┬────────┘
▼
┌─────────────────┐
│ Transformer │ × n_layer слоев
│ Block: │
│ ┌────────────┐ │
│ │ LayerNorm │ │
│ │ Self-Attn │ │ n_head параллельных голов внимания
│ │ + Residual │ │
│ ├────────────┤ │
│ │ LayerNorm │ │
│ │ MLP (FFN) │ │ расширение 4x, GELU, проекция назад
│ │ + Residual │ │
│ └────────────┘ │
└────────┬────────┘
▼
┌─────────────────┐
│ LayerNorm │
│ Linear → logits│ вероятности следующего символа
└─────────────────┘
Da Dove Tutto È Iniziato
Molti hanno sentito parlare del progetto nanoGPT di Andrej Karpathy. Karpathy ha dimostrato che un'architettura GPT-2 completa con 124 milioni di parametri può stare in appena un paio di centinaia di righe di codice. Tuttavia, riprodurre il GPT-2 originale richiede ancora una discreta quantità di calcolo e tempo.
L'autore di llm-from-scratch è andato oltre. Ha rimosso tutte le ottimizzazioni di cluster non necessarie e ha adattato il codice in modo che possa essere scritto a mano in una sola serata. Il modello finale si addestra su Apple Silicon (MPS), GPU Nvidia tramite CUDA, o persino su una semplice CPU. Se non hai hardware locale, tutto funziona su Google Colab gratuito.
Cosa Contiene il Workshop
Il materiale è suddiviso in moduli passo-passo nella cartella docs/. Crei sequenzialmente tre file funzionanti: model.py, train.py e generate.py.
1. Tokenizzazione a Livello di Carattere
Quando si lavora con corpora di testo massicci, la soluzione standard è l'algoritmo BPE (Byte Pair Encoding) con un vocabolario di 50.000 token. Ma se stai addestrando una piccola rete su un dataset di 1 megabyte, BPE romperà il tuo addestramento. La maggior parte delle coppie di token apparirà solo un paio di volte in tutto il testo, e i pesi semplicemente non convergeranno per esse.
Ecco perché l'autore usa un tokenizer a livello di carattere per l'addestramento sui drammi di Shakespeare. L'alfabeto è composto da soli 65 caratteri unici. Questo vocabolario è compatto, si codifica rapidamente e dà a un piccolo modello la possibilità di catturare la grammatica e la struttura del dialogo.
2. Costruire il Transformer
Qui assembli manualmente l'architettura del decoder GPT:
- Tabelle di embedding per caratteri e posizioni nel testo.
- Blocco Multi-Head Self-Attention, dove il vettore di ogni carattere interagisce con il contesto attraverso query, chiavi e valori (Q, K, V).
- Meccanismo di maschera causale che impedisce al modello di sbirciare i token futuri durante la generazione.
- Livelli completamente connessi (MLP) con attivazione GELU e normalizzazione LayerNorm.
L'architettura viene assemblata senza magia da framework di terze parti. Puoi vedere chiaramente dove fluisce ogni tensore e in quale fase vengono aggiunte le connessioni residue.
3. Ciclo di Addestramento
Nella terza fase, scrivi la pipeline di addestramento. Include:
- Calcolo della perdita di entropia incrociata tra i logit predetti ei caratteri successivi effettivi.
- Ottimizzatore AdamW con regolazione del weight decay.
- Gradient clipping per evitare esplosioni dei pesi durante l'addestramento.
- Scheduler del learning rate con warmup e decadimento cosinusoidale.
4. Generazione del Testo e Campionamento
Il modello finito deve essere fatto parlare. Implementi un ciclo autoregressivo: prendi un seed di testo, lo passi attraverso il transformer, estrai la distribuzione di probabilità per il token successivo e lo selezioni usando la temperatura con ricerca greedy o campionamento top-k.
Configurazioni per Esperimenti
Il repository offre tre profili di modello. Puoi scegliere in base a quanto tempo libero hai.
| Profilo | Parametri | Livelli (n_ layer) | Teste (n_head) | Dimensione (n_embd) | Tempo di Addestramento (M3 Pro) | |---|---|---|---|---|---| | Tiny | ~0,5M | 2 | 2 | 128 | ~5 minuti | | Small | ~4M | 4 | 4 | 256 | ~20 minuti | | Medium | ~10M | 6 | 6 | 384 | ~45 minuti |
Tutti i profili funzionano con una lunghezza di contesto di 256 caratteri. Il profilo Tiny è ottimo per il debug rapido quando devi verificare che il codice funzioni senza errori shape mismatch. Il profilo Medium produce già prosa shakespeariana abbastanza leggibile con divisioni del dialogo tra i personaggi.
Come Eseguire il Progetto
Per la gestione dell'ambiente, l'autore consiglia il gestore di pacchetti veloce uv.
Installazione delle dipendenze e creazione di una cartella di lavoro:
# Установка uv (если еще не установлен)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Клонируем репозиторий и синхронизируем окружение
git clone https://github.com/angelos-p/llm-from-scratch
cd llm-from-scratch
uv sync
mkdir scratchpad && cd scratchpad
Se preferisci Google Colab, installare un set minimale di librerie è sufficiente:
!pip install torch numpy tqdm tiktoken
Poi prendi il file data/shakespeare.txt, apri la prima guida docs/01-tokenization.md e inizia a scrivere codice passo dopo passo.
A Chi È Destinato Questo Workshop
Il progetto piacerà a chi è stanco di articoli astratti con grafici dell'attenzione e vuole vedere codice reale. Non è richiesta una conoscenza approfondita del machine learning per completarlo. Basta sentirsi a proprio agio con la lettura della sintassi Python e la comprensione delle operazioni base sugli array.
Dopo aver completato tutte e sei le guide, ti libererai della sensazione di magia attorno ai LLM. Capirai in pratica perché i modelli hanno bisogno del warmup del learning rate, come la temperatura influenza la casualità delle risposte, e perché i piccoli modelli sono così sensibili alla dimensione del vocabolario. È un ottimo modo per trascorrere un weekend in modo produttivo per le tue conoscenze di ingegneria.
Progetti correlati