1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/open-mmlab-mmgeneration

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ddp_train_gans.md 3.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 07:34 ccb7da8

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

Конечно, мы всё ещё поддерживаем использование 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/open-mmlab-mmgeneration.git
git@api.gitlife.ru:oschina-mirror/open-mmlab-mmgeneration.git
oschina-mirror
open-mmlab-mmgeneration
open-mmlab-mmgeneration
master