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中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
python实现指定ip端口扫描方式
Dec 17 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
Django设置Postgresql的操作
May 14 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
如何使用flask将模型部署为服务
May 13 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 empty()与isset()区别的详细介绍
2013/06/17 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
laravel请求参数校验方法
2019/10/10 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
Python正则表达式教程之二:捕获篇
2017/03/02 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
拾金不昧的表扬信
2014/01/16 职场文书
品德评语大全
2014/05/05 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
终止合同协议书范本
2016/03/22 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang