首页 > 解决方案 > PyTorch:tensor.cuda() 和 tensor.to(torch.device("cuda:0")) 有什么区别?

问题描述

在 PyTorch 中,以下两种向 GPU 发送张量(或模型)的方法有什么区别:

设置:

X = np.array([[1, 3, 2, 3], [2, 3, 5, 6], [1, 2, 3, 4]]) # X = model()
X = torch.DoubleTensor(X)
方法一 方法二
X.cuda() device = torch.device("cuda:0")
X = X.to(device)

(我真的不需要详细解释后端发生的事情,只是想知道它们是否本质上都在做同样的事情)

标签: pythonpytorchgpu

解决方案


两者没有区别。
pytorch 的早期版本具有将张量和模型从 cpu 移动到 gpu 并返回的方法.cuda().cpu()但是,这使得代码编写有点麻烦:

if cuda_available:
  x = x.cuda()
  model.cuda()
else:
  x = x.cpu()
  model.cpu()

后来引入.to()的版本基本上以优雅的方式处理所有事情:

device = torch.device('cuda') if cuda_available else torch.device('cpu')
x = x.to(device)
model = model.to(device)

推荐阅读