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