Зачем нам использовать метод (устройство) в pytorch?
torch.Tensor.to
- это многоцелевой метод.
Вы можете не только выполнять преобразование типов, но также перемещать тензор ЦП и ГП и перемещать ТП в ЦП:
tensor = torch.randn(2, 2)
print(tensor)
tensor = tensor.to(torch.float64)
print(tensor) #dtype=torch.float64
tensor = tensor.to("cuda")
print(tensor) #device='cuda:0', dtype=torch.float64)
tensor = tensor.to("cpu")
print(tensor) #dtype=torch.float64
tensor = tensor.to(torch.float32)
print(tensor) # won't print dtype=torch.float32 since it is by default
Поскольку CPU и GPU - это разные добрые воспоминания, они должны общаться друг с другом.
Вот почему у нас есть to("cuda")
и to("cpu")
, которые мы называем тензорными.
Обычно при загрузке обучающих наборов данных (изображений):
- вы скачиваете их с URL (например, MNIST http://deeplearning.net/data/mnist/mnist.pkl.gz)
- распаковать их
- конвертирует их в массивы
- конвертировать массивы numpy в тензоры (так как это быстро)
- переместите их в GPU для обучения.
to("cuda")
Вы можете создавать тензоры и перемещать их в GPU следующим образом.
torch.zeros(1000).to("cuda")
Но есть хитрость, иногда вы можете даже загрузить их напрямую в графический процессор, не перегружая процессор.
torch.zeros(1000, device="gpu")