Pytorch 解决自定义子Module .cuda() tensor失败的问题


Posted in Python onJune 23, 2020

最近在刚从tensorflow转入pytorch,对于自定义的nn.Module 碰到了个问题,即使把模组 modle=Model().cuda(),里面的子Module的parameter都没有被放入cuda,导致输入是torch.cuda.FloatTensor,但是比如CNN的weight却还是torch.FloatTensor

(当然最粗暴的方法就是直接在子模组里面都用了 .cuda()

但是问题并不在那,可能是调用子模组的时候,存在某些错误,导致父模组没有把子模组的parameter注册到pytorch中。

而我遇到的错误就是,使用list来存放子模组的对象,导致list中的parameter没有注册。

解决方案就是 使用nn.ModuleList()这个封装的函数 来替换list() / []

参考这里

补充知识:关于Pytorch框架下报错CUDA驱动版本不满足CUDA运行版本——一种可能的原因及解决办法

运行Pytorch代码的时候遇到:

RuntimeError: cuda runtime error (35) : CUDA driver version is insufficient for CUDA runtime version at /pytorch/aten/src/THC/THCGeneral.cpp:74

可能原因:每一个pytorch版本都有对应的cuda版本,可能是在安装pytorch的时候,选择的pytorch版本所对应的版本cuda版本与本机所安装的cuda版本不相符。

Pytorch 解决自定义子Module .cuda() tensor失败的问题

check步骤:

#查看pytorch版本

import torch

torch.__version__

#查看pytorch版本对应的cuda版本

torch.version.cuda

#查看cuda是否可用

torch.cuda.is_available()

#查看Linux server安装的cuda版本

#切换到/usr/local/cuda/samples/1_Utilities/deviceQuery然后运行

./deviceQuery

出现类似以下信息:

./deviceQuery Starting...
 CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX TITAN Black"
 CUDA Driver Version / Runtime Version  8.0 / 8.0
 CUDA Capability Major/Minor version number: 3.5
 Total amount of global memory:   6080 MBytes (6375407616 bytes)
 (15) Multiprocessors, (192) CUDA Cores/MP: 2880 CUDA Cores
 GPU Max Clock rate:    1072 MHz (1.07 GHz)
 Memory Clock rate:    3500 Mhz
 Memory Bus Width:    384-bit
 L2 Cache Size:     1572864 bytes
 Maximum Texture Dimension Size (x,y,z)  1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
 Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
 Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
 Total amount of constant memory:  65536 bytes
 Total amount of shared memory per block: 49152 bytes
 Total number of registers available per block: 65536
 Warp size:     32
 Maximum number of threads per multiprocessor: 2048
 Maximum number of threads per block:  1024
 Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
 Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
 Maximum memory pitch:    2147483647 bytes
 Texture alignment:    512 bytes
 Concurrent copy and kernel execution:  Yes with 1 copy engine(s)
 Run time limit on kernels:   No
 Integrated GPU sharing Host Memory:  No
 Support host page-locked memory mapping: Yes
 Alignment requirement for Surfaces:  Yes
 Device has ECC support:   Disabled
 Device supports Unified Addressing (UVA): Yes
 Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
 Compute Mode:
 < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX TITAN Black
Result = PASS

比对前后两个cuda版本是否一致,如果不一致,就需要卸载并安装与本机cuda版本相同的pytorch(当然应该也可以改本机的cuda版本,只不过相对比较麻烦)

pip3 uninstall pytorch
pip3 install [pytorch-version-link]

打开链接,选择合适版本版本,右键复制链接地址,替换上面的pytorch-version-link,执行命令就行。

这样应该就可以解决了。

以上这篇Pytorch 解决自定义子Module .cuda() tensor失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python批量导出导入MySQL用户的方法
Nov 15 Python
最基础的Python的socket编程入门教程
Apr 23 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
python针对excel的操作技巧
Mar 13 Python
python 字符串和整数的转换方法
Jun 25 Python
了解不常见但是实用的Python技巧
May 23 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python数据库封装实现代码示例解析
Sep 05 Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 Python
python pyhs2 的安装操作
Apr 07 Python
利用Python实现模拟登录知乎
May 25 Python
python如何查看安装了的模块
Jun 23 #Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 #Python
Python dict的常用方法示例代码
Jun 23 #Python
Python3 webservice接口测试代码详解
Jun 23 #Python
python和JavaScript哪个容易上手
Jun 23 #Python
pytorch 查看cuda 版本方式
Jun 23 #Python
Spring @Enable模块驱动原理及使用实例
Jun 23 #Python
You might like
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
实例讲解PHP表单处理
2019/02/15 PHP
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python常用小技巧总结
2015/06/01 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
团委书记的竞聘演讲稿
2014/04/24 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书