Обучение моделей
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
Связанные термины
Улучшает
Необходим для