Pipeline Parallelism
Scopri come il parallelismo delle pipeline suddivide i modelli di deep learning tra le GPU. Impara a prevenire gli errori di memoria esaurita e a ottimizzare il training distribuito.
Il parallelismo delle pipeline è una tecnica avanzata di addestramento distribuito progettata per suddividere una grande rete neurale (NN) tra più dispositivi di calcolo, come le GPU, separando il modello in base alla profondità. Quando i pesi del modello e gli stati dell'ottimizzatore di un'architettura moderna superano i limiti di memoria di un singolo acceleratore, gli ingegneri suddividono i layer sequenziali della rete in "stadi". Ad esempio, i primi 10 layer possono risiedere sulla GPU 0, mentre i 10 layer successivi risiedono sulla GPU 1. Durante il passaggio in avanti, i dati fluiscono da un dispositivo all'altro. Collegando questi dispositivi in sequenza, i ricercatori possono addestrare algoritmi di apprendimento profondo (DL) di enormi dimensioni senza incorrere in errori di memoria esaurita dovuti ai limiti dell'hardware.
Come funziona il parallelismo delle pipeline#
Un'implementazione ingenua della suddivisione dei layer tra i dispositivi porta a gravi inefficienze note come "bolle della pipeline". Poiché i layer vengono elaborati in sequenza, la GPU 1 rimane completamente inattiva mentre la GPU 0 elabora i layer iniziali. Per massimizzare l'utilizzo dell'hardware, gli scheduler moderni delle pipeline suddividono la dimensione globale del batch in unità più piccole chiamate "micro-batch".
Invece di attendere il completamento di un intero batch, la GPU 0 inizia immediatamente a elaborare il secondo micro-batch non appena passa il primo micro-batch alla GPU 1. Strumenti come Microsoft DeepSpeed e la PyTorch Distributed Pipelining API usano comunemente la strategia di scheduling 1F1B (Un passaggio in avanti, uno all'indietro). Questo metodo alterna il calcolo dei passaggi in avanti e all'indietro per micro-batch diversi in modo concorrente, riducendo significativamente le bolle della pipeline e il consumo di memoria. I recenti progressi del 2024 e del 2025 introducono persino il parallelismo delle pipeline a bolle zero, una strategia di predizione dei pesi consapevole dell'ottimizzatore che elimina quasi completamente i tempi di inattività nei cluster di calcolo.
Distinzione tra tecniche di parallelismo correlate#
Il parallelismo delle pipeline opera all'interno di un ecosistema più ampio di strategie di calcolo distribuito. Comprendere le differenze è fondamentale per scalare efficacemente i modelli di AI:
- Parallelismo del modello: è il termine generale per indicare la suddivisione di un modello tra più dispositivi. Il parallelismo delle pipeline è una forma altamente specifica di parallelismo del modello che suddivide l'architettura sequenzialmente in base alla profondità.
- Parallelismo dei tensori: a differenza della suddivisione in base alla profondità del parallelismo delle pipeline, il parallelismo dei tensori suddivide orizzontalmente le singole operazioni matriciali tra le GPU. Queste due tecniche vengono spesso combinate per massimizzare il throughput.
- Parallelismo dei dati: il parallelismo dei dati replica l'intero modello su ogni GPU e distribuisce i dati di addestramento tra di esse. Per architetture compatte e altamente ottimizzate di rilevamento degli oggetti e segmentazione delle immagini, come il modello Ultralytics YOLO26, che si adatta nativamente alla VRAM di un singolo dispositivo, il parallelismo dei dati tramite DistributedDataParallel (DDP) di PyTorch è il metodo preferito per accelerare l'addestramento.
Applicazioni reali nell'IA e nel ML#
Aumentare la scala di infrastrutture complesse è essenziale per sviluppare moderni sistemi di AI all'avanguardia:
- Addestramento di modelli fondazionali: lo sviluppo di giganteschi modelli linguistici di grandi dimensioni (LLMs) e modelli fondazionali come Llama 3 di Meta richiede la combinazione del parallelismo dei tensori, dei dati e delle pipeline. Framework come NVIDIA Megatron-LM sfruttano queste strategie per addestrare enormi architetture miscela di esperti (MoE) su migliaia di GPU in piattaforme cloud come AWS SageMaker.
- Diagnostica medica ad alta risoluzione: nell'AI in ambito sanitario e nella modellazione scientifica, le scansioni volumetriche 3D producono spesso attivazioni troppo grandi per un singolo acceleratore. La suddivisione in pipeline dei layer della rete tra diversi nodi consente agli ospedali di ricerca di addestrare reti profonde su enormi dataset di MRI senza compromettere la risoluzione delle immagini.
Esempio di codice: concetto di suddivisione dei layer#
Storicamente, distribuire i layer tra i dispositivi richiedeva codice complesso e personalizzato. Oggi, la logica fondamentale associa layer specifici a diversi identificativi dei dispositivi. Di seguito è riportata una rappresentazione concettuale di come gli stadi della rete vengono suddivisi tra i dispositivi in PyTorch, gettando le basi per le operazioni di parallelismo delle pipeline:
import torch.nn as nn
class SimplePipelineModel(nn.Module):
def __init__(self):
super().__init__()
# Stage 1 is assigned to the first GPU
self.stage1 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:0")
# Stage 2 is assigned to the second GPU
self.stage2 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:1")
def forward(self, x):
# The forward pass seamlessly crosses device boundaries
x_out = self.stage1(x.to("cuda:0"))
return self.stage2(x_out.to("cuda:1"))Sebbene la creazione di modelli fondazionali richieda un'orchestrazione complessa, l'implementazione di progetti rapidi e scalabili di visione artificiale (CV) è generalmente più semplice. Per una distribuzione dei modelli semplificata e l'utilizzo automatizzato di più GPU, gli sviluppatori si affidano alla Ultralytics Platform per scalare automaticamente i carichi di lavoro. Sfruttando solidi consigli per l'addestramento dei modelli, la piattaforma astrae la gestione dell'infrastruttura, consentendo agli ingegneri di concentrarsi interamente sulla creazione di soluzioni di AI accurate, capaci di eseguire inferenza in tempo reale.









