pytorch中gpu与gpu、gpu与cpu在load时是怎么相互转化的

这篇文章主要讲解了pytorch中gpu与gpu、gpu与cpu在load时是怎么相互转化的,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

问题描述

有时在加载已训练好的模型时,会出现 out of memory 的错误提示,但仔细检测使用的GPU卡并没有再用且内存也没有超出。

经查阅发现原来是训练模型时使用的GPU卡和加载时使用的GPU卡不一样导致的。个人感觉,因为pytorch的模型中是会记录有GPU信息的,所以有时使用不同的GPU加载时会报错。

解决方法

gpu之间的相互转换。即,将训练时的gpu卡转换为加载时的gpu卡。

torch.load('modelparameters.pth', map_location={'cuda:1':'cuda:0'}) # gpu 1 --> gpu 0

当然,你也可以直接将加载模型时使用的gpu卡改为和训练时的一样。但在多人使用一个服务器时,你想用的gpu卡已被使用,就需按上面方法转换gpu。

拓展

cpu --> cpu 或 gpu --> gpu

checkpoint = torch.load('modelparameters.pth')
model.load_state_dict(checkpoint)

cpu --> gpu 0

torch.load('modelparameters.pth', map_location=lambda storage, loc: storage.cuda(0))

gpu --> cpu

torch.load('modelparameters.pth', map_location=lambda storage, loc: storage)

gpu 1 --> gpu 0

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

补充知识:pytorch model.cuda()花费时间很长

如果pytorch在进行model.cuda()操作需要花费的时间很长,长到你怀疑GPU的速度了,那就是不正常的。

如果你用的pytorch版本是0.3.0,升级到0.3.1就好了!

看完上述内容,是不是对pytorch中gpu与gpu、gpu与cpu在load时是怎么相互转化的有进一步的了解,如果还想学习更多内容,欢迎关注本站行业资讯频道。

相关推荐:

如何在 PyTorch 中正确加载 EMNIST 数据集

PyTorch官方torchvision.datasets.EMNIST在某些版本中存在下载链接失效或校验失败问题,导致“Filenotfoundorcorrupted”错误;本文提供手动下载+本地路径加载的可靠解决方案,并附完整代码示例与关键注意事项。 pytorch官方`torchvision....

PyTorch中怎么加载本地权重文件_使用torch.load读取pth文件

最常见原因是相对路径错误,应使用绝对路径并检查文件存在性;文件损坏或格式不符会导致EOF或UnpicklingError;键名不匹配需核对并清洗前缀;跨设备加载必须指定map_location。 torch.load读取.pth文件时路径不对或报错OSError:Nosuchfileordirect...