注:本文非标准教程,仅是总结个人学习过程,可能存在纰漏,如有错误之处欢迎留言告知,非常感谢
本文部分文字摘自黄文坚、唐源所编著的《Tensorflow实战》
Tensorflow最早由Google Brain的研究员和工程师开发,设计初衷是加速机器学习的研究,并快速地将研究原型转化为产品。
Tensorflow既是一个实现机器学习算法的接口,同时也是执行机器学习算法的框架。
它前端支持Python、C++、Go、Java等多种开发语言,后端使用C++、CUDA等写成。
本文开发环境ubuntu16.04+Python3.5
一、安装Anaconda
1.在Anaconda官网:
https://www.anaconda.com/download/#linux
下载Anaconda3-4.2.0版,4.2.0版是对应的python3.5版本,最新的是python3.6版本
2.下载好anaconda后再下载目录执行命令:
$ bash Anaconda3-4.2.0-Linux-x86_64.sh
3.接下来的安装提示按回车进入下一步,按q跳过License文档,最后输入yes确认
接下来让我们输入安装路径,没特殊情况直接回车默认路径就好
4.安装完成后程序提示我们是否把Anaconda3的binary路径加入到.bashrc,建议添加,这样以后python和ipython命令就会自动使用anaconda Python3.5环境了
二、安装Nvidia driver
查看显卡型号
sudo lshw -numeric -C display
可以看到我的显卡型号是GeForce 940M
去http://www.nvidia.com/Download/index.aspx 搜索你的显卡需要的驱动型号
我的电脑对应的版本是
可以看到我的显卡对应的驱动型号是384.111
为了再次确认,使用命令查看我可以使用的显卡驱动:
ubuntu-drivers devices
可以看到我适用的显卡驱动的确是384
通过命令下载
sudo apt-get install nvidia-384 // 自己的版本
安装很慢的话可以去System->settings->Software&Updates更换源为阿里云
然后在执行命令
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev
重启电脑就完成了,可以在dash中搜索到NVIDIA X Server
点开应该是这个样子的
我之前装的不对,是这个样子的:
左边明显少了很多东西,然后实验室的小伙伴找到的这篇文章给我装驱动的帮助很大:https://zhuanlan.zhihu.com/p/25193943 这里面包括禁用可能导致问题的开源驱动、卸载已有驱动等的方法都很全。(需要注意的是不要盲目复制安装命令,注意将375要改成适配自己显卡的版本,例如我是384)
三、安装CUDA和cuDNN
1.在安装tensorflow前我们需要先安装显卡驱动、CUDA和cuDNN
(1)CUDA是NVIDIA推出的使用GPU资源进行通用计算的SDK,CUDA的安装包里一般集成了显卡驱动,
因此可以直接去官网下载NVIDIA CUDA:
下载了CUDA-9.1 deb(network)包
参照CUDA官网安装文档
接下来执行以下命令
更新内核头(注意版本号自行修改成自己的):
$ sudo apt-get install linux-headers-$(uname -r)
$ sudo dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
如果安装的是network包(注意版本号自行修改成自己的):
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
然后执行命令
sudo apt-get update
sudo apt-get install cuda
安装好啦,可以在dash中搜索到了
环境配置:
$ export PATH=/usr/local/cuda-9.1/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64\
$ {LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(2)接下来安装cuDNN
cuDNN官网安装文档
我们先从官网下载与我们安装的CUDA-9.1版本对应的cuDNN v7.0.5
需要先注册NVIDIA账号
接下载再安装cuDNN
到cuDNN安装目录解压命令(注意版本号自行改成自己的):
$ sudo tar -xzvf ~/downloads/cudnn-8.0-linux-x64-v5.1.tgz
再设置系统环境,把解压的cuDNN文件夹里include和lib64文件夹里的文件复制到对应的/usr/local/cuda-9.1对应的文件夹里,注意先到相应目录确定文件名后再执行
$ sudo cp cuDNN/cuda/include/cudnn.h /usr/local/cuda-9.1/include
$ sudo cp cuDNN/cuda/lib64/libcudnn* /usr/local/cuda-9.1/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.1/lib64/libcudnn*
驱动部分安装完成后可以执行以下命令检验驱动是否安装成功
nvidia-smi
四.开始安装tensorflow
tensorflow中文社区安装文档:http://tensorfly.cn/tfdoc/get_started/os_setup.html
1.我选择进行源码编译安装tensorflow,
需要先安装gcc和bazel
gcc的安装不再赘述
为了编译tensorflow我们需要有bazel,bazel是google自家的编译工具
根据其英文安装教程安装
安装完成后可以输入以下命令检验bazel是否安装成功
bazel --help
3.好了装完了这一大堆东西现在正儿八经开始编译安装tensorflow了!~
首先先下载tensorflow v1.5.0-rc0源码
https://github.com/tensorflow/tensorflow/tree/v1.5.0-rc0
$ unzip tensorflow-1.5.0-rc0.zip
cd到解压后的代码仓库目录
$ cd tensorflow-1.5.0-rc0
$ ./configure
接下来就是我一直重来重来重来重复到倒背如流的过程
1.Please specify the location of python. [Default is /home/xutian/anaconda3/bin/python]: /home/xutian/anaconda3/bin/python3.5
2.Please input the desired Python library path to use. Default is [/home/xutian/anaconda3/lib/python3.5/site-packages]:默认
3.Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]:y
4.Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
5.Do you wish to build TensorFlow with Hadoop File System support? [Y/n]: n
6.Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
7.Do you wish to build TensorFlow with XLA JIT support? [y/N]: n
8.Do you wish to build TensorFlow with GDR support? [y/N]: n
9.Do you wish to build TensorFlow with VERBS support? [y/N]: n
10.Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
11.这里需要选择yes才是GPU版本Do you wish to build TensorFlow with CUDA support? [y/N]: y
12.CUDA版本号Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]: 9.1
13.CUDA安装地址ease specify the location where CUDA 9.1 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: /usr/local/cuda-9.1
14.cuDNN版本号Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]: 7.0.5
15.cuDNN安装地址Please specify the location where cuDNN 7.0 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda-9.1]:/usr/local/cuda-9.1
16.这里需要去查询自己电脑显卡对应的GPU计算能力Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 5.0]5.0
17.Do you want to use clang as CUDA compiler? [y/N]: n
18.Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: 默认
19.Do you wish to build TensorFlow with MPI support? [y/N]: n
20.Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 默认
21.Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Configuration finished
好的终于搞定了看到finished非常开心
接下来执行
$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer
注意!!这行编译命令一定要连续衔接在./configure完成之后马上执行!否则会各种报错!
如果你等了非常非常久还没编译好,那么恭喜你你可能是非常顺利没有遇到错误,只需要静静去喝杯茶等它完成就好
在执行这行编译时我遇到了各种不同的error,
例如:
例如:
我也实在找不到解决办法,在这个坑里大概呆了三天,中间折腾了很多办法,最后终于成功了
我的天哪激动人心
好的还没有结束
最后执行命令生成pip安装包并进行安装
$ bazel build --copt=-march=native -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
这里加上–config=cuda才是编译GPU版本,没有则是CPU版本
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
$ pip install /tmp/tensorflow_pkg/tensorflow-1.5.0rc0-cp35-cp35m-linux_x86_64.whl
注意版本号要改成自己的!
最后这一步其实是pip安装/tmp/tensorflow_pkg目录生成的whl,不成功的话可以到这个目录去确认命令中的文件名是否与目录下的文件名一致
然后我们来测试一下tensorflow是否安装成功
输入以下代码打印出tensorflow版本:
$ python
...
>>> import tensorflow as tf
>>> print(tf.__version__)
输入以下命令大量地输出信息. 这个例子用 GPU 迭代计算一个 2x2 矩阵的主特征值
$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu
至此就全部完成了,可以徜徉在tensorflow的海洋了,恭喜恭喜