Выбор ответа Senior Цепное правило и autodiff обновлено

Память при обратном проходе

Вопрос

Обучение большой модели упирается в память GPU, причём основную часть занимают не веса. Что именно и как это смягчают?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Сохранённые активации прямого прохода; помогают checkpointing, меньший батч, bf16. Обратному проходу нужны промежуточные значения прямого (например, вход слоя для градиента по весам), их объём растёт с батчем, длиной последовательности и глубиной.

Варианты ответа

  1. Копии градиентов для каждого примера в батче; помогает увеличение батча и усреднение
  2. Скомпилированные ядра CUDA и кеш аллокатора; помогает перезапуск процесса между эпохами
  3. Сохранённые активации прямого прохода; помогают checkpointing, меньший батч, bf16правильный ответ
  4. Вторые производные для Adam; помогает отключение гессиана в настройках оптимизатора

Разбор

Обратному проходу нужны промежуточные значения прямого (например, вход слоя для градиента по весам), их объём растёт с батчем, длиной последовательности и глубиной. Checkpointing хранит активации только части слоёв и пересчитывает остальные во время backward: память меньше ценой примерно ещё одного прямого прохода. Также помогают bf16 и уменьшение батча с накоплением градиентов.

  • Градиенты по каждому примеру отдельно не хранят, их сразу суммируют по батчу.
  • Ядра занимают немного.
  • Гессиан при обычном обучении никто не считает, Adam использует только первые производные и их моменты.

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

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