Ответ вслух Middle PyTorch на практике обновлено

CUDA out of memory

Вопрос

Обучение падает с CUDA out of memory. Ваши действия?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала оцениваю бюджет: веса, градиенты и состояние Adam это около 16 байт на параметр в fp32, остальное активации, которые растут с батчем и длиной входа. Быстрые меры: уменьшить батч и компенсировать накоплением градиентов, включить autocast в bf16, gradient checkpointing для активаций ценой лишнего прямого прохода.

Что должно прозвучать в ответе

  • Понять, что занимает память: веса, состояние оптимизатора, активации

  • Уменьшить батч и использовать накопление градиентов

  • Mixed precision (bf16), gradient checkpointing

  • Искать утечки: накопление тензоров с графом, хранение выходов

  • Меньше модель, 8-битный оптимизатор, LoRA, шардирование (FSDP)

Что могут спросить следом

  • Почему память может расти от эпохи к эпохе?
  • Почему на валидации тоже может кончиться память?

Разбор

Сначала оцениваю бюджет: веса, градиенты и состояние Adam это около 16 байт на параметр в fp32, остальное активации, которые растут с батчем и длиной входа. Быстрые меры: уменьшить батч и компенсировать накоплением градиентов, включить autocast в bf16, gradient checkpointing для активаций ценой лишнего прямого прохода. Если память растёт со временем, ищу утечку: накопление loss без .item(), сохранение выходов модели с графом в списки, валидацию без no_grad. Если модель целиком не влезает: 8-битные оптимизаторы, LoRA вместо полного дообучения, шардирование весов и состояния через FSDP или ZeRO, перенос части на CPU. torch.cuda.memory_summary и профайлер показывают, что именно занимает память.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.