Pytorch неверное значение переменной-члена при использовании Multi-GPU - PullRequest
0 голосов
/ 30 октября 2018

Вот простой класс для работы в среде нескольких графических процессоров. Переменная-член self.firstIter должна быть False после первой итерации.

Class TestNetwork(nn.Module):

    def __init__(self):
        super(TestNetwork, self).__init__()
        self.firstIter = True #indicates whether it's the first iteration

    def forward(self, input):
        print 'is firstIter: ', self.firstIter #always True!!
        if self.firstIter is True:
            self.firstIter = False
        # do otherthings

Код работает должным образом при использовании только одного графического процессора.

Однако при использовании multi-GPU (т.е. nn.DataParallel) значение self.firstIter всегда печатается как True.

Почему это происходит? Что не так с кодом?

Использование PyTorch версии 0.3.1.

1 Ответ

0 голосов
/ 24 марта 2019

По сути, DataParallel работает с репликами модели, и изменения, внесенные в реплики (во время пересылки), не видны вне вызовов пересылки / переадресации, если число устройств больше 1.

Плз Подробнее см. https://discuss.pytorch.org/t/nonetype-attribute-when-using-dataparallel/11566.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...