Debian 8.10 Jessie下TensorFlow-GPU 1.5.0依赖CUDA问题求助
解决TensorFlow GPU 1.5.0找不到libcublas.so.9.0的问题
首先得明确:TensorFlow 1.5.0的官方预编译GPU包是针对CUDA 9.0编译的,所以它会默认查找CUDA 9.0的库文件,而你的系统只有CUDA 8.0,这就是报错的核心原因。
因为你没有root权限,下面给你几个可行的解决办法,按操作复杂度从低到高排序:
办法一:安装适配CUDA 8.0的TensorFlow版本
这是最省心的方案,TensorFlow 1.4.x系列完全支持CUDA 8.0(对应cuDNN 6.0或7.0)。你只需要卸载现有的TensorFlow 1.5.0,然后安装1.4.1版本即可:
# 卸载现有版本 pip3 uninstall tensorflow-gpu # 安装适配CUDA 8.0的版本 pip3 install --user tensorflow-gpu==1.4.1
安装完成后,重启IPython Notebook再尝试import tensorflow as tf,应该就能正常加载了。
办法二:手动解压CUDA 9.0到用户目录(无需root)
如果你一定要用TensorFlow 1.5.0,可以下载CUDA 9.0的压缩包,解压到自己的用户目录,通过环境变量让TensorFlow找到它:
- 下载CUDA 9.0的runfile安装包(比如
cuda_9.0.176_384.81_linux.run,选择对应你Debian系统的版本) - 执行命令将安装包解压到用户目录(比如
$HOME/cuda9):./cuda_9.0.176_384.81_linux.run --extract=$HOME/cuda9 - 修改
~/.bashrc文件,添加环境变量:echo 'export PATH=$HOME/cuda9/cuda/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=$HOME/cuda9/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc - 生效环境变量:
source ~/.bashrc
注意:如果是用IPython Notebook,需要重启Notebook服务才能加载新的环境变量;或者在Notebook的第一个代码单元格里手动设置:
import os os.environ['LD_LIBRARY_PATH'] = f"{os.environ['HOME']}/cuda9/cuda/lib64:" + os.environ.get('LD_LIBRARY_PATH', '')
这种方式不会影响系统全局的CUDA配置,只有你的用户会话会使用这个解压的CUDA 9.0。
办法三:从源码编译TensorFlow 1.5.0(适配CUDA 8.0)
这个方案操作复杂度最高,适合必须使用1.5.0且上述两种方案都不可行的情况:
- 安装编译依赖:比如Bazel(需适配TensorFlow 1.5.0,推荐0.8.0版本)、Python开发包、Git等
- 克隆TensorFlow 1.5.0的源码:
git clone -b v1.5.0 https://github.com/tensorflow/tensorflow.git - 进入源码目录,执行配置命令:
配置过程中,会提示你输入CUDA路径(填cd tensorflow ./configure/usr/local/cuda-8.0)、cuDNN版本等信息,按照实际情况填写即可。 - 编译生成whl包:
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package - 生成pip包并安装:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg pip3 install --user /tmp/tensorflow_pkg/tensorflow_gpu-1.5.0-cp34-cp34m-linux_x86_64.whl
编译过程可能需要较长时间,且依赖较多,所以优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

