pytorch什么时候需要在模型或Tensor上使用`.to(device)`?

bcs8qyzn  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(68)

我是Pytorch的新手,但它看起来很不错。我唯一的问题是什么时候使用tensor.to(device)Module.nn.to(device)
我在阅读关于这个主题的文档,它表明这个方法会将Tensor或模型移动到指定的设备上。但我不清楚这是必要的操作,如果我不在正确的时间使用.to(),我会得到什么样的错误?
例如,如果我只是创建一个Tensor,我想象Tensor存储在CPU可访问的内存中,直到我将Tensor移动到GPU。一旦Tensor在GPU上,GPU将对该Tensor执行任何数学运算。
但是,我是否需要担心在没有将模型传输到GPU的情况下,意外地将数据Tensor传输到GPU?这会直接给我给予错误,还是会在幕后进行大量昂贵的数据传输。这个例子对我来说很容易测试,但我只是想知道其他情况下它可能不那么明显。
任何指导都是有帮助的。

sh7euo9m

sh7euo9m1#

模型和数据必须位于同一个设备上,无论是CPU还是GPU,模型才能处理数据。数据在CPU上,模型在GPU上,反之亦然,将导致错误。
你可以设置一个变量 device 为cuda,如果它是可用的,否则它将被设置为cpu,然后将数据和模型传输到 device

import torch

device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)
data = data.to(device)

字符串

相关问题