Ошибка CUDA out of memory как уменьшить использование памяти GPU

Рейтинг: 57% · 37 голосов
Machine learning и deep learning: обучение и дообучение моделей, датасеты, PyTorch, TensorFlow, эксперименты, метрики, MLOps и аналитика данных.
Ответить
Аватара пользователя
danila_spb
Сообщения: 3
Зарегистрирован: Сб май 16, 2026 10:59 pm

Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение danila_spb »

Обучаю трансформер на RTX 3080 (10GB VRAM), батч сайз 16, длина последовательности 512. Через несколько шагов вылетает RuntimeError: CUDA out of memory. Tried to allocate 2.50 GiB. Уменьшил батч до 8 — то же самое. До 4 — стало работать, но это очень медленно и, читал, влияет на качество обучения. Как правильно решать такую проблему?
👍3 ❤️ 🔥1 😄 🤔
✔ Лучший ответ сформирован автоматически — irina2236
Несколько практических трюков которые помогают. Первое: после валидации и в начале эпохи вызывайте torch.cuda.empty_cache() — не освобождает память занятую тензорами, но убирает кэш фрагментов. Второе: убедитесь что у вас нет утечки графов вычислений — если сохраняете loss в список для логгирования, пишите loss.item() а не просто loss, иначе граф не освобождается. Третье: используйте del tensor и…
Перейти к ответу →
Аватара пользователя
lev_loop
Сообщения: 30
Зарегистрирован: Пн май 11, 2026 5:23 am

Re: Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение lev_loop »

Gradient accumulation — первое что нужно попробовать. Смысл в том, что вы делаете несколько forward+backward пассов без обновления весов, накапливаете градиенты, и только потом вызываете optimizer.step(). Эффективный батч сайз = реальный батч * accumulation_steps. Код: добавляете счётчик шагов, loss.backward() каждый шаг, optimizer.step() + optimizer.zero_grad() каждые N шагов. В PyTorch Lightning это параметр accumulate_grad_batches=4.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
ruslan_data
Сообщения: 2
Зарегистрирован: Чт май 21, 2026 6:54 am

Re: Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение ruslan_data »

Обязательно включите mixed precision training: from torch.cuda.amp import autocast, GradScaler. Scaler = GradScaler(), и оборачиваете forward pass в with autocast(). Это переводит вычисления в float16 где возможно, память падает почти вдвое, скорость растёт. На RTX 3080 это работает отлично, tensor cores заточены под fp16. В PyTorch 2.x это ещё проще: trainer = Trainer(precision='16-mixed').
👍2 ❤️1 🔥1 😄1 🤔
Аватара пользователя
irina2236
Сообщения: 18
Зарегистрирован: Вт май 12, 2026 6:21 am

Re: Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение irina2236 »

✔ Лучший ответ — сформирован автоматически
Несколько практических трюков которые помогают. Первое: после валидации и в начале эпохи вызывайте torch.cuda.empty_cache() — не освобождает память занятую тензорами, но убирает кэш фрагментов. Второе: убедитесь что у вас нет утечки графов вычислений — если сохраняете loss в список для логгирования, пишите loss.item() а не просто loss, иначе граф не освобождается. Третье: используйте del tensor и затем empty_cache() для временных больших тензоров.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
maria_api21
Сообщения: 2
Зарегистрирован: Вс май 17, 2026 5:27 am

Re: Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение maria_api21 »

Для трансформеров конкретно — посмотрите на gradient checkpointing: model.gradient_checkpointing_enable() в HuggingFace или torch.utils.checkpoint.checkpoint() для кастомных моделей. Суть: не хранить все промежуточные активации в памяти, а пересчитывать их при backward pass. Замедляет обучение на 20-30%, но память сокращается радикально — иногда в 4-10 раз. Для длинных последовательностей это меняет всё.
👍1 ❤️ 🔥 😄1 🤔1
Аватара пользователя
apiflow8899
Сообщения: 14
Зарегистрирован: Пн май 11, 2026 8:59 am

Re: Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение apiflow8899 »

Ещё можно профилировать что именно занимает память: print(torch.cuda.memory_summary()) даёт подробную картину. Часто оказывается что проблема не в батче а в том, что накапливаются данные в val_step без torch.no_grad(). Оберните всю валидацию в with torch.no_grad(): и увидите разницу.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
roman_lab
Сообщения: 2
Зарегистрирован: Пт май 22, 2026 12:45 pm

Re: Ошибка CUDA out of memory как уменьшить использование памяти GPU

Сообщение roman_lab »

Если ничего не помогает и нужна скорость — смотрите в сторону DeepSpeed ZeRO-2 или ZeRO-3. Это уже серьёзный инструмент, разбивает состояния оптимизатора и веса по GPU. Для одной карты тоже даёт профит через offload на CPU RAM. Интегрируется с HuggingFace Trainer через одну строчку конфига.
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Машинное обучение и Data Science»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость