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

问题描述 投票:0回答:2

我是 Pytorch 的新手,但它看起来很不错。我唯一的问题是何时使用

tensor.to(device)
Module.nn.to(device)

我正在阅读有关此主题的文档,它表明此方法会将张量或模型移动到指定的设备。但我不清楚这需要什么操作,如果我不在正确的时间使用

.to()
,我会得到什么样的错误?

例如,如果我只是创建一个张量,我想象该张量存储在CPU可访问的内存中,直到我将张量移动到GPU。一旦张量位于 GPU 上,GPU 将对该张量执行任何数学运算。

但是,我是否需要担心在不将模型传输到 GPU 的情况下不小心将数据张量传输到 GPU 呢?这只会给我带来直接错误,还是会在幕后进行大量昂贵的数据传输。这个例子对我来说很容易测试,但我只是想知道其他情况可能不那么明显。

任何指导都会有所帮助。

python pytorch gpu tensor
2个回答
28
投票

模型和数据必须位于同一设备(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)

0
投票

如果张量已经在 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 是引用还是新变量,是否意味着我获得了另一块内存?

© www.soinside.com 2019 - 2024. All rights reserved.