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运算符重载用法实例
May 28 Python
python距离测量的方法
Mar 06 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
python处理csv中的空值方法
Jun 22 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
Python如何读写二进制数组数据
Aug 01 Python
Pycharm Git 设置方法
Sep 15 Python
如何利用python读取micaps文件详解
Oct 18 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
python UIAutomator2使用超详细教程
Feb 19 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
使用python 获取进程pid号的方法
2014/03/10 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
NULL是什么,它是怎么定义的
2015/05/09 面试题
成功的餐厅经营创业计划书
2014/01/15 职场文书
上党课的心得体会
2014/09/02 职场文书
2015年实习单位评语
2015/03/25 职场文书
单位推荐信范文
2015/03/27 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
实习感想范文
2015/08/10 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
python中redis包操作数据库的教程
2022/04/19 Python