1.官网链接
源码构建tensorflow官网
- 为什么要源码编译: 直接安装的tensorflow 包是没有avx优化的,如果需要提升性能,加快计算速度,建议源码编译。
2.构建流程
2.1准备
首先确定源码编译的配置:
- 系统:Linux、Windows还是Mac;
- Python版本;
- 支持GPU还是不支持GPU;
- Tensorflow版本;
确定了这些,就可以根据下表来确定GCC、G++版本(gcc与g++版本一致)及Bazel工具版本。
我安装的是tensorflow1.14 、bazel0.24.1、python3.5
2.1.1
(1)我是拉取一个空的docker ubuntu16.04的镜像,命令:docker pull ubuntu:16.04
空的镜像什么包都没有,不容易出现包冲突等莫名其妙的问题;
在镜像下新建容器:nvidia-docker run -it --name <你的镜像名称> -p 2600:8000 -v /home/tensorflow:/work -w /work ubuntu16.04:latest /bin/bash
- 其中2600为端口号,可以更改,只要和别的不重复即可;
- /home/tensorflow为你要映射的地址;
- ubuntu16.04:latest 为镜像名及版本。
有关docker 镜像及容器的概念及使用方法,参考docker 官方文档中文文档
(2)进入容器后,会显示在:root@7631781b2fa4:/work#
目录下,其中7631781b2fa4
为容器号,不同的容器号不同。下面依次进行下载即可:
apt-get update
apt-get install python3.5
apt-get install python3-pip
pip install -U --user pip six numpy wheel setuptools mock 'future>=0.17.1'
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps
注意:不要用官方网站上的 apt-get install python3-dev python3-pip
ubuntu16.04会默认安装python3.6,而后面要卸载再安装python3.5就很麻烦(几乎不可能),不如直接先安装python3.5再安装pip,这样就不会有版本问题。
(3)安装bazel:
下载bazel0.24.1:我下载的是bazel_0.24.1-linux-x86_64.deb文件文件下载链接 安装步骤:
chmod -R 777 bazel_0.24.1-linux-x86_64.deb #授予权限
dpkg -i bazel_0.24.1-linux-x86_64.deb #安装
安装之后通过bazel -version
查看bazel版本。
(4)下载TensorFlow 源代码:
我是在git上直接下载的:
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow #进入tensorflow文件
git checkout branch_name # 查看版本:r1.14, r1.10, etc.
如果没有git命令需要安装,安装方式如下,我同时安装了git、vim、wget,这些命令经常会用到:
apt-get install git
apt-get install vim
apt-get install wget
(5)配置
在tensorflow文件下git checkout r1.14
步骤之后执行:
./configure
configure的选项有很多,第一个是填写Python包位置,由于不需要GPU,后续选项我都选择了n
,如果选择y
,可能会有找不到的包,导致报错。如果需要GPU,在CUDA选项下填写y
即可,并配置GPU。我的配置具体如下:
$ ./configure
Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3.5
Found possible Python library paths:
/usr/local/lib/python3.5/dist-packages
/usr/lib/python3.5/dist-packages
Please input the desired Python library path to use. Default is [/usr/lib/python3.5/dist-packages]
Using python library path: /usr/local/lib/python3.5/dist-packages
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]:
Do you wish to use jemalloc as the malloc implementation? [Y/n]n
jemalloc enabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N]n
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N]n
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N]n
No XLA support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N]n
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N]n
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] n
Do you wish to build TensorFlow with MPI support? [y/N]n
MPI support will not be enabled for TensorFlow
Configuration finished
(6)安装gcc、 g++
sudo apt-get install gcc-4.8
sudo apt-get install g++-4.8
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.8 gcc
sudo rm g++
sudo ln -s g++-4.8 g++
# 查看是否连接到4.8.x
ls –al gcc g++
gcc -v #查看版本
g++ -v
(7) 构建 pip 软件包
仅支持CPU:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
有的博客建议这一步换成:
bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
会更好,看情况而定,如果上面的命令报错了,可以试试这个命令。
TensorFlow 2.x:
bazel build //tensorflow/tools/pip_package:build_pip_package
GPU 支持:
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
如果在构建的过程中不成功,需要先执行:
rm -rf ~/.cache/bazel/
再重新bazel build
在这一步,如果幸运的话一步成功,但源码编译经常会报各种错误。如我编译的版本要求numpy版本低于1.19.0,于是我又重新下载了numpy1.18.5,命令是:
pip install numpy==1.18.5
除此之外,还会遇到各种各样的问题:如
-bash: ./configure: Permission denied
是缺少权限,chmod 命令赋予权限即可。
还有apt-get updata
失败的问题等。
但如果是按照上面的流程应该不会有问题,