Выборка нормального распределения в питорч-молнии
В Pytorch-Lightning обычно не требуется указывать cuda или gpu. Но когда я хочу создать тензор с гауссовой выборкой, используяtorch.normal
я получил
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!
Итак, как мне изменить torch.normal
такой что пыторч-молния нормально работает? Поскольку я использую код на разных машинах, на процессоре и на графическом процессоре
centers = data["centers"] #already on GPU... sometimes...
lights = torch.normal(0, 1, size=[100, 3])
lights += centers
2 ответа
Рекомендуемый способ - сделать lights = torch.normal(0, 1, size=[100, 3], device=self.device)
если это внутри класса молнии. Вы также можете:lights = torch.normal(0, 1, size=[100, 3]).type_as(tensor)
, где tensor
это некоторый тензор, который находится на cuda.
Вы также можете использовать.to('device_name')
:
lights = torch.normal(0, 1, size=[100, 3]).to(centers.device)
centers += lights
Поскольку вы спросили о Pytorch-Lightning, стоит упомянуть, что такие методы, как.to(...)
или.type_as(...)
не связаны с этой структурой, поскольку исходят из факела.