DeepSeek-V3 : come implementare il DeepSeek Trainer da zero

PyImageSearch pubblica l’ultima parte di una serie dedicata alla costruzione di DeepSeek-V3 « from scratch », incentrata questa volta sull’addestramento del modello e sulla generazione di testo. Redatto da Puneet Mangla, il tutorial dettaglia il ciclo di addestramento, gli iperparametri e i dati utilizzati per un modello di piccole dimensioni.

  • PyImageSearch pubblica la sesta e ultima parte della serie sulla costruzione di DeepSeek-V3.
  • L’autore usa l’API Trainer di Hugging Face, con accumulo di gradienti, warmup e precisione mista FP16.
  • Il modello si addestra su 9.000 esempi di TinyStories, mentre 1.000 servono per la valutazione.
  • Il tutorial avverte che questo piccolo modello non eguaglierà i grandi modelli pre-addestrati e potrebbe ripetersi o perdere coerenza.

Questa sesta parte conclude una serie che ha affrontato, passo dopo passo, la configurazione e i Rotary Position Embeddings (RoPE), la Multi-head Latent Attention (MLA), il Mixture of Experts (MoE), la Multi-Token Prediction (MTP), e poi l’assemblaggio dell’architettura in PyTorch. Il tutorial presenta il « trainer », il componente che fa funzionare l’architettura confrontandola con i dati.

Un addestramento basato su Hugging Face

Addestrare un modello di tipo trasformatore implica coordinare il caricamento dei dati, l’ottimizzazione, la gestione dei punti di salvataggio e la valutazione. L’autore si basa per questo sull’API Trainer di Hugging Face, con le versioni transformers==4.57.3, datasets==4.8.5 e accelerate==1.15.0. Il modello restituendo una coppia (logits, loss), un metodo compute_loss personalizzato adatta il suo output al formato atteso dal Trainer.

Diverse tecniche vengono implementate. L’accumulo di gradienti simula grandi batch quando la memoria della GPU è limitata: con un batch di 4 esempi e 4 passi di accumulo, la dimensione effettiva raggiunge 16 su un singolo dispositivo. Il tasso di apprendimento segue una fase di riscaldamento progressivo (warmup), seguita da un decadimento lineare. Infine, l’addestramento in precisione mista (FP16) può accelerare il calcolo, sebbene il guadagno dipenda dall’hardware e dal carico di lavoro.

Dati e configurazione

Il modello viene addestrato su TinyStories, un dataset di storie semplici per bambini, progettato per un vocabolario e una grammatica adatti ai piccoli modelli linguistici. L’autore ne utilizza solo i primi 10.000 esempi, suddivisi senza mescolamento in 9.000 per l’addestramento e 1.000 per la valutazione. Questo secondo insieme proviene quindi dal sottoinsieme scelto, e non dalla validazione ufficiale del dataset.

Il testo viene tokenizzato con il tokenizer GPT-2, che utilizza la codifica a coppie di byte (BPE). Le posizioni di riempimento sono escluse dal calcolo della perdita grazie al valore -100. La configurazione fissa un tasso di apprendimento di 5e-4, 10 passi di warmup, una regolarizzazione di 0,01 e 2 epoche di addestramento. Dei punti di salvataggio vengono creati ogni 50 passi, tre vengono conservati, e il modello finale scelto è quello che presenta la minore perdita di validazione.

Per testare la generazione, l’autore utilizza una temperatura di 0,8 e un campionamento top-k di 50, con 150 nuovi token. La storia presentata come esempio è esplicitamente illustrativa e non proviene da un’esecuzione registrata. Il tutorial precisa che questo piccolo modello non rivaleggerà con i grandi modelli pre-addestrati e che le sue produzioni possono ripetersi, deviare o perdere coerenza. Il tutorial completo e il suo codice sorgente sono disponibili sul sito di PyImageSearch.