为了编译TensorFlow的源代码,除了要有gcc(版本不低于4.8)支持之外,还需要安装Google自产的编译构建工具,类似于cmake。英文阅读理解能力强的朋友可以直接阅读官方文档:https://www.tensorflow.org/install/source
1.tensorflow下载
git clone https://github.com/tensorflow/tensorflow #下载tensorflow
git branch -a #查看所有分支
git checkout <version> #检出对应的版本
2.安装bazel
官方在线安装:bazel官方地址
下面是bazel源码安装:
bazel下载地址,不同版本tensorflow对应不同版本的bazel,可以在tensorflow 根目录下configure.py中查看,当前使用tensorflow版本为2.1,那么其所支持的bazel版本如下:
_TF_MIN_BAZEL_VERSION = '0.27.1'
_TF_MAX_BAZEL_VERSION = '0.29.1'
_TF_MIN_BAZEL_VERSION
为最低的支持版本,_TF_MAX_BAZEL_VERSION
为最高的支持版本。
安装过程:
1.安装依赖
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
通用版本对应的写法:
chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user
tensorflow-r2.1版本写法:
chmod +x bazel-0.28.0-installer-linux-x86_64.sh
./bazel-0.28.0-installer-linux-x86_64.sh --user
该--user
标志将Bazel安装到$HOME/bin
系统上的目录并设置.bazelrc
路径$HOME/.bazelrc
。使用该--help
命令可以查看其他安装选项。
3.tensorflow编译
1.配置tensorflow编译必要的环境,运行根目录下configure
./configure
接下来会有一系列的选择,下面一一解释:
Please specify the location of python. [Default is /home/yhilly/anaconda3/envs/tensorflow/bin/python]:
上面的提示是Bazel
让我们选择Python
的安装路径,只要确保是Anaconda
的Python
路径即可,直接按一系列的回车键(Enter
)表示使用默认值。
Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]:
jemalloc as malloc support will be enabled for TensorFlow.
上面的选项表示是否使用jemalloc
代替传统的malloc
来管理内存?Jemalloc
是杰森·埃文斯(Jason Evans
)于2006年开发的用以取代传统低性能的malloc
内存管理模块而开发的一款内存管理模块[4]。埃文斯并非等闲之辈,他是FreeBSD
项目(一种类UNIX
操作系统)的重要维护者之一。
Jemalloc
先被Firefox
浏览器采用,后来又被Facebook
在其自己的各类应用上广泛使用,一战成名。好技术当然要用!直接按回车,确认默认值Y(通常字母大写表示默认选项
)。
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
No Google Cloud Platform support will be enabled for TensorFlow.
这个选项是询问是否采用Google
云平台来支持TensorFlow
。这个云平台国内通常无法访问,建议输入“n”,有条件的读者/开发者,可直接按回车确认使用。
Do you wish to build TensorFlow with Hadoop File System support? [Y/n]: n
No Hadoop File System support will be enabled for TensorFlow.
这个选项是询问是否使用Hadoop
文件系统(HDFS
)来支持TensorFlow
。如果搭建了Hadoop
集群,有读取HDFS
数据需求的用户,可以回车确认。如果没有需求,手动输入“n”。
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
No Amazon S3 File System support will be enabled for TensorFlow.
类似的,这个选项是询问TensorFlow是否支持亚马逊的S3文件系统。读者根据自己的需要来确定“Y”或“n”。如果用不着,建议选择“n”。
Do you wish to build TensorFlow with Apache Kafka Platform support? [y/N]:
No Apache Kafka Platform support will be enabled for TensorFlow.
Kafka
是由Apache
软件基金会开发的一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统。如果没有这个需要,建议选择默认值“N”。
Do you wish to build TensorFlow with XLA JIT support? [y/N]: n
No XLA JIT support will be enabled for TensorFlow.
这个选项是询问是否开启XLA JIT
编译支持。XLA
(Accelerated Linear Algebra
/加速线性代数)目前还是TensorFlow
的实验项目,XLA
使用 JIT
(Just in Time
,即时编译)技术来分析用户在运行时(runtime
)创建的 TensorFlow
图,专门用于实际运行时的维度和类型。作为新技术,这项编译技术还不成熟,爱折腾的“极客”读者可以选“y”,否则选择默认值“N”。
Do you wish to build TensorFlow with CUDA support? [y/N]:
No CUDA support will be enabled for TensorFlow.
这个选项是询问是否使用CUDA
。CUDA
是一种由NVIDIA
公司推出的通用并行计算架构,该架构使GPU
能够解决复杂的计算问题。如果用户配备有NVIDIA
的GPU
,可以选择“y”,如果仅使用TensorFlow
的CPU
版本,回车确认“N”。
Do you wish to build TensorFlow with MPI support? [y/N]:
No MPI support will be enabled for TensorFlow.
这个选项是询问是否使用MPI
。MPI
(Message-Passing-Interface
消息传递接口)是实现进程级别的并行程序的通信协议,它通过在进程之间进行消息传递。如果不是基于TensorFlow
做并行程序开发,建议回车确认选择默认值“N”。
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]:
这个选项是指定CPU
编译优化选项。默认值就是“-march=native
”。这里“m
”表示“machine
(机器)”,“arch
”就是“architecture
”简写。“march
”合在一起表示机器的结构,如果选择“-march=native”,则表示选择本地(native)CPU
,如果本地CPU
比较高级,就可以支持SSE4.2、AVX
等选项,这里建议选择默认值。
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]:
这个选项是问是否进入Android
的工作空间配置,如果不用Android
版的TensorFlow
开发,则选择默认值“N”。
经过上面步骤,就已经完成了编译前配置工作。
2.编译
2.1 生成tensorflow C++
库
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so
若读者有显卡且机器上装有cuda
,则加上--config=cuda
,否则去掉。
2.2 生成tensorflow C
库
bazel build --config=opt --config=cuda //tensorflow:libtensorflow.so
2.3 生成tensorflow lite
本地库
bazel build --config=opt //tensorflow/lite:libtensorflowlite.so
执行上述命令,会产生bazel-bin、bazel-genfiles、bazel-out、bazel-tensorflow-r<version>、bazel-testlogs
五个文件夹,我们生成的库在bazel-bin
文件夹中。
2.4 生成Android库
参考:https://blog.csdn.net/sun_28/article/details/102694239