Я просто изучаю учебник для начинающих в PyTorch и заметил, что один из множества различных способов поместить тензор (в основном такой же, как в массиве numpy) на графический процессор требуетподозрительно большое количество по сравнению с другими методами :
import time
import torch
if torch.cuda.is_available():
print('time =', time.time())
x = torch.randn(4, 4)
device = torch.device("cuda")
print('time =', time.time())
y = torch.ones_like(x, device=device) # directly create a tensor on GPU => 2.5 secs??
print('time =', time.time())
x = x.to(device) # or just use strings ``.to("cuda")``
z = x + y
print(z)
print(z.to("cpu", torch.double)) # ``.to`` can also change dtype together!
a = torch.ones(5)
print(a.cuda())
print('time =', time.time())
else:
print('I recommend you get CUDA to work, my good friend!')
Вывод (всего раз):
time = 1551809363.28284
time = 1551809363.282943
time = 1551809365.7204516 # (!)
time = 1551809365.7236063
Сведения о версии:
1 CUDA device: GeForce GTX 1050, driver version 415.27
CUDA = 9.0.176
PyTorch = 1.0.0
cuDNN = 7401
Python = 3.5.2
GCC = 5.4.0
OS = Linux Mint 18.3
Linux kernel = 4.15.0-45-generic
Как выМожно увидеть, что эта одна операция ("y = ...") занимает намного больше времени (2,5 секунды), чем остальные вместе взятые (0,003 секунды).Я смущен этим, поскольку ожидаю, что все эти методы в основном делают то же самое.Я пытался убедиться, что типы в этой строке 32-битные или имеют разные формы, но это ничего не изменило.