为何CUDA在PyTorch可用却突然无法支持TensorFlow?
问题原因分析
咱们先把这个报错的核心逻辑理清楚:
- 你用的
tensorflow-gpu v1.12.0是硬性绑定CUDA 9.0核心库的,它启动时会优先查找libcublas.so.9.0这类9.0版本的库文件,但你的Python 2.7环境里既没有系统级的CUDA 9.0路径,也没让它找到正确的依赖库位置。 - 虽然你这个环境里装了
cudatoolkit 9.2,但TensorFlow 1.12.0并不兼容9.2版本,所以根本不会去用这个版本的库;另外系统里nvcc -V显示的是9.1版本,还没有标准的/usr/local/cuda目录,说明CUDA不是系统全局安装的,各个conda环境的CUDA依赖是独立管理的。 - 至于Python 3.6里的PyTorch能正常跑,是因为它的conda环境自带了
cudatoolkit 9.0,而且PyTorch的库查找逻辑会优先加载自己环境内的CUDA依赖,不需要依赖系统级的配置,所以能正常调用GPU。
可行解决办法
这里给你三个不同方向的方案,你可以根据自己的操作习惯选:
方案一:临时/永久添加CUDA 9.0库路径到Python 2.7环境
既然你的PyTorch环境里已经有可用的CUDA 9.0库,直接把它的路径加到Python 2.7环境的库搜索路径里就行:
- 先找到你PyTorch 3.6环境的安装路径,一般是
~/anaconda3/envs/你的PyTorch环境名/lib(如果是miniconda就是~/miniconda3/envs/...) - 在启动Python 2.7环境前,执行这条命令临时生效:
如果想要永久生效,把这条命令追加到你的export LD_LIBRARY_PATH=~/anaconda3/envs/你的PyTorch环境名/lib:$LD_LIBRARY_PATH~/.bashrc或者~/.profile文件里,下次登录就自动生效了。
方案二:升级TensorFlow到适配CUDA 9.1的版本
系统里的nvcc是9.1版本,你可以把Python 2.7环境里的TensorFlow换成支持CUDA 9.1的版本:
- TensorFlow 1.13.1是第一个稳定支持CUDA 9.1的1.x版本,执行以下命令替换:
这个版本和你现有的pip uninstall tensorflow-gpu -y pip install tensorflow-gpu==1.13.1cudnn 7.2.1兼容性很好,不需要额外调整cudnn。
方案三:在Python 2.7环境里重新安装适配的CUDA依赖
直接在Python 2.7的conda环境里安装TensorFlow 1.12.0要求的CUDA 9.0和对应cudnn:
conda install cudatoolkit=9.0 cudnn=7.0.5 -c conda-forge
这里选cudnn 7.0.5是因为它是TensorFlow 1.12.0官方推荐的、适配CUDA 9.0的稳定版本,安装完成后重启环境,TensorFlow就能直接加载自己环境内的库了。
内容的提问来源于stack exchange,提问作者Hongcheng Wang
相关产品推荐
相关产品推荐

