Elenco ragionato di tutti i file rilevanti del progetto: cosa sono, da cosa derivano e come si usano.
I file .pt
sono dizionari PyTorch che contengono i pesi del modello, la configurazione architetturale, lo stato dell'ottimizzatore e la val loss al momento del salvataggio.
Sono leggibili solo da train.py — per l'inferenza con llama.cpp servono i file GGUF.
checkpoints/best.pt viene sovrascritto da ogni run attivo. Non usarlo come backup permanente. I file con nome esplicito del run (run4_best.pt, run6_shard_*.pt) sono permanenti e non vengono mai toccati dal training.
python3 train.py --resume — carica automaticamente questo file. Non usare per archiviazione.python3 train.py --resume dopo cp checkpoints/run4_best.pt checkpoints/best.ptbest.pt sul server Vast.ai, sincronizzato in locale ogni 5 minuti dal watcher automatico durante Run #6. Rappresenta il miglior punto raggiunto dall'addestramento in corso. Si aggiorna più volte per shard.slm-run6-latest.gguf) per non sovrascrivere i file Run #4..pt come byte serializzati. Richiesto esplicitamente da convert_to_gguf.py e da llama.cpp per l'inferenza.I file GGUF sono il formato nativo di llama.cpp. Contengono i pesi in un formato ottimizzato per CPU/GPU, con metadati architetturali e vocabolario incorporati. Una volta generati non dipendono più da Python o PyTorch.
slm-run4.gguf, slm-run4-q8_0.gguf) sono il riferimento pubblico pubblicato su HuggingFace e devono restare intatti.
convert_to_gguf.py. Errore: unordered_map::at: key not found al momento del prompt. Il converter va aggiornato prima di usare llama.cpp per l'inferenza. In alternativa, usare PyTorch direttamente (vedi sezione Comandi).
run4_best.pt. Pubblicato su HuggingFace (c1cc10/slm-italiano). Architettura mappata su GPT-NeoX per compatibilità con llama.cpp.llama-cli -m slm-run4.gguf -p "Il Parlamento europeo" -n 100slm-run4.gguf. Qualità praticamente identica all'fp16 a un terzo del peso. Formato consigliato per test di inferenza su Mac (MPS o CPU).llama-cli -m slm-run4-q8_0.gguf -p "Il Parlamento europeo" -n 100run6_shard_aa.pt il 2026-10-05. Val loss 3.5568 — primo shard del training sequenziale Chinchilla. Architettura GPT-NeoX, 147 tensor scritti.python3 /tmp/gen.py "prompt" 150 1.1 50 1.3 — llama.cpp b11146 ha un'incompatibilità API con questo formato (da correggere).slm-run6-shard-aa.gguf. Generata con llama-quantize in 447ms. Stessa limitazione llama.cpp b11146.checkpoints/best.pt a fine Run #6.--resume, --reset-best e generazione periodica. Punto di ingresso unico per tutti i run.python3 train.py --help per le opzioni. Flag chiave: --resume --reset-best per training sequenziale multi-shard.--resume --reset-best, salvataggio checkpoint intermedio per shard. Attualmente in esecuzione sul server remoto.tmux new-session -d -s run6 'bash run6_sequential.sh'
I file .bpe-spm.v16000.tokens.pt sono shard del corpus già tokenizzati e salvati come tensori PyTorch int16. Vengono caricati da train.py all'avvio evitando la tokenizzazione (operazione lenta). Ogni shard copre circa 289-297 milioni di token.
train.py --data data/shards/shard_aa.txt se il file .pt corrispondente è presente e ha timestamp non più recente del tokenizer.train.py confronta il timestamp del .txt con quello del .pt per decidere se la cache è valida..pt SLM in formato GGUF (architettura GPT-NeoX), compatibile con llama.cpp. Gestisce il mapping dei pesi, la configurazione RoPE, il vocabolario SentencePiece. Produce un file fp16.python3 tools/convert_to_gguf.py --checkpoint checkpoints/run6_shard_aa.pt --tokenizer checkpoints/tokenizer.model --output slm-run6-shard-aa.ggufllama-quantize. Q8_0 riduce il peso a ~27% dell'fp16 con perdita di qualità trascurabile per questo modello.python3 tools/quantize_q8.py slm-run6-shard-aa.gguf — produce slm-run6-shard-aa-q8_0.gguf.pt e calcola la PPL su qualunque testo passato via stdin o argomento. Utile per confrontare la qualità tra run senza riaddestrare.echo "Il governo italiano" | python3 tools/eval_ppl.pypython3 tools/epub_to_text.py libro.epub --out data/corpus_letterario.txt --appendpython3 tools/fetch_hf_corpus.py --dataset uonlp/CulturaX --lang it --limit-gb 10Ogni run e ogni shard produce file con nome che non può collidere con run precedenti. La struttura è:
| Tipo | Pattern | Esempio |
|---|---|---|
| Checkpoint shard | run{N}_shard_{XX}.pt | run6_shard_ab.pt |
| Checkpoint run (best) | run{N}_best.pt | run6_best.pt |
| Snapshot live | run{N}_best_latest.pt | run6_best_latest.pt |
| GGUF fp16 shard | slm-run{N}-shard-{XX}.gguf | slm-run6-shard-aa.gguf |
| GGUF Q8 shard | slm-run{N}-shard-{XX}-q8_0.gguf | slm-run6-shard-aa-q8_0.gguf |
| GGUF fp16 finale | slm-run{N}.gguf | slm-run6.gguf |
| GGUF Q8 finale | slm-run{N}-q8_0.gguf | slm-run6-q8_0.gguf |
slm-run{N}-latest.gguf non va usato come nome permanente: il suffisso latest è riservato agli snapshot intermedi e verrebbe sovrascritto. Usarlo solo per test locali.
Conversione GGUF da shard aa (Run #6 intermedio)
Quantizzazione Q8_0
Inferenza con llama.cpp (interattiva)
Inferenza con llama.cpp (prompt da stdin)
Download checkpoint da Vast.ai (manuale)