Distributed Training
L'addestramento distribuito suddivide l'addestramento di un modello tra numerose GPU o macchine tramite parallelismo dei dati, sharding, dei tensori o della pipeline. Panoramica di DDP, FSDP e scalabilità.
L'addestramento distribuito ripartisce il lavoro necessario per addestrare un modello tra più processori, di solito GPU o TPU all'interno di una macchina oppure in un cluster cloud o on-premise, così da ridurre i tempi di addestramento o rendere possibile l'addestramento di un modello troppo grande per la memoria di un singolo dispositivo. I dispositivi si scambiano gradienti, attivazioni o partizioni dei parametri tramite interconnessioni veloci e librerie di comunicazione come NVIDIA NCCL. È il metodo usato per addestrare i moderni modelli fondazionali e i modelli linguistici di grandi dimensioni; inoltre, accelera l'addestramento quotidiano dei modelli di rilevamento degli oggetti sulle workstation multi-GPU.
Come funziona l'addestramento distribuito#
Il parallelismo dei dati è la strategia più comune. Ogni GPU contiene una replica completa del modello, elabora la propria porzione di ogni batch di dati di addestramento e partecipa a un'operazione all-reduce che calcola la media dei gradienti, così che ogni replica applichi lo stesso aggiornamento di discesa del gradiente. DistributedDataParallel (DDP) di PyTorch sovrappone la comunicazione al passaggio all'indietro. La dimensione del batch globale è il batch per GPU moltiplicato per il numero di GPU, quindi di solito anche il tasso di apprendimento deve essere scalato di conseguenza: Goyal et al. hanno addestrato ResNet-50 su ImageNet in un'ora usando 256 GPU e un batch di 8,192 immagini, applicando una regola di scalatura lineare e una fase di warmup, con un'efficienza di scalatura di circa il 90% da 8 a 256 GPU.
Il parallelismo dei dati con suddivisione in partizioni riduce il costo in memoria di queste repliche. ZeRO e Fully Sharded Data Parallel (FSDP) di PyTorch suddividono parametri, gradienti e stati dell'ottimizzatore tra le GPU e raccolgono tutti i pesi di un livello solo mentre quel livello esegue i calcoli; così, la memoria richiesta a ogni GPU diminuisce man mano che se ne aggiungono altre.
Il parallelismo del modello suddivide la rete neurale stessa. Il parallelismo dei tensori distribuisce le singole moltiplicazioni di matrici tra le GPU, il parallelismo della pipeline assegna livelli consecutivi a GPU diverse e vi trasmette micro-batch, il parallelismo del contesto suddivide le sequenze lunghe e il parallelismo degli esperti colloca gli esperti di un modello a miscela di esperti su GPU diverse. Framework come Megatron-LM combinano queste tecniche con il parallelismo dei dati per addestrare modelli con centinaia di miliardi di parametri.
L'addestramento multi-GPU nella pratica#
La comunicazione è il principale sovraccarico: il traffico all-reduce cresce con le dimensioni del modello, quindi le GPU collegate tramite NVLink all'interno di un nodo scalano meglio dei nodi connessi tramite reti più lente. Le statistiche di normalizzazione dei batch vengono calcolate per GPU, a meno che i livelli non vengano convertiti in normalizzazione dei batch sincronizzata; questo è importante quando la porzione di batch assegnata a ogni GPU è piccola. Ultralytics YOLO26 esegue l'addestramento multi-GPU tramite DDP: passando diversi ID di dispositivo avvia un processo per GPU con torch.distributed.run, usando il backend NCCL su CUDA, e suddivide uniformemente il valore batch tra le GPU.
from ultralytics import YOLO
# Carica un modello YOLO26 preaddestrato
model = YOLO("yolo26n.pt")
# Esegui l'addestramento sulle GPU 0 e 1 con DDP; batch=32 assegna 16 immagini a ogni GPU per passaggio
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, batch=32, device=[0, 1])Applicazioni nel mondo reale#
- Modelli linguistici di grandi dimensioni: Meta ha addestrato Llama 3 405B su un massimo di 16K GPU H100, combinando il parallelismo dei tensori, della pipeline, del contesto e dei dati in quello che gli autori chiamano parallelismo 4D.
- Veicoli autonomi: I team che si occupano di percezione addestrano modelli di rilevamento e segmentazione su grandi archivi di registrazioni di videocamere, lidar e radar provenienti dalle flotte di veicoli, un'attività praticabile solo su grandi cluster di GPU.
- Analisi di immagini mediche: I volumi TC e RM 3D ad alta risoluzione mettono a dura prova la memoria di una singola GPU; distribuire batch o partizioni del modello tra più GPU consente di addestrare volumi e modelli più grandi.
L'addestramento distribuito a confronto con i concetti correlati#
- Apprendimento federato: Anche l'apprendimento federato addestra modelli su molti dispositivi, ma per tutelare la privacy i dati rimangono su telefoni, negli ospedali o presso altri client, mentre solo gli aggiornamenti del modello vengono inviati a un server centrale. L'addestramento distribuito raccoglie i dati in un unico cluster per massimizzare la velocità.
- Apprendimento suddiviso: L'apprendimento suddiviso ripartisce un modello tra un client e un server, così che i dati grezzi non lascino mai il client, con un compromesso tra maggiore comunicazione e privacy.
- Accumulo dei gradienti: L'accumulo dei gradienti somma i gradienti di più batch piccoli prima di un aggiornamento, riproducendo su una singola GPU i calcoli di un batch grande a costo di più tempo; il parallelismo dei dati, invece, elabora questi batch simultaneamente su più GPU.










