pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作


Posted in Python onMay 25, 2020

问题描述

有时在加载已训练好的模型时,会出现 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和cpu互转操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
python3实现windows下同名进程监控
Jun 21 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
学习和使用python的13个理由
Jul 30 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
python程序 创建多线程过程详解
Sep 23 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
python爬取招聘要求等信息实例
Nov 20 Python
python中实现词云图的示例
Dec 19 Python
基于pandas向csv添加新的行和列
May 25 #Python
Python如何把十进制数转换成ip地址
May 25 #Python
tensorflow模型转ncnn的操作方式
May 25 #Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 #Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 #Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 #Python
tensorflow pb to tflite 精度下降详解
May 25 #Python
You might like
Zend的MVC机制使用分析(二)
2013/05/02 PHP
curl和libcurl的区别简介
2015/07/01 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
php中and 和 &&出坑指南
2018/07/13 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
详解Python if-elif-else知识点
2018/06/11 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
python绘制动态曲线教程
2020/02/24 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
办公室文秘岗位职责
2013/11/15 职场文书
十佳护士获奖感言
2014/02/18 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
简单的辞职信模板
2015/05/12 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android