我是 Pytorch 的新手,但它看起来很不错。我唯一的问题是何时使用
tensor.to(device)
或 Module.nn.to(device)
。
我正在阅读有关此主题的文档,它表明此方法会将张量或模型移动到指定的设备。但我不清楚这需要什么操作,如果我不在正确的时间使用
.to()
,我会得到什么样的错误?
例如,如果我只是创建一个张量,我想象该张量存储在CPU可访问的内存中,直到我将张量移动到GPU。一旦张量位于 GPU 上,GPU 将对该张量执行任何数学运算。
但是,我是否需要担心在不将模型传输到 GPU 的情况下不小心将数据张量传输到 GPU 呢?这只会给我带来直接错误,还是会在幕后进行大量昂贵的数据传输。这个例子对我来说很容易测试,但我只是想知道其他情况可能不那么明显。
任何指导都会有所帮助。
模型和数据必须位于同一设备(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)
如果张量已经在 GPU 上,我的问题是 pytorch .cuda() 是否不执行任何操作? 更进一步,像这样:
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)
data = data.to(device)
data = data.to(device) # data.to(device) again
如果 to(device) 为空,则 data 是引用还是新变量,是否意味着我获得了另一块内存?