Выбор ответа Senior Цепное правило и autodiff обновлено
Память при обратном проходе
Вопрос
Обучение большой модели упирается в память GPU, причём основную часть занимают не веса. Что именно и как это смягчают?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сохранённые активации прямого прохода; помогают checkpointing, меньший батч, bf16. Обратному проходу нужны промежуточные значения прямого (например, вход слоя для градиента по весам), их объём растёт с батчем, длиной последовательности и глубиной.
Варианты ответа
- Копии градиентов для каждого примера в батче; помогает увеличение батча и усреднение
- Скомпилированные ядра CUDA и кеш аллокатора; помогает перезапуск процесса между эпохами
- Сохранённые активации прямого прохода; помогают checkpointing, меньший батч, bf16правильный ответ
- Вторые производные для Adam; помогает отключение гессиана в настройках оптимизатора
Разбор
Обратному проходу нужны промежуточные значения прямого (например, вход слоя для градиента по весам), их объём растёт с батчем, длиной последовательности и глубиной. Checkpointing хранит активации только части слоёв и пересчитывает остальные во время backward: память меньше ценой примерно ещё одного прямого прохода. Также помогают bf16 и уменьшение батча с накоплением градиентов.
- Градиенты по каждому примеру отдельно не хранят, их сразу суммируют по батчу.
- Ядра занимают немного.
- Гессиан при обычном обучении никто не считает, Adam использует только первые производные и их моменты.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.