TensorFlow-GPU 1.8.0导入报错:无法找到libcudnn.so.7文件
解决TensorFlow-GPU 1.8.0导入时找不到
libcudnn.so.7的问题 我之前也碰到过一模一样的情况——明明文件就在/usr/local/cuda/lib64里,但TensorFlow就是找不到。这种问题大概率是库路径未正确加载或者Virtualenv的环境配置没跟上,下面是几个最可能的原因和对应的解决办法:
1. 系统动态链接库路径未包含CUDA的lib64目录
Linux系统会从/etc/ld.so.conf及其子配置文件中查找动态链接库,如果没把/usr/local/cuda/lib64加入到这个路径,系统启动时就不会加载该目录下的库,自然找不到libcudnn.so.7。
解决步骤:
- 新建CUDA专属的配置文件:
sudo nano /etc/ld.so.conf.d/cuda.conf - 在文件中添加一行:
/usr/local/cuda/lib64 - 保存退出后,更新动态链接库缓存:
sudo ldconfig
2. 当前用户的LD_LIBRARY_PATH环境变量未配置
即使系统层面配置了库路径,如果当前用户的LD_LIBRARY_PATH没包含CUDA的lib64目录,Virtualenv启动时也可能无法继承这个路径,导致TensorFlow找不到库。
解决步骤:
- 编辑你的bash配置文件(比如
~/.bashrc):nano ~/.bashrc - 在文件末尾添加环境变量配置:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH - 让配置立即生效:
source ~/.bashrc - 重启终端或重新激活Virtualenv环境,再尝试导入TensorFlow。
3. Virtualenv的环境隔离导致系统库无法访问
Virtualenv默认会隔离部分系统环境变量,可能LD_LIBRARY_PATH没有被传递到虚拟环境中,使得TensorFlow无法读取到CUDA的库文件。
解决办法:
- 如果你是新建Virtualenv环境,可以加上
--system-site-packages参数,让虚拟环境继承系统的库路径:virtualenv --system-site-packages tf_gpu_env - 如果你已经创建好环境,可以手动修改虚拟环境的激活脚本:
进入你的Virtualenv目录(比如tf_gpu_env/bin),编辑activate文件,在末尾添加:
保存后重新激活环境:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHsource tf_gpu_env/bin/activate
4. 文件权限或符号链接异常
虽然你确认文件存在,但可能libcudnn.so.7的权限不足,或者它的符号链接指向的实际文件不存在(比如安装CUDNN时没正确创建链接)。
检查与修复步骤:
- 查看文件权限:
确保当前用户有读权限(权限位包含ls -l /usr/local/cuda/lib64/libcudnn.so.7r,比如-rwxr-xr-x),如果没有则修改权限:sudo chmod +r /usr/local/cuda/lib64/libcudnn.so.7 - 检查符号链接有效性:
libcudnn.so.7通常是指向具体版本文件(比如libcudnn.so.7.0.5)的符号链接,用以下命令查看:
如果显示ls -l /usr/local/cuda/lib64/libcudnn.so.7broken link,说明链接失效,手动重新创建:
完成后运行cd /usr/local/cuda/lib64 sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7 sudo ln -s libcudnn.so.7 libcudnn.sosudo ldconfig更新缓存。
内容的提问来源于stack exchange,提问作者Ikhwan
相关产品推荐
相关产品推荐

