Sobes.tech
Senior

O que é acumulação de gradiente e por que é necessária em memória limitada?

sobes.tech IA

Resposta da IA

A acumulação de gradientes é uma técnica que permite treinar modelos com um tamanho de lote maior do que a memória da GPU permite, acumulando os gradientes ao longo de vários mini-lotes antes de atualizar os pesos.

Quando a memória é limitada, não é possível carregar um grande lote de uma só vez. Em vez disso, o modelo processa vários pequenos lotes sequencialmente, acumulando os gradientes (sem atualizar os parâmetros), e após um número definido de passos, realiza uma atualização.

Isso permite:

  • Emular um tamanho de lote maior, o que pode melhorar a estabilidade e a qualidade do treinamento.
  • Superar as limitações de memória da GPU.

Exemplo de pseudocódigo em PyTorch:

optimizer.zero_grad()
for i, (inputs, targets) in enumerate(dataloader):
    outputs = model(inputs)
    loss = criterion(outputs, targets) / accumulation_steps
    loss.backward()
    if (i + 1) % accumulation_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

Aqui, accumulation_steps é o número de mini-lotes após os quais os pesos são atualizados.