Pytorch 0.4.0: Существует три способа создания тензоров на устройстве CUDA.Есть ли какая-то разница между ними? - PullRequest
0 голосов
/ 16 ноября 2018

Я потерпел неудачу в третьем пути.t3 все еще на процессоре.Понятия не имею, почему.

a = np.random.randn(1, 1, 2, 3)

t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))

t2 = torch.tensor(a)
t2 = t2.cuda() 

t3 = torch.tensor(a, device=torch.device('cuda'))

1 Ответ

0 голосов
/ 16 ноября 2018

Все три метода работали для меня.

В 1 и 2 вы создаете тензор на процессоре, а затем перемещаете его в графический процессор при использовании .to(device) или .cuda(). Они здесь одинаковы.

Однако, когда вы используете метод .to(device), вы можете явно указать torch перейти на конкретный графический процессор, установив device=torch.device("cuda:<id>"). с .cuda() вам нужно сделать .cuda(<id>), чтобы перейти на какой-то конкретный графический процессор


Почему тогда существуют эти два метода?

.to(device) была введена в 0.4, потому что проще объявить переменную device в верхней части кода как

device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

и используйте .to(device) везде. Это позволяет довольно легко переключаться с CPU на GPU и наоборот

До этого нам приходилось использовать .cuda(), и ваш код будет if проверять наличие cuda.is_available() везде, что затрудняло переключение между GPU / CPU.


Третий метод не создает тензор на процессоре и напрямую копирует данные в графический процессор, что более эффективно.

...