尊龙凯时网址

怎么解决pytorch 自定义子module .cuda() tensor失败问题 -尊龙凯时网址

2024-01-24

不懂怎么解决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失败问题内容对大家有帮助,同时也希望大家多多支持本站,关注本站行业资讯频道,遇到问题就找本站,详细的解决方法等着你来学习!

网站地图