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 suddividere una grande neural network (NN) su più 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 all'altro. Concatenando questi dispositivi, i ricercatori possono addestrare massicci algoritmi di deep learning (DL) senza riscontrare out-of-memory errors che limitano l'hardware.
Come 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 modo sequenziale, 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 il batch size globale in "micro-batch" più piccoli.
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 utilizzano comunemente la 1F1B (One Forward, One Backward) scheduling strategy. Questo metodo alterna contemporaneamente il calcolo dei passaggi in avanti e all'indietro per diversi micro-batch, riducendo significativamente le bolle di pipeline e il consumo di memoria. Recenti progressi del 2024 e del 2025 introducono persino il Zero Bubble Pipeline Parallelism, una strategia di previsione dei pesi consapevole dell'ottimizzatore che elimina quasi del tutto i tempi di inattività tra i cluster di calcolo.
Distinguere 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 in base alla profondità del parallelismo di pipeline, il parallelismo dei tensor suddivide le singole operazioni di matrice orizzontalmente tra le GPU. Queste due tecniche vengono spesso combinate per massimizzare il throughput.
- Data Parallelism: Il parallelismo dei dati replica l'intero modello su ogni GPU e distribuisce i dati di addestramento tra di esse. Per architetture di object detection e image segmentation compatte e altamente ottimizzate 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 nel mondo reale in IA e ML#
Scalare infrastrutture complesse è essenziale per costruire moderni sistemi AI allo stato dell'arte:
- Training Foundation Models: Lo sviluppo di giganteschi Large Language Models (LLMs) e foundation models come Llama 3 di Meta richiede la combinazione del parallelismo di tensor, dati e pipeline. Framework come NVIDIA Megatron-LM sfruttano queste strategie per addestrare massicce architetture Mixture-of-Experts (MoE) su migliaia di GPU su piattaforme cloud come AWS SageMaker.
- High-Resolution Medical Diagnostics: Nell'AI in healthcare e nella modellazione scientifica, le scansioni volumetriche 3D producono spesso attivazioni troppo massicce per un singolo acceleratore. L'inserimento in pipeline dei livelli di rete tra i nodi consente agli ospedali di ricerca di addestrare reti profonde su enormi set di dati MRI senza compromettere la risoluzione dell'immagine.
Esempio di codice: Concetto di partizionamento dei livelli#
Storicamente, la distribuzione dei livelli tra i dispositivi richiedeva codice personalizzato e complesso. Oggi, la logica fondamentale mappa livelli specifici su diversi identificatori di dispositivo. Di seguito è riportata una rappresentazione concettuale di come gli stadi della rete vengono suddivisi tra i dispositivi in PyTorch, ponendo le basi per le operazioni parallele di 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 di base richieda un'orchestrazione complessa, l'implementazione di progetti di computer vision (CV) rapidi e scalabili è generalmente più semplice. Per un model deployment semplificato e un utilizzo automatizzato di più GPU, 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 di IA accurate e capaci di real-time inference.






