Вы уже нашли документацию!отлично.
.to
не является операцией на месте для тензоров.Однако, если никакого перемещения не требуется, он возвращает тот же тензор.
In [10]: a = torch.rand(10)
In [11]: b = a.to(torch.device("cuda"))
In [12]: b is a
Out[12]: False
In [18]: c = b.to(torch.device("cuda"))
In [19]: c is b
Out[19]: True
Так как b
уже на gpu и, следовательно, никаких изменений не производится, и c is b
приводит к True
.
Однако для моделей это операция на месте, которая также возвращает модель.
In [8]: import torch
In [9]: model = torch.nn.Sequential (torch.nn.Linear(10,10))
In [10]: model_new = model.to(torch.device("cuda"))
In [11]: model_new is model
Out[11]: True
Имеет смысл сохранять ее на месте для моделей, так как параметры модели необходимыбыть перемещенным на другое устройство, а не model
объект.Тензор, кажется, новый объект создан.