Gradient Accumulation
Aprende como a acumulação de gradientes permite tamanhos de lote efetivos maiores em memória GPU limitada, com orientação prática de treino em PyTorch e Ultralytics YOLO.
A acumulação de gradientes é uma técnica de treino que adiciona gradientes de vários lotes pequenos, chamados de microbotes, antes de realizar uma única atualização dos pesos do modelo. Ela aproxima o treino com um batch size maior quando a memória da GPU disponível não consegue conter o lote completo de uma só vez. Isto torna o gradient descent intensivo em memória prático, sem alterar a arquitetura do modelo ou reduzir a resolução de entrada.
Como Funciona a Acumulação de Gradientes#
Durante o treino normal, cada lote segue três etapas principais: calcular a perda, usar a backpropagation para calcular os gradientes e permitir que o otimizador atualize os pesos do modelo. Os gradientes são então limpos antes do lote seguinte.
A acumulação de gradientes atrasa a atualização do otimizador. Cada microbote executa uma passagem para a frente e para trás, mas os seus gradientes permanecem na memória e são adicionados aos dos microbotes subsequentes. Este comportamento decorre naturalmente da PyTorch backward operation, que acumula valores no campo de gradiente de cada parâmetro.
Após o número configurado de passos de acumulação:
- O otimizador atualiza os pesos do modelo.
- Os gradientes são repostos utilizando uma operação como Optimizer.zero_grad.
- Uma nova janela de acumulação começa.
O batch size efetivo é:
microbatch size x accumulation steps x number of training devices
Por exemplo, um microbote de 4 imagens acumulado ao longo de 8 passos comporta-se aproximadamente como um lote de 32 imagens numa única GPU. Com quatro GPUs, o batch size efetivo global passa a ser 128.
Efeitos na Memória, Velocidade e Aprendizagem#
A acumulação de gradientes reduz o pico de memória necessário para as ativações, porque apenas um microbote passa pela rede de cada vez. Não reduz substancialmente a memória utilizada pelos parâmetros do modelo, gradientes ou estado do otimizador.
Além disso, normalmente não acelera o treino. Processar oito microbotes ainda requer oito passagens para a frente e para trás, e lotes menores podem usar a GPU com menos eficiência. O principal benefício é encaixar um lote efetivo desejado numa memória limitada. Um benefício secundário pode ocorrer no distributed training, onde as implementações podem evitar sincronizar os gradientes até ao fim de uma janela de acumulação utilizando recursos como DistributedDataParallel no_sync.
Uma implementação manual divide habitualmente a perda de cada microbote pelo número de passos de acumulação, para que o gradiente resultante represente uma média em vez de uma soma. Os treinadores de alto nível podem gerir a normalização automaticamente, pelo que aplicar escala adicional pode produzir atualizações incorretas.
A acumulação pode aproximar um lote grande verdadeiro, mas os resultados nem sempre são idênticos. As Batch normalization statistics são calculadas a partir de microbotes individuais, enquanto as operações estocásticas e a ordenação de vírgula flutuante também podem introduzir diferenças. O learning rate pode, portanto, exigir validação em vez de dimensionamento automático.
Técnicas Relacionadas e Principais Diferenças#
A acumulação de gradientes é frequentemente confundida com outras técnicas de memória ou estabilidade:
- Gradient checkpointing reduz a memória de ativação recalculando operações selecionadas da passagem para a frente durante a retropropagação. A PyTorch activation checkpointing documentation descreve este compromisso entre computação e memória. Em vez disso, a acumulação divide um lote grande em microbotes menores.
- Mixed precision armazena ou calcula operações selecionadas com tipos de dados de menor precisão. Pode reduzir a memória e melhorar o rendimento, enquanto a acumulação altera a frequência com que o otimizador atualiza. As técnicas podem ser combinadas seguindo o correto automatic mixed precision accumulation workflow.
- Gradient clipping limita a magnitude do gradiente para reduzir a instabilidade de atualizações excecionalmente grandes. Não cria um batch size efetivo maior. Quando combinado com a acumulação, o corte deve normalmente ocorrer após a conclusão da acumulação do gradiente, utilizando uma operação como clip_grad_norm.
Aplicações no Mundo Real#
Na segmentação de imagens médicas de alta resolução, uma GPU de 12 GB pode comportar apenas dois exames grandes de cada vez. A acumulação de gradientes em oito microbotes produz um lote efetivo de 16, preservando ao mesmo tempo a resolução necessária para identificar pequenas estruturas anatómicas. O compromisso é um intervalo mais longo entre as atualizações do otimizador.
Para a deteção de objetos aéreos, uma equipa de engenharia pode treinar em quatro GPUs com seis imagens por dispositivo e quatro passos de acumulação. O lote global efetivo é de 96 imagens. Isto pode estabilizar as atualizações para cenas que contêm muitos veículos pequenos ou edifícios, mantendo cada dispositivo dentro do seu limite de memória. As equipas podem gerir experiências na cloud, conjuntos de dados e execuções de treino através de Ultralytics Platform cloud training.
Acumulação de Gradientes com o Ultralytics YOLO#
O model training workflow do Ultralytics deriva o comportamento de acumulação das definições físicas batch e nominais nbs. Com batch=4 e nbs=64, o treinador tem como alvo um lote nominal de 64, adiando as atualizações do otimizador em vários microbotes.
from ultralytics import YOLO
# Load a pretrained YOLO26 detection model
model = YOLO("yolo26n.pt")
# Use a small physical batch and a larger nominal batch
results = model.train(
data="coco8.yaml",
epochs=10,
batch=4,
nbs=64,
)O treinador de alto nível gere a retropropagação, a acumulação, os passos do otimizador e a limpeza de gradientes. O seu comportamento está documentado na referência Ultralytics BaseTrainer reference. Na prática, escolha o maior microbote que caiba de forma fiável, calcule o lote efetivo pretendido e compare os resultados de validação ao alterar os passos de acumulação, a taxa de aprendizagem ou a contagem de dispositivos.






