Pipeline Parallelism
Scopri come il pipeline parallelism suddivide i modelli di deep learning tra le GPU. Impara a prevenire gli errori di esaurimento della memoria e a ottimizzare l'addestramento distribuito.
Pipeline Parallelism è una tecnica avanzata di distributed training progettata per partizionare una grande neural network (NN) su molteplici dispositivi di calcolo, come le GPUs, separando il modello in base alla profondità. Quando i model weights e gli stati dell'ottimizzatore di un'architettura moderna superano i limiti di memoria di un singolo acceleratore, gli ingegneri dividono i livelli sequenziali della rete in "stadi". Ad esempio, i primi 10 livelli potrebbero risiedere sulla GPU 0, mentre i successivi 10 livelli risiedono sulla GPU 1. Durante il forward pass, i dati fluiscono da un dispositivo a quello successivo. Collegando questi dispositivi, i ricercatori possono addestrare enormi algoritmi di deep learning (DL) senza riscontrare out-of-memory errors che limitano l'hardware.
Link to this sectionCome funziona la Pipeline Parallelism#
Un'implementazione ingenua della divisione dei livelli tra i dispositivi porta a gravi inefficienze note come "pipeline bubbles". Poiché i livelli vengono elaborati in sequenza, la GPU 1 rimane completamente inattiva mentre la GPU 0 elabora i livelli iniziali. Per massimizzare l'utilizzo dell'hardware, i moderni scheduler di pipeline dividono la batch size globale in "micro-batch" più piccoli.
Invece di attendere il completamento dell'intero batch, la GPU 0 inizia immediatamente a elaborare il secondo micro-batch non appena passa il primo alla GPU 1. Strumenti come Microsoft DeepSpeed e la PyTorch Distributed Pipelining API utilizzano comunemente la 1F1B (One Forward, One Backward) scheduling strategy. Questo metodo alterna l'esecuzione di forward e backward pass per diversi micro-batch simultaneamente, riducendo significativamente le pipeline bubbles e il consumo di memoria. Recenti progressi del 2024 e 2025 introducono persino la Zero Bubble Pipeline Parallelism, una strategia di previsione dei pesi consapevole dell'ottimizzatore che elimina quasi del tutto i tempi di inattività nei cluster di calcolo.
Link to this sectionDistinguere tecniche di parallelismo correlate#
La pipeline parallelism opera all'interno di un ecosistema più ampio di strategie di calcolo distribuito. Comprendere le differenze è fondamentale per scalare efficacemente i modelli AI:
- Model Parallelism: Questo è il termine generale per dividere un modello tra più dispositivi. La pipeline parallelism è una forma molto specifica di model parallelism che partiziona l'architettura sequenzialmente per profondità.
- Tensor Parallelism: A differenza delle divisioni basate sulla profondità della pipeline parallelism, la tensor parallelism suddivide le singole operazioni di matrice orizzontalmente tra le GPU. Queste due tecniche vengono spesso combinate per massimizzare il throughput.
- Data Parallelism: La data parallelism replica l'intero modello su ogni GPU e distribuisce i dati di addestramento tra di esse. Per architetture compatte e altamente ottimizzate di object detection e image segmentation come il modello Ultralytics YOLO26, che si adatta nativamente alla VRAM di un singolo dispositivo, la data parallelism tramite DistributedDataParallel (DDP) di PyTorch è il metodo preferito per accelerare l'addestramento.
Link to this sectionApplicazioni nel mondo reale in IA e ML#
Scalare infrastrutture complesse è essenziale per costruire moderni sistemi AI allo stato dell'arte:
- Training Foundation Models: Sviluppare giganteschi Large Language Models (LLMs) e foundation models come Llama 3 di Meta richiede di combinare tensor, data e pipeline parallelism. Framework come NVIDIA Megatron-LM sfruttano queste strategie per addestrare enormi architetture di Mixture-of-Experts (MoE) su migliaia di GPU su piattaforme cloud come AWS SageMaker.
- Diagnostica medica ad alta risoluzione: Nell'AI in healthcare e nella modellazione scientifica, le scansioni volumetriche 3D producono spesso attivazioni troppo massicce per un singolo acceleratore. Creare una pipeline dei livelli di rete tra i nodi consente agli ospedali di ricerca di addestrare reti profonde su enormi dataset MRI senza compromettere la risoluzione dell'immagine.
Link to this sectionEsempio di codice: Concetto di partizionamento dei livelli#
Storicamente, distribuire i livelli tra i dispositivi richiedeva codice personalizzato complesso. Oggi, la logica fondamentale mappa specifici livelli su diversi identificatori di dispositivo. Di seguito è riportata una rappresentazione concettuale di come gli stadi di rete vengono suddivisi tra i dispositivi in PyTorch, gettando le basi per le operazioni di pipeline parallel:
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 foundation models richieda un'orchestrazione complessa, l'implementazione di progetti rapidi e scalabili di computer vision (CV) è generalmente più semplice. Per uno model deployment semplificato e un utilizzo multi-GPU automatizzato, gli sviluppatori si affidano alla Ultralytics Platform per scalare automaticamente i carichi di lavoro. Sfruttando robusti model training tips, la piattaforma astrae la gestione dell'infrastruttura, consentendo agli ingegneri di concentrarsi interamente sulla costruzione di soluzioni AI accurate in grado di effettuare real-time inference.






