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中的自定义函数学习笔记
Sep 23 Python
详解在Python中处理异常的教程
May 24 Python
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
python Tornado框架的使用示例
Oct 19 Python
Python实现视频中添加音频工具详解
Dec 06 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输出一个等腰三角形的方法
2015/05/12 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python基本语法经典教程
2016/03/11 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Python 如何展开嵌套的序列
2020/08/01 Python
学习Python需要哪些工具
2020/09/04 Python
关于运动会广播稿50字
2014/10/18 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
小学生交通安全寄语
2015/02/27 职场文书
篮球赛新闻稿
2015/07/17 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
2019安全宣传标语大全
2019/08/14 职场文书