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处理json数据中的中文
Mar 06 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
python pygame模块编写飞机大战
Nov 20 Python
python+flask实现API的方法
Nov 21 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
基于python实现KNN分类算法
Apr 23 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
python解析命令行参数的三种方法详解
Nov 29 Python
python opencv如何实现图片绘制
Jan 19 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
Python读写Excel表格的方法
Mar 02 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 图像处理类1
2009/06/15 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
python进阶教程之词典、字典、dict
2014/08/29 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
django框架两个使用模板实例
2019/12/11 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
企业管理专业个人求职信范文
2013/09/24 职场文书
上班上网检讨书
2014/01/29 职场文书
校园安全教育广播稿
2014/02/17 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
明星邀请函
2015/02/02 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis