Python3.6.4环境Anaconda装Tensorflow1.6.0 GPU版导入报错求助
libcudnn.so.7找不到的问题 我之前在Ubuntu上用Anaconda配置TensorFlow GPU的时候也碰到过一模一样的问题,CUDA和cuDNN的路径配置真的很容易踩坑。结合你的环境参数(Ubuntu 16.04、CUDA 9.0.176、cuDNN 7.1.1、TensorFlow 1.6.0),给你几个针对性的排查和解决步骤:
第一步:确认cuDNN文件是否存在
先去CUDA 9.0的默认安装目录/usr/local/cuda-9.0下检查cuDNN的库文件,执行命令:ls /usr/local/cuda-9.0/lib64/libcudnn*.so*如果能看到
libcudnn.so.7.1.1(对应你的cuDNN版本),说明文件没问题,只是软链接或路径识别的问题;如果看不到,那大概率是cuDNN没安装到位,需要重新解压cuDNN的压缩包,把include和lib64里的文件分别复制到/usr/local/cuda-9.0/include和/usr/local/cuda-9.0/lib64目录下。第二步:修复
libcudnn.so.7的软链接
TensorFlow 1.6.0需要的是libcudnn.so.7这个软链接,指向实际的libcudnn.so.7.1.1文件。如果上面的命令里只有libcudnn.so.7.1.1和libcudnn.so(可能指向错误版本),手动创建软链接:sudo ln -s /usr/local/cuda-9.0/lib64/libcudnn.so.7.1.1 /usr/local/cuda-9.0/lib64/libcudnn.so.7执行完后用下面的命令确认软链接是否正确:
ls -l /usr/local/cuda-9.0/lib64/libcudnn.so.7输出应该显示它指向
libcudnn.so.7.1.1。第三步:确保CUDA库路径被系统和Anaconda环境识别
有时候系统的库路径没包含CUDA的lib64目录,或者Anaconda环境没继承这个路径:- 临时生效(当前终端):执行下面的命令添加路径,然后激活你的Anaconda环境再测试:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH - 永久生效:编辑
~/.bashrc文件(如果用zsh就编辑~/.zshrc),添加两行配置:
保存后执行export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH export CUDA_HOME=/usr/local/cuda-9.0source ~/.bashrc让配置生效,重启终端后激活环境再尝试导入TensorFlow。
- 临时生效(当前终端):执行下面的命令添加路径,然后激活你的Anaconda环境再测试:
第四步:排查Anaconda环境的路径覆盖问题
Anaconda环境有时候会自带一些库路径,可能屏蔽了系统的CUDA库。激活你的环境后,先查看当前的库路径:echo $LD_LIBRARY_PATH确认
/usr/local/cuda-9.0/lib64在输出里。如果不在,可以给这个环境单独配置路径:- 创建环境的激活脚本目录:
mkdir -p ~/anaconda3/envs/你的环境名/etc/conda/activate.d - 创建
env_vars.sh文件:nano ~/anaconda3/envs/你的环境名/etc/conda/activate.d/env_vars.sh - 添加内容:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH - 保存退出,下次激活环境时会自动加载这个路径。
- 创建环境的激活脚本目录:
第五步:验证TensorFlow的依赖匹配
虽然你的版本理论上兼容(TensorFlow 1.6.0明确支持CUDA 9.0和cuDNN 7.x),但可以用ldd命令检查TensorFlow的依赖:
先找到环境里TensorFlow的核心库路径:find ~/anaconda3/envs/你的环境名 -name "libtensorflow_framework.so"然后用
ldd检查cuDNN依赖:ldd 上面找到的完整路径 | grep cudnn如果显示
libcudnn.so.7 => not found,那还是路径问题;如果能正确找到路径,那可以尝试重新安装TensorFlow(用pip install --force-reinstall tensorflow-gpu==1.6.0)。
内容的提问来源于stack exchange,提问作者vvvvv

