PyTorch
PyTorch è un framework Python open source per creare e addestrare reti neurali con tensori GPU e autograd. Scopri i concetti fondamentali e il percorso di distribuzione.
PyTorch è un framework open source per creare, addestrare e distribuire reti neurali in Python. Fornisce tensori accelerati tramite GPU, differenziazione automatica e una libreria di livelli, ottimizzatori e funzioni di loss; esegue il codice in modalità eager, riga per riga, così i modelli si scrivono e si sottopongono a debug come normali programmi Python. Creato da Facebook AI Research, oggi Meta AI, dal 2022 PyTorch è gestito dalla PyTorch Foundation, indipendente dai fornitori, sotto l'egida della Linux Foundation; è ampiamente utilizzato nella ricerca sul deep learning e nei modelli di produzione per la visione artificiale e il linguaggio.
Concetti fondamentali#
- Tensori: array multidimensionali, come gli array NumPy, che possono risiedere su una CPU o un acceleratore. PyTorch supporta le GPU NVIDIA tramite CUDA, le GPU AMD tramite ROCm e i chip Apple tramite Metal (MPS); per spostare i dati tra di essi basta una chiamata
.to(device). - Autograd: mentre le operazioni sui tensori vengono eseguite, PyTorch le registra in un grafo computazionale. La chiamata
.backward()percorre il grafo a ritroso e calcola il gradiente dell'output rispetto a ogni tensore che lo richiede: è il passaggio di backpropagation dell'addestramento. - Esecuzione eager: il grafo viene ricostruito a ogni passaggio in avanti, perciò i modelli possono usare cicli, condizioni e istruzioni print di Python; inoltre, gli errori indicano la riga esatta in cui si è verificato il problema.
- Moduli e ottimizzatori:
torch.nnfornisce livelli come convoluzioni, attenzione e normalizzazione;torch.optimfornisce ottimizzatori come SGD e Adam, che aggiornano i pesi usando i gradienti calcolati. - torch.compile: introdotto in PyTorch 2.0, acquisisce il programma eager sotto forma di grafo e genera kernel fusi, spesso accelerando l'addestramento e l'inferenza senza modificare il codice del modello.
L'esempio seguente esegue un piccolo calcolo su una GPU, se disponibile, e lascia che autograd ne calcoli il gradiente:
import torch
# Use a GPU when PyTorch can see one, otherwise fall back to the CPU
device = "cuda" if torch.cuda.is_available() else "cpu"
# Tensors record the operations applied to them when requires_grad=True
w = torch.tensor([2.0, -1.0], device=device, requires_grad=True)
x = torch.tensor([3.0, 4.0], device=device)
# Ordinary Python runs eagerly: each line executes immediately
loss = (w * x).sum() ** 2
# Autograd walks the recorded graph backward to get d(loss)/dw
loss.backward()
print(f"device={device}, loss={loss.item()}, grad={w.grad.tolist()}")Su una macchina senza GPU stampa device=cpu, loss=4.0, grad=[12.0, 16.0]. La loss è (2·3 − 1·4)² = 4 e autograd ne restituisce la derivata 2·(w·x)·x = [12, 16] senza bisogno di calcoli manuali: è lo stesso meccanismo che addestra reti con miliardi di pesi.
PyTorch e altri strumenti#
- TensorFlow: il framework di Google, che prima eseguiva grafi statici e che, fino a TensorFlow 2, non supportava l'esecuzione eager come impostazione predefinita. Rimane comune nei sistemi di produzione basati su Keras e sugli strumenti di distribuzione di Google.
- JAX: la libreria numerica di Google che trasforma funzioni Python pure con operazioni componibili
grad,jitevmap, compilate tramite XLA; è popolare nella ricerca su larga scala con TPU. - OpenCV: una libreria di visione artificiale per leggere, trasformare e analizzare immagini con algoritmi classici. Le pipeline usano spesso OpenCV per caricare e preelaborare i fotogrammi prima che un modello PyTorch li elabori.
- Hugging Face: un hub e un insieme di librerie basati in gran parte su PyTorch; la libreria Transformers fornisce modelli linguistici e visivi preaddestrati sotto forma di moduli PyTorch.
Dalla ricerca alla distribuzione#
Un modello PyTorch addestrato viene salvato come checkpoint, di solito in un file .pt o .pth che contiene i pesi. Può essere eseguito così com'è in un servizio Python, ma i dispositivi edge e i server ottimizzati in genere richiedono che venga convertito in un runtime progettato per il loro hardware:
Ultralytics YOLO26 è scritto in PyTorch: yolo26n.pt è un checkpoint PyTorch, l'addestramento si basa su autograd e sugli ottimizzatori di PyTorch e model.export() converte il modello in questi formati di distribuzione, tra cui ONNX, TensorRT, OpenVINO, Core ML e LiteRT.










