【问题标题】:RuntimeError: Attempted to set the storage of a tensor on device "cuda:0" to a storage on different device "cpu"RuntimeError:尝试将设备“cuda:0”上的张量存储设置为不同设备“cpu”上的存储
【发布时间】:2023-02-16 09:24:22
【问题描述】:

早些时候我已经配置了以下项目

https://github.com/zllrunning/face-makeup.PyTorch

使用带有 CUDA=10.2 的 Pytorch,现在带有 CUDA=10.2 支持的 Pytorch 不适用于 Windows。 因此,当我使用带有 CUDA=11.3 的 Pytorch 配置同一个项目时,出现以下错误:

RuntimeError: Attempted to set the storage of a tensor on device "cuda:0" to a storage on different device "cpu".  This is no longer allowed; the devices must match.

请帮我解决这个问题。

【问题讨论】:

  • 正如错误明确指出的那样,您将必须修改项目以使用当前的 PyTorch 语义来管理存储数据的内存空间。这无论如何都不是与 CUDA 相关的问题,它只是试图在现代版本的 Pytorch 上运行过时的代码。

标签: python pytorch


【解决方案1】:

我通过在 model_zoo.load_url 方法中添加 map_location=lambda storage, loc: storage.cuda() 解决了这个问题。我认为在 Torch 1.12 中他们已经将默认位置从 GPU 更改为 CPU(这没有任何意义)。

编辑: 在文件 resnet.py 中,在函数下def init_weight(自我):, 下面一行

state_dict = modelzoo.load_url(resnet18_url)

改变了

state_dict = modelzoo.load_url(resnet18_url, map_location=lambda storage, loc: storage.cuda())

【讨论】:

    【解决方案2】:

    与 resnet 没有特别相关,但下面的代码应该适用于与“不知道如何恢复 torch.storage._untype 存储(标记为 gpu)的数据位置”相关的大多数问题

    import torch  
    import whisper 
    devices = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 
    model = whisper.load_model("medium" , device =devices)
    

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多