Vai al contenuto principale

Come addestrare un LLM con PyTorch

Impara a gestire il processo di addestramento dei large language model con PyTorch, dalla configurazione iniziale all’implementazione finale.
Aggiornato 29 set 2026  · 8 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

I Large Language Model (LLM) sono componenti fondamentali delle moderne applicazioni di intelligenza artificiale, soprattutto per l’elaborazione del linguaggio naturale. Hanno il potenziale per elaborare e comprendere in modo efficiente il linguaggio umano, con applicazioni che vanno dagli assistenti virtuali e la traduzione automatica al riassunto di testi e alle domande e risposte.

Librerie come LangChain facilitano l’implementazione di applicazioni IA end-to-end come quelle citate sopra. Il nostro tutorial Introduzione a LangChain per Data Engineering & Data Applications offre una panoramica su ciò che puoi fare con LangChain, inclusi i problemi che LangChain risolve, con esempi di casi d’uso sui dati.

Questo articolo spiega l’intero processo di addestramento di un large language model, dalla configurazione dell’ambiente all’implementazione finale, usando Pytorch 2.0.1, un framework di deep learning dinamico e flessibile che consente un’implementazione del modello semplice e chiara.

Prerequisiti

Per trarre il massimo da questo contenuto, è importante avere dimestichezza con la programmazione in Python, una comprensione di base dei concetti di deep learning e dei transformer, e familiarità con il framework Pytorch. Il codice sorgente completo sarà disponibile su GitHub.

Prima di passare all’implementazione principale, dobbiamo installare e importare le librerie rilevanti. Inoltre, è importante notare che lo script di addestramento è ispirato a questo repository di Hugging Face.

Installazione delle librerie

Il processo di installazione è descritto di seguito:

Per prima cosa, usiamo l’istruzione %%bash per eseguire i comandi di installazione in un’unica cella come comando bash in Jupyter Notebook.

  • Trl: usata per addestrare modelli linguistici transformer con reinforcement learning.
  • Peft utilizza metodi di fine-tuning efficienti in termini di parametri (PEFT) per abilitare un’adattabilità efficiente del modello pre-addestrato.
  • Torch: una libreria open source per il machine learning ampiamente utilizzata.
  • Datasets: usata per facilitare il download e il caricamento di molti dataset di machine learning comuni.

Transformers: una libreria sviluppata da Hugging Face che include migliaia di modelli pre-addestrati per una varietà di attività testuali come classificazione, riepilogo e traduzione.

%%bash
pip -q install trl
pip -q install peft
pip -q install torch
pip -q install datasets
pip -q install transformers

Ora, questi moduli possono essere importati come segue:

import torch
from trl import SFTTrainer
from datasets import load_dataset
from peft import LoraConfig, get_peft_model, prepare_model_for_int8_training
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments

Caricamento e preparazione dei dati

Per questa illustrazione useremo il dataset alpaca, liberamente disponibile su Hugging Face. Il dataset ha tre colonne principali: instruction, input e output. Queste colonne sono combinate per generare una colonna di testo finale.

L’istruzione per caricare il dataset è riportata di seguito fornendo il nome del dataset di interesse, ovvero tatsu-lab/alpaca:

train_dataset = load_dataset("tatsu-lab/alpaca", split="train")
print(train_dataset)

Possiamo vedere che i dati risultanti sono in un dizionario con due chiavi:

  • Features: contiene le colonne principali dei dati
  • Num_rows: corrisponde al numero totale di righe nei dati

Struttura di train_dataset

Struttura di train_dataset

Le prime cinque righe possono essere visualizzate con l’istruzione seguente. Prima, converti il dizionario in un dataframe pandas, poi visualizza le righe.

pandas_format = train_dataset.to_pandas()
display(pandas_format.head())

Prime cinque righe di train_dataset

Prime cinque righe di train_dataset

Per una migliore visualizzazione, stampiamo le informazioni sulle prime tre righe; prima però dobbiamo installare la libreria textwrap per impostare a 50 il numero massimo di parole per riga. La prima istruzione di stampa separa ciascun blocco con 15 trattini.

