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 相关文章推荐
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
python的变量和简单数字类型详解
Sep 15 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 代码优化之经典示例
2011/03/24 PHP
PHP 验证码的实现代码
2011/07/17 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
utf8的编码算法 转载
2006/12/27 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
vue实现分页加载效果
2019/12/24 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
Python中的__SLOTS__属性使用示例
2015/02/18 Python
python查询sqlite数据表的方法
2015/05/08 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
Python制作词云的方法
2018/01/03 Python
Python OpenCV获取视频的方法
2018/02/28 Python
Python线程之定位与销毁的实现
2019/02/17 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
python操作toml文件的示例代码
2020/11/27 Python
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
生物制药毕业生自荐信
2013/10/16 职场文书
学生手册家长评语
2014/02/10 职场文书
英文求职信写作小建议
2014/02/16 职场文书
大学生逃课检讨书
2015/05/04 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
Java 多线程并发FutureTask
2022/06/28 Java/Android