Pipeline Parallelism
Descubra como o paralelismo de pipelines particiona modelos de deep learning entre GPUs. Aprenda a evitar erros de falta de memória e a otimizar o treino distribuído.
O Paralelismo de Pipeline é uma técnica avançada de treino distribuído concebida para particionar uma grande rede neural (NN) entre vários dispositivos de computação, como GPUs, separando-a em termos de profundidade. Quando os pesos do modelo e os estados do otimizador de uma arquitetura moderna excedem os limites de memória de um único acelerador, os engenheiros dividem as camadas sequenciais da rede em “estágios”. Por exemplo, as primeiras 10 camadas podem residir na GPU 0, enquanto as 10 camadas seguintes residem na GPU 1. Durante a passagem para a frente, os dados fluem de um dispositivo para o seguinte. Ao encadear estes dispositivos, os investigadores podem treinar algoritmos massivos de aprendizagem profunda (DL) sem encontrar erros de memória insuficiente que limitem o hardware.
Como funciona o Paralelismo de Pipeline#
Uma implementação ingénua da divisão das camadas entre dispositivos conduz a graves ineficiências conhecidas como “bolhas do pipeline”. Como as camadas são processadas sequencialmente, a GPU 1 fica completamente inativa enquanto a GPU 0 processa as camadas iniciais. Para maximizar a utilização do hardware, os agendadores modernos de pipeline dividem o tamanho global do lote em “micro lotes” mais pequenos.
Em vez de esperar que um lote inteiro termine, a GPU 0 começa imediatamente a processar o segundo micro lote assim que envia o primeiro micro lote para a GPU 1. Ferramentas como o Microsoft DeepSpeed e a API PyTorch Distributed Pipelining utilizam frequentemente a estratégia de agendamento 1F1B (Um avanço, um retrocesso). Este método alterna o cálculo das passagens para a frente e para trás de diferentes micro lotes em simultâneo, minimizando significativamente as bolhas do pipeline e o consumo de memória. Os avanços recentes de 2024 e 2025 introduzem inclusivamente o Paralelismo de Pipeline sem Bolhas, uma estratégia de previsão de pesos que considera o otimizador e que quase elimina o tempo de inatividade nos clusters de computação.
Distinção entre técnicas de paralelismo relacionadas#
O paralelismo de pipeline integra um ecossistema mais amplo de estratégias de computação distribuída. Compreender as diferenças é essencial para escalar modelos de IA de forma eficaz:
- Paralelismo de Modelos: Este é o termo abrangente para dividir um modelo entre dispositivos. O paralelismo de pipeline é uma forma muito específica de paralelismo de modelos que particiona sequencialmente a arquitetura em termos de profundidade.
- Paralelismo de Tensores: Ao contrário das divisões em termos de profundidade do paralelismo de pipeline, o paralelismo de tensores fragmenta operações matriciais individuais horizontalmente entre GPUs. Estas duas técnicas são frequentemente combinadas para maximizar o débito.
- Paralelismo de Dados: O paralelismo de dados replica o modelo completo em cada GPU e distribui os dados de treino entre elas. Para arquiteturas compactas e altamente otimizadas de deteção de objetos e segmentação de imagens, como o modelo Ultralytics YOLO26, que se ajusta nativamente à VRAM de um único dispositivo, o paralelismo de dados através do DistributedDataParallel (DDP) do PyTorch é o método preferido para acelerar o treino.
Aplicações reais em IA e ML#
A expansão de infraestruturas complexas é essencial para criar sistemas de IA modernos e de última geração:
- Treino de Modelos de Base: O desenvolvimento de modelos de linguagem de grande escala (LLMs) gigantescos e de modelos de base, como o Llama 3 da Meta, exige a combinação do paralelismo de tensores, de dados e de pipeline. Frameworks como o NVIDIA Megatron-LM utilizam estas estratégias para treinar arquiteturas massivas de Mistura de Especialistas (MoE) em milhares de GPUs, em plataformas de cloud como o AWS SageMaker.
- Diagnóstico Médico de Alta Resolução: Na IA na área da saúde e na modelação científica, as imagens volumétricas 3D produzem frequentemente ativações demasiado grandes para um único acelerador. O pipeline das camadas da rede entre nós permite que hospitais de investigação treinem redes profundas em enormes conjuntos de dados de MRI sem comprometer a resolução das imagens.
Exemplo de Código: Conceito de Particionamento de Camadas#
Historicamente, distribuir camadas entre dispositivos exigia código complexo e personalizado. Atualmente, a lógica fundamental associa camadas específicas a diferentes identificadores de dispositivos. Abaixo encontra-se uma representação conceptual de como os estágios da rede são divididos entre dispositivos em PyTorch, estabelecendo a base para operações de paralelismo de 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"))Embora a criação de modelos de base exija uma orquestração complexa, a implementação de projetos rápidos e escaláveis de visão computacional (CV) é geralmente mais simples. Para uma [implementação de modelos](https://ultralytics-translation-1.invalid simplificada e uma utilização automatizada de várias GPUs, os programadores confiam na Ultralytics Platform para escalar automaticamente as cargas de trabalho. Tirando partido de sólidos conselhos para o treino de modelos, a plataforma abstrai a gestão da infraestrutura, permitindo que os engenheiros se concentrem inteiramente na criação de soluções de IA precisas, capazes de realizar inferência em tempo real.









