Предыстория: у меня есть модель, и я пытаюсь перенести ее на TF 2.0
, чтобы получить приятное нетерпеливое исполнение, но я просто не могу понять, как выполнять распределенное обучение (4 GPU) И одновременно выполнять накопление градиента. .
Проблема:
Мне нужно иметь возможность использовать настраиваемый цикл обучения с градиентной лентой, потому что у меня сложная многомодельная проблема (несколько моделей ввода и модели вывода обучаются вместе), мне не нужны градиенты 2-го порядка
С размером моей модели (средний, что-то вроде трансформатора среднего размера) я не могу получить размер партии больше ~ 32 с 4 графическими процессорами, что является самым большим экземпляром, который я могу получить, к сожалению, это действительно старые 11 ГБ K80, потому что Azure, похоже, думает, что графические процессоры, которые Google даже не раздает бесплатно, уже достаточно хороши ...........
У меня есть набор данных, для которого требуются очень большие пакеты, потому что я должен учитывать очень большой дисбаланс (я также использую взвешивание и фокусные потери c), поэтому мне нужно выполнить 4-8 шагов накопления градиента, чтобы сгладить градиенты.
Я прочитал руководство по распределенным циклам обучения и сумел его реализовать: https://www.tensorflow.org/beta/tutorials/distribute/training_loops
Я также реализовал накопление градиента в TF 2.0 для пользовательских циклов обучения и tf.keras
: https://colab.research.google.com/drive/1yaeRMAwhGkm1voaPp7EtFpSLF33EKhTc