Sobes.tech
Senior
25

Что такое gradient accumulation и зачем он нужен на ограниченной памяти?

Companies where asked
Skyeng
Магнит

Answer from AI

sobes.tech AI

Gradient accumulation — это техника, позволяющая эффективно обучать модели с большим размером батча, чем позволяет память GPU, путём накопления градиентов за несколько мини-батчей перед обновлением весов.

Когда память ограничена, нельзя загрузить большой батч целиком. Вместо этого модель обрабатывает несколько маленьких батчей последовательно, накапливая градиенты (без обновления параметров), а после заданного количества таких шагов выполняет один шаг оптимизации.

Это позволяет:

  • Эмулировать больший размер батча, что может улучшить стабильность и качество обучения.
  • Обойти ограничения памяти GPU.

Пример псевдокода на 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()

Здесь accumulation_steps — количество мини-батчей, после которых происходит обновление весов.