CUDA out of memory
Вопрос
Обучение падает с CUDA out of memory. Ваши действия?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Понять, что занимает память: веса, состояние оптимизатора, активации
Уменьшить батч и использовать накопление градиентов
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 ошибок.