1.官网链接

源码构建tensorflow官网

  • 为什么要源码编译: 直接安装的tensorflow 包是没有avx优化的,如果需要提升性能,加快计算速度,建议源码编译。

2.构建流程

2.1准备

首先确定源码编译的配置:

  • 系统:Linux、Windows还是Mac;
  • Python版本;
  • 支持GPU还是不支持GPU;
  • Tensorflow版本;

确定了这些,就可以根据下表来确定GCC、G++版本(gcc与g++版本一致)及Bazel工具版本。

python的项目源码 cmd运行_linux


python的项目源码 cmd运行_linux_02


python的项目源码 cmd运行_python的项目源码 cmd运行_03


python的项目源码 cmd运行_ubuntu_04


我安装的是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失败的问题等。

但如果是按照上面的流程应该不会有问题,