API:
if self.is_dynamic_ddp:
kwargs.update(dict(ddp_reducer=self.model.reducer))
outputs = self.model.train_step(data_batch, self.optimizer, **kwargs)
Редуктор может помочь нам перестроить ведро для текущего обратного пути, просто добавив эту строку в функцию train_step
:
if ddp_reducer is not None:
ddp_reducer.prepare_for_backward(_find_tensors(loss_disc))
Полный пример использования:
loss_disc, log_vars_disc = self._get_disc_loss(data_dict_)
# Подготовка к обратному распространению в DDP. Если вы не вызовете эту функцию перед
# обратным распространением, DDP динамически не найдёт используемые параметры
# в текущем вычислении.
if ddp_reducer is not None:
ddp_reducer.prepare_for_backward(_find_tensors(loss_disc))
loss_disc.backward()
То есть пользователи должны добавить подготовку редуктора между расчётом потерь и их обратным распространением.
В нашем MMGeneration
эта функция используется как стандартный способ обучения модели DDP. В конфигурациях пользователям нужно только добавить следующую конфигурацию, чтобы использовать динамический раннер DDP:
# Использовать динамический раннер
runner = dict(
type='DynamicIterBasedRunner',
is_dynamic_ddp=True,
pass_training_status=True)
Мы должны признать, что эта реализация будет использовать закрытый интерфейс PyTorch и продолжит поддерживать эту функцию.
Конечно, мы всё ещё поддерживаем использование DDP Wrapper
для обучения ваших GAN. Если вы хотите переключиться на использование DDP Wrapper, вам следует изменить файл конфигурации следующим образом:
# использовать ddp wrapper для более быстрого обучения
use_ddp_wrapper = True
find_unused_parameters = True # True для динамической модели, False для статической модели
runner = dict(
type='DynamicIterBasedRunner',
is_dynamic_ddp=False, # Обратите внимание, что этот флаг должен быть False.
pass_training_status=True)
В файле конфигурации DCGAN (dcgan config file
, https://github.com/open-mmlab/mmgeneration/tree/master/configs/dcgan/dcgan_celeba-cropped_64_b128x1_300k.py) мы уже предоставили пример использования DDPWrapper
в MMGeneration.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )