不懂怎么解决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没有注册。
凯发k8天生赢家一触即发的解决方案就是 使用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失败问题内容对大家有帮助,同时也希望大家多多支持本站,关注本站行业资讯频道,遇到问题就找本站,详细的解决方法等着你来学习!