栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

CUDA报错:RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CUDA报错:RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is

文章目录
  • 问题
  • 原因
  • 解决方案

问题
Traceback (most recent call last):
  File "test.py", line 22, in 
    model = loadmodel()
  File "/home/joshuayun/Desktop/IBD/loader/model_loader.py", line 48, in loadmodel
    checkpoint = torch.load(settings.MODEL_FILE)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 387, in load
    return _load(f, map_location, pickle_module, **pickle_load_args)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 574, in _load
    result = unpickler.load()
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 537, in persistent_load
    deserialized_objects[root_key] = restore_location(obj, location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 119, in default_restore_location
    result = fn(storage, location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 95, in _cuda_deserialize
    device = validate_cuda_device(location)
  File "/home/joshuayun/.local/lib/python3.6/site-packages/torch/serialization.py", line 79, in validate_cuda_device
    raise RuntimeError('Attempting to deserialize object on a CUDA '
    
RuntimeError: Attempting to deserialize object on a CUDA device but 
  torch.cuda.is_available() is False. If you are running on a CPU-only machine, 
  please use torch.load with map_location='cpu' to map your storages to the CPU.

原因

pytorch中model在加载预训练模型时,保存的模型未读取到对应合适位置;

本文仅给出机器只有CPU情形,而保存的模型是使用CUDA格式,无法正常读取,还有其他情形:

  1. 模型cpu,读取到gpu
  2. 模型gpu,读取到cpu
  3. 模型gpu1,读取到gpu2
解决方案

在读取模型时,指定准确硬件即可:

model = torch.load('model/pytorch_resnet50.pth',map_location ='cpu')

model = torch.load('model/pytorch_resnet50.pth',map_location ='cuda:0')

model = torch.load('model/pytorch_resnet50.pth',map_location ={'cuda:0':'cuda:1'})

注意读取模型时,是设置torch.load中读取位置,而不是model.load_state_dict。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935117.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号