Pytorch 解决自定义子Module .cuda() tensor失败的问题

最近在刚从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版本不相符。

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失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Pytorch 使用不同版本的cuda的方法步骤

    由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验.在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息.由于 Pytorch 和 cuda 版本的更新较快,可能出现程序的编译和运行需要之前版本的 Pytorch 和 cuda 进行运行环境支持的情况.比如笔者遇到的某个项目中编写了 CUDAExtension 拓展,而其中使用的 cuda 接口函数在新版本的 cuda 中做了修改,使得

  • 浅谈pytorch、cuda、python的版本对齐问题

    在使用深度学习模型训练的过程中,工具的准备也算是一个良好的开端吧.熟话说完事开头难,磨刀不误砍柴工,先把前期的问题搞通了,能为后期节省不少精力. 以pytorch工具为例: pytorch版本为1.0.1,自带python版本为3.6.2 服务器上GPU的CUDA_VERSION=9000 注意:由于GPU上的CUDA_VERSION为9000,所以至少要安装cuda版本>=9.0,虽然cuda=7.0~8.0也能跑,但是一开始可能会遇到各种各样的问题,本人cuda版本为10.0,安装cuda的

  • 在pytorch中为Module和Tensor指定GPU的例子

    pytorch指定GPU 在用pytorch写CNN的时候,发现一运行程序就卡住,然后cpu占用率100%,nvidia-smi 查看显卡发现并没有使用GPU.所以考虑将模型和输入数据及标签指定到gpu上. pytorch中的Tensor和Module可以指定gpu运行,并且可以指定在哪一块gpu上运行,方法非常简单,就是直接调用Tensor类和Module类中的 .cuda() 方法. import torch from PIL import Image import torch.nn as

  • pytorch常见的Tensor类型详解

    Tensor有不同的数据类型,每种类型分别有对应CPU和GPU版本(HalfTensor除外).默认的Tensor是FloatTensor,可通过torch.set_default_tensor_type修改默认tensor类型(如果默认类型为GPU tensor,则所有操作都将在GPU上进行). Tensor的类型对分析内存占用很有帮助,例如,一个size为(1000,1000,1000)的FloatTensor,它有1000*1000*1000=10^9个元素,每一个元素占用32bit/8=

  • Pytorch 解决自定义子Module .cuda() tensor失败的问题

    最近在刚从tensorflow转入pytorch,对于自定义的nn.Module 碰到了个问题,即使把模组 modle=Model().cuda(),里面的子Module的parameter都没有被放入cuda,导致输入是torch.cuda.FloatTensor,但是比如CNN的weight却还是torch.FloatTensor (当然最粗暴的方法就是直接在子模组里面都用了 .cuda() 但是问题并不在那,可能是调用子模组的时候,存在某些错误,导致父模组没有把子模组的parameter注

  • PyTorch 解决Dataset和Dataloader遇到的问题

    今天在使用PyTorch中Dataset遇到了一个问题.先看代码 class psDataset(Dataset): def __init__(self, x, y, transforms = None): super(Dataset, self).__init__() self.x = x self.y = y if transforms == None: self.transforms = Compose([Resize((224, 224)), ToTensor()]) else: sel

  • 解决python3在anaconda下安装caffe失败的问题

    Python 跟 Python3 完全就是两种语言 1. import caffe FAILED 环境为 Ubuntu 16 cuda 8.0 NVIDIA 361.77 Anaconda2.昨天莫名其妙Caffe不能用了: >>> import caffe Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/duchen

  • 解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)

    问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得问题解决!!! 真的看着都难受, 但是, 终于, 还是让我搞定了,这次让我汇总所有最有可能解决这依赖问题的方法,下次遇到这种问题, 真的要说再见了 , 话不多开,开货!!!方案1:(本人平时遇到这问题的常规操作) 当一开始遇到导入的依赖报红了,直接把那段刚导入的对应依赖删了,然后又重新导入,它自动会

  • 解决vscode中golang插件依赖安装失败问题

    vscode中安装ms-vscode.go插件后可以开启对go语言的支持,ms-vscode.go插件需要依赖一些工具,安装完成后提示 gocode go-outline go-symbols guru gorename gocode-gomod goreturns golint Installing github.com/ramya-rao-a/go-outline FAILED 由于网络原因,一些依赖工具无法正常安装,需要进行手动安装. 以下为手动安装的工具的步骤: 在%GOPATH%\sr

  • 解决 Golang VS Code 插件下载安装失败的问题

    最近开始学Go语言,但是在使用VS Code 编写Go的时候出现了插件无法下载的问题.最初我的解决办法也是从github下载再安装,但是我并不喜欢这种做法,因为我要在多台pc上使用VS Code编写Go,所以我觉要重复多次很麻烦,而且插件的安装也非常麻烦,我曾经一度想放弃学习Go语言,没错因为安装插件很麻烦.在经过我多次的查找最终找到了http://goproxy.cn/,这是Go的国内镜像,使用了这个就可以结局Go插件无法下载的问题. (http://goproxy.cn/ 文档简介,方便以后

  • 将pytorch的网络等转移到cuda

    神经网络一般用GPU来跑,我们的神经网络框架一般也都安装的GPU版本,本文就简单记录一下GPU使用的编写. GPU的设置不在model,而是在Train的初始化上. 第一步是查看是否可以使用GPU self.GPU_IN_USE = torch.cuda.is_available() 就是返回这个可不可以用GPU的函数,当你的pytorch是cpu版本的时候,他就会返回False. 然后是: self.device = torch.device('cuda' if self.GPU_IN_USE

  • IOS 解决推送本地国际化 loc-key 本地化失败的问题

    正文 一.准备 推送本地国际化官方文档: {"aps":{"alert":{"title":"Shou","loc-key":"notification_push_live","loc-args": ["over140","broadcast test"]},"badge":0,"sound&quo

  • 解决Elasticsearch因jdk版本问题启动失败的问题

    Elasticsearch2.4版本,在Linux机器上启动报如下错误: Exception in thread "main" java.lang.RuntimeException: Java version: Oracle Corporation 1.7.0_45 [OpenJDK 64-Bit Server VM 24.45-b08] suffers from critical bug https://bugs.openjdk.java.net/browse/JDK-8024830

随机推荐