import textwrap
for index in range(3):
   print("---"*15)
   print("Instruction:        
       {}".format(textwrap.fill(pandas_format.iloc[index]["instruction"],    
       width=50)))
   print("Output:  
       {}".format(textwrap.fill(pandas_format.iloc[index]["output"],  
       width=50)))
   print("Text: 
       {}".format(textwrap.fill(pandas_format.iloc[index]["text"],  
       width=50)))

Dettagli delle prime tre righe

Dettagli delle prime tre righe

Addestramento del modello

Prima di procedere con l’addestramento del modello, dobbiamo impostare alcuni prerequisiti:

  • Modello pre-addestrato: useremo il modello pre-addestrato Salesforce/xgen-7b-8k-base, disponibile su Hugging Face. Salesforce ha addestrato questa serie di LLM da 7B chiamati XGen-7B con attenzione densa standard su sequenze fino a 8K per fino a 1,5T token.
  • Tokenizer: serve per i compiti di tokenizzazione sui dati di addestramento. Il codice per caricare il modello pre-addestrato e il tokenizer è il seguente:
pretrained_model_name = "Salesforce/xgen-7b-8k-base"
model = AutoModelForCausalLM.from_pretrained(pretrained_model_name, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name, trust_remote_code=True)

Configurazione dell’addestramento

L’addestramento richiede alcuni argomenti e configurazioni; di seguito sono definiti i due oggetti di configurazione importanti: un’istanza di TrainingArguments, un’istanza del modello LoraConfig e infine il modello SFTTrainer.

TrainingArguments

Serve a definire i parametri per l’addestramento del modello.

In questo scenario specifico, iniziamo definendo la destinazione in cui verrà memorizzato il modello addestrato usando l’attributo output_dir, prima di definire ulteriori iperparametri come il metodo di ottimizzazione, il learning rate, il numero di epoche e altro.

model_training_args = TrainingArguments(
       output_dir="xgen-7b-8k-base-fine-tuned",
       per_device_train_batch_size=4,
       optim="adamw_torch",
       logging_steps=80,
       learning_rate=2e-4,
       warmup_ratio=0.1,
       lr_scheduler_type="linear",
       num_train_epochs=1,
       save_strategy="epoch"
   )

LoRAConfig

Gli argomenti principali usati in questo scenario sono il rango della matrice di trasformazione a bassa dimensione in LoRA, impostato a 16. Poi, il fattore di scalatura per i parametri aggiuntivi in LoRA è impostato a 32.

Inoltre, il rapporto di dropout è 0,05, il che significa che il 5% delle unità di input verrà ignorato durante l’addestramento. Infine, poiché ci occupiamo di causal language modeling, il task viene inizializzato con l’attributo CAUSAL_LM.

SFTTrainer

Serve ad addestrare il modello usando i dati di training, il tokenizer e informazioni aggiuntive come i modelli sopra.

Poiché stiamo usando il campo text dei dati di training, è importante dare un’occhiata alla distribuzione per aiutare a impostare il numero massimo di token in una data sequenza.

import matplotlib.pyplot as plt


pandas_format['text_length'] = pandas_format['text'].apply(len)


plt.figure(figsize=(10,6))
plt.hist(pandas_format['text_length'], bins=50, alpha=0.5, color='g')
plt.title('Distribution of Length of Text')
plt.xlabel('Length of Text')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()

Distribuzione della lunghezza della colonna text

Distribuzione della lunghezza della colonna text

In base all’osservazione sopra, possiamo vedere che la maggior parte dei testi ha una lunghezza compresa tra 0 e 1000. Inoltre, come mostrato sotto, solo il 4,5% dei documenti testuali ha una lunghezza superiore a 1024.

mask = pandas_format['text_length'] > 1024
percentage = (mask.sum() / pandas_format['text_length'].count()) * 100


print(f"The percentage of text documents with a length greater than 1024 is: {percentage}%")

image6.png

Quindi impostiamo a 1024 il numero massimo di token nella sequenza, in modo che qualsiasi testo più lungo venga troncato.

SFT_trainer = SFTTrainer(
       model=model,
       train_dataset=train_dataset,
       dataset_text_field="text",
       max_seq_length=1024,
       tokenizer=tokenizer,
       args=model_training_args,
       packing=True,
       peft_config=lora_peft_config,
   )

Esecuzione dell’addestramento

Con tutti i prerequisiti a posto, ora possiamo eseguire il processo di addestramento del modello come segue:

tokenizer.pad_token = tokenizer.eos_token
model.resize_token_embeddings(len(tokenizer))
model = prepare_model_for_int8_training(model)
model = get_peft_model(model, lora_peft_config)
training_args = model_training_args
trainer = SFT_trainer
trainer.train()

È importante sottolineare che questo addestramento viene eseguito in un ambiente cloud con GPU, il che rende l’intero processo più veloce. Tuttavia, l’addestramento su un computer locale richiederebbe più tempo per essere completato.

Il nostro blog, Pro e contro dell’uso degli LLM nel cloud rispetto all’esecuzione in locale, fornisce considerazioni chiave per scegliere la strategia di distribuzione ottimale per gli LLM

Vediamo cosa succede nello snippet di codice sopra:

  • tokenizer.pad_token = tokenizer.eos_token: imposta il token di padding uguale al token di fine frase.
  • model.resize_token_embeddings(len(tokenizer)): ridimensiona il layer di embedding dei token del modello per farlo corrispondere alla lunghezza del vocabolario del tokenizer.
  • model = prepare_model_for_int8_training(model): prepara il modello all’addestramento con precisione INT8, probabilmente effettuando una quantizzazione.
  • model = get_peft_model(model, lora_peft_config): adatta il modello dato in base alla configurazione PEFT.
  • training_args = model_training_args: assegna gli argomenti di addestramento predefiniti a training_args.
  • trainer = SFT_trainer: assegna l’istanza di SFTTrainer alla variabile trainer.
  • trainer.train(): avvia il processo di addestramento del modello secondo le specifiche fornite.

Conclusione

Questo articolo ha fornito una guida chiara su come addestrare un large language model con PyTorch. A partire dalla preparazione del dataset, ha illustrato i passaggi per predisporre i prerequisiti, configurare il trainer e, infine, eseguire il processo di addestramento.

Sebbene abbia utilizzato uno specifico dataset e un modello pre-addestrato, il processo dovrebbe essere in gran parte lo stesso per qualsiasi altra opzione compatibile. Ora che sai come addestrare un LLM, puoi sfruttare queste conoscenze per addestrare altri modelli sofisticati per vari task di NLP.

Dai un’occhiata alla nostra guida su come creare applicazioni LLM con LangChain per esplorare ulteriormente la potenza dei large language model. Oppure, se devi ancora approfondire i concetti dei large language model, consulta il nostro corso per proseguire nell’apprendimento.


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

Un data scientist poliedrico che ama condividere le proprie conoscenze e restituire valore agli altri, Zoumana è un content creator su YouTube e un top writer tech su Medium. Trova soddisfazione nel parlare in pubblico, programmare e insegnare. Zoumana ha due lauree magistrali: la prima in informatica con specializzazione in Machine Learning conseguita a Parigi, Francia, e la seconda in Data Science alla Texas Tech University negli Stati Uniti. Ha iniziato la sua carriera come Software Developer presso Groupe OPEN in Francia, per poi passare a IBM come Machine Learning Consultant, dove ha sviluppato soluzioni di IA end-to-end per compagnie assicurative. Successivamente, è entrato in Axionable, la prima startup di Sustainable AI con sede a Parigi e Montréal. Lì ha lavorato come Data Scientist e ha implementato prodotti di IA, principalmente casi d’uso di NLP, per clienti in Francia, Montréal, Singapore e Svizzera. Inoltre, ha dedicato il 5% del suo tempo ad attività di Ricerca e Sviluppo. Attualmente lavora come Senior Data Scientist presso IFC - World Bank Group.

Argomenti
Intelligenza artificiale
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro