tensorflow+cuda+cudnn+keras遇到的一些坑。

最近配置RNN深度学习的时候装环境遇到不少错误如下:

ImportError: cannot import name ‘Dense’ from ‘keras.layers’ (unknown location)

DNN library is not found.

错误的解决方法,简单来说就是tensorflow和cuda以及cudnn,keras还有nvidia驱动之间的版本要对应,参考这个

VersionPython versionCompilerBuild toolscuDNNCUDA
tensorflow-2.13.03.8-3.11Clang 16.0.0Bazel 5.3.08.611.8
tensorflow-2.12.03.8-3.11GCC 9.3.1Bazel 5.3.08.611.8
tensorflow-2.11.03.7-3.10GCC 9.3.1Bazel 5.3.08.111.2

因此安装的时候最好指定版本安装:

pip install tensorflow==2.11.0
pip install keras==2.11.0 #keras与tensorflow必须一样

驱动则是安装cuda的时候会自带。安装自带版本即可。
但是也会存在一些问题,就是电脑上同时安装了多个CUDA版本的库,同时也安装了多个cudnn的库,导致即使安装了正确的库也没有办法正确识别。
如:

loaded runtime cudnn library 8.0.5 but source was compiled with 8.1.0

这个时候就要使用ldconfig -v|grep cudnn 来查看系统里具体链接的版本:

 libcudnn.so.8 -> libcudnn.so.8.1.0
  libcudnn.so.8 -> libcudnn.so.8.0.5

如上所示是既有链接到8.1.0的也有链接到8.0.5的。
这个时候就要去看看:

cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
ls /etc/ld.so.conf.d/
cuda-11-0.conf fakeroot-x86_64-linux-gnu.conf x86_64-linux-gnu.conf 
cuda-11-1.conf i386-linux-gnu.conf 
cuda-11-2.conf libc.conf

可以看到有很多conf,删掉其中不需要的cuda-11-1.conf和cuda-11-0.conf 然后重新执行ldconfig命令链接,之后使用ldconfig -v|grep cudnn确保链接到8.1.0。
有时候会遇到这样的问题

Failed to call ThenRnnForward with model config: [rnn_mode,
rnn_input_mode, rnndirection_mode]:
3,0,0,[num_layers,input_size,num_units,dir_count,max_seq_length,batch_size,
cell_num_units]: [1,96,32,1,83,128,0]

这个是因为安装了8.1.1版本的cudnn而tensorflow 2.11.0匹配的是 8.1.0。尽管根据semantic version的定义相差0.0.1只是补丁的区别,但实际上也会出现问题。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值