Обучение моделей 18 просмотров

Gradient Accumulation

Gradient Accumulation

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

Что такое Gradient Accumulation

Gradient Accumulation — техника обучения, при которой градиенты суммируются за K мини-батчей, и только после K шагов выполняется обновление весов оптимизатором.

Эффективный batch size = micro_batch × accumulation_steps × num_GPUs

Зачем нужно

Большой batch size важен для стабильности обучения LLM (обычно 1-4M токенов). Но одна GPU может обработать только малый micro-batch из-за ограниченной VRAM.

Пример:
- Нужный batch size: 256
- VRAM позволяет micro_batch: 4
- GPU: 8
- gradient_accumulation_steps = 256 / (4 × 8) = 8

Реализация

accumulation_steps = 8
optimizer.zero_grad()

for i, batch in enumerate(dataloader):
    with torch.autocast("cuda", torch.bfloat16):
        loss = model(batch) / accumulation_steps  # нормализация
    loss.backward()

    if (i + 1) % accumulation_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

Особенности

  • Не требует дополнительной VRAM (в отличие от увеличения micro_batch)
  • Замедляет обучение — больше forward/backward проходов на одно обновление
  • Эквивалентно большому батчу математически (при правильной нормализации loss)
  • Комбинируется с DDP/FSDP/DeepSpeed

Связанные термины

Улучшает
Необходим для

Попробуйте на практике

Арендуйте GPU и запустите ML-модели в Intelion Cloud

Начать работу