L’ex ricercatore di OpenAI, Andrej Karpathy, ha recentemente lanciato llm.c, un progetto finalizzato all’addestramento dei sistemi di Linguaggio del Linguaggio Model (LLM) utilizzando il linguaggio di programmazione C puro, senza le complesse dipendenze di PyTorch e cPython.
Il progetto llm.c, ospitato su GitHub, offre un’implementazione semplice per addestrare modelli come GPT-2 su CPU/fp32 utilizzando solamente circa 1.000 righe di codice.
Karpathy spiega nel suo repository GitHub che ha scelto GPT-2 come primo esempio funzionante perché rappresenta una pietra miliare nell’evoluzione dei LLM, essendo stata la prima volta che lo stack moderno è stato messo insieme.
Uno dei principali vantaggi di llm.c è la sua immediata compilazione ed esecuzione, che si traduce in prestazioni simili all’implementazione di riferimento di PyTorch. Allocando la memoria in un singolo blocco all’inizio dell’addestramento, llm.c mantiene un utilizzo costante della memoria, migliorando l’efficienza durante la gestione dei dati e l’elaborazione batch.
Il cuore di llm.c consiste nell’implementazione manuale dei passaggi avanti e indietro per singoli livelli come layernorm, codificatore, matmul, autoattenzione, gelu, residuo, softmax e perdita di entropia incrociata. Questo approccio meticoloso assicura disposizioni accurate dei puntatori e offset dei tensori, che sono fondamentali per il funzionamento senza intoppi del modello.
Karpathy ha espresso il suo apprezzamento per il linguaggio di programmazione C, definendolo carino, semplice, pulito, portatile e bello esteticamente. Ha aggiunto che, nonostante il suo interesse crescente per Rust, C rimane ancora il suo preferito per la sua semplicità e versatilità.
Il prossimo obiettivo di Karpathy è quello di portare llm.c su CUDA livello per livello, mirando a prestazioni efficienti paragonabili a PyTorch ma senza le pesanti dipendenze. Questa transizione a CUDA consentirà di ridurre la precisione da FP32 a FP16/inferiore e di supportare architetture moderne come Llama 2, Mistral, Gemma e altre.