Почему создание одного тензора на GPU в PyTorch занимает 2,5 секунды? - PullRequest
1 голос
/ 05 марта 2019

Я просто изучаю учебник для начинающих в 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-битные или имеют разные формы, но это ничего не изменило.

1 Ответ

1 голос
/ 05 марта 2019

Когда я переупорядочиваю команды, любая команда сверху занимает 2,5 секунды.Таким образом, это наводит меня на мысль, что здесь происходит отложенная однократная настройка устройства , и будущие распределения на GPU будут быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...