在Ubuntu16.04上编译安装GPU版TensorFlow
这段时间一直在学习TensorFlow,刚好自己有台带NVIDIA显卡的笔记本,于是尝试着在自己电脑上安装,电脑的配置如下:
1、CUDA和cuDNN
从NVIDIA官网下载CUDA和cuDNN,然后安装到默认路径,下载cuDNN可能需要注册,注册一个官网账号下载即可。
CUDA的默认安装位置是/usr/local/cuda (该目录是一个软连接,指向的真实目录是/usr/local/cuda8.0)
cuDNN下载之后解压,将cuDNN复制到/usr/local/cuda/目录之下,方便程序调用
2、Anaconda3
官网上下载安装包,然后使用命令安装
sudo bash ./Anaconda3-4.3.1-Linux-x86_64.sh
一直按enter键,输入yes继续
然后安装程序提示安装位置,默认是home目录 这里我使用/usr/local/目录
因为我想用anaconda自带的Python替代系统默认的Python版本,所以这里输入yes并回车,安装程序会在~/.bashrc文件末尾添加环境变量,将bin目录添加到PATH中去
至此,anaconda环境安装完成 可以查看一下系统Python版本,看是否替换为anaconda提供的版本
安装完成后修改anaconda3目录的权限,使其属于当前用户(修改权限也是为了方便当前用户使用,个人觉得anaconda3安装在home下更方便些)
sudo chown -R fish /usr/local/anaconda3/
3、TensorFlow源码安装
TensorFlow使用Bazel构建,在安装TF之前需要安装bazel,具体安装方法参考http://blog.csdn.net/u010510350/article/details/52247972
从github上下载源码包https://github.com/tensorflow/tensorflow/archive/v1.1.0.tar.gz
解压然后configure
tar -zxvf ./tensorflow-1.1.0.tar.gz
cd tensorflow-1.1.0/
./configure
开始下载依赖包,下载完成后configure过程结束,下面开始编译过程
bazel build --copt=-march=native -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
经过漫长的时间编译完成后,生成pip安装包
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
最后使用pip命令安装tensorflow
pip install /tmp/tensorflow_pkg/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl
4、测试安装结果
运行源码中的示例代码,手写数字识别
python tensorflow/examples/tutorials/mnist/mnist_softmax.py
运行结果如上,可以看到程序使用显卡计算,测试成功。
5、安装过程中出现的问题
如果运行时出现
ImportError: /usr/local/anaconda3/bin/../lib/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
是因为Anaconda3中自带的libstdc++库文件比较老
使用命令查看
strings /usr/local/anaconda3/lib/libstdc++.so.6 | grep CXXABI
发现没有CXXABI_1.3.8,查看anaconda中的库文件
两个软连接指向了libstdc++.so.6.0.19。
我的系统是Ubuntu16.04,因此在/usr/lib/x86_64-linux-gnu/目录中有libstdc++.so.6.0.21,拷贝系统目录中的库文件到anaconda的lib目录中,并重新建立软连接
cd /usr/local/anaconda3/lib/
ln -sf ./libstdc++.so.6.0.21 ./libstdc++.so
ln -sf ./libstdc++.so.6.0.21 ./libstdc++.so.6
问题解决