Отправьте все параметры и объекты класса на одно и то же устройство в PyTorch

#python #pytorch

Вопрос:

У меня есть следующий фиктивный код в PyTorch

 class inside(nn.Module):
    def __init__(self):
        super(inside, self).__init__()        
        self.weight_h = nn.Parameter(SOMETHING GOES HERE) # send to CPU or GPU
        self.weight_v = nn.Conv2d(SOMETHING GOES HERE) # send to CPU or GPU

    def forward(self, x):
        ...
        return x

class main_class(nn.Module):
    def __init__(self):
        super(main_class, self).__init__()        
        self.paramA = nn.Conv2d(...)
        self.paramB = nn.Conv2d(...)
        self.in_class = inside()

    def forward(self, x):
        ...
        return x

device = #Define what GPU device to use or CPU

object = main_class()
object = object.to(device)
 

Предположим, что в этом коде device используется GPU2. Тогда я знаю, что параметры self.paramA и self.paramB определенно были загружены в GPU2, а не на CPU или любом другом графическом процессоре. Но что можно сказать о self.weight_h и self.weight_v ? Гарантированно ли они будут на GPU2 или мне нужно явно указать это для параметров inside класса?

Я использую PyTorch 1.8.1, но, возможно, предложу метод, который является довольно общим и который будет верен для любой версии PyTorch>=1.0

Ответ №1:

Я думаю, когда вы сказали этот код — термин можно уточнить немного подробнее. Есть две вещи, которые можно поместить в графический процессор. Одна из проблем касается данных. Вы можете хранить свои данные в графическом процессоре и тому подобном.

Есть еще одна часть, модель может быть перенесена на графический процессор. В этом случае, когда вы это сделаете final_model.to(...) , все модули внутри него как часть окончательной модели будут перенесены на графический процессор.

Я различил эти две вещи, потому что иногда легко перепутать эти две вещи.

Таким образом, окончательный ответ: да, они гарантированно будут на GPU. (Те внутренние веса модели, которые являются частью большой модели).