【问题标题】:pytorch when do I need to use `.to(device)` on a model or tensor?pytorch 我什么时候需要在模型或张量上使用`.to(device)`?
【发布时间】:2020-11-13 14:58:01
【问题描述】:

我是 Pytorch 的新手,但它看起来很不错。我唯一的问题是何时使用tensor.to(device)Module.nn.to(device)

我正在阅读有关此主题的documentation,它表明此方法会将张量或模型移动到指定的设备。但是我并不清楚这需要哪些操作,如果我没有在正确的时间使用.to()会出现什么样的错误?

例如,如果我只是创建一个张量,我认为该张量存储在 CPU 可访问内存中,直到我将张量移至 GPU。一旦张量在 GPU 上,GPU 就会对该张量执行任何数学运算。

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

任何指导都会有所帮助。

【问题讨论】:

  • 如果一个张量在 GPU 上,另一个在 CPU 上进行操作,你会收到一个Runtime Error: Expected object of device type cuda but got device type cpu in Pytorch,这很清楚。
  • @Berriel 是的,这是有道理的。现在我知道如果它弹出来如何解释这个消息。谢谢你的提示。我只是担心系统没有出现故障,结果我遇到了一些非常慢的训练循环或其他难以诊断的问题。再次感谢。

标签: python pytorch gpu tensor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多