ubuntu18.04 tensorflow以及tensorflow lite源码编译C++库

为了编译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的安装路径,只要确保是AnacondaPython路径即可,直接按一系列的回车键(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编译支持。XLAAccelerated Linear Algebra/加速线性代数)目前还是TensorFlow的实验项目,XLA 使用 JITJust 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.

这个选项是询问是否使用CUDACUDA是一种由NVIDIA公司推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。如果用户配备有NVIDIAGPU,可以选择“y”,如果仅使用TensorFlowCPU版本,回车确认“N”。

Do you wish to build TensorFlow with MPI support? [y/N]: 
No MPI support will be enabled for TensorFlow.

这个选项是询问是否使用MPIMPI(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

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
对于Ubuntu 18.04,你可以使用以下步骤在C++中使用TensorFlow: 1. 安装依赖项: ``` sudo apt-get update sudo apt-get install build-essential curl sudo apt-get install libcurl3-dev libfreetype6-dev libpng-dev libzmq3-dev pkg-config sudo apt-get install python3-dev python3-pip python3-wheel python3-setuptools ``` 2. 安装TensorFlow C++: - 通过pip安装TensorFlow C++: ``` pip3 install tensorflow ``` - 或者,从源代码构建TensorFlow C++: - 克隆TensorFlow: ``` git clone https://github.com/tensorflow/tensorflow.git cd tensorflow ``` - 配置构建选项并构建TensorFlow C++: ``` ./configure bazel build --config=opt //tensorflow:libtensorflow_cc.so ``` - 在.bashrc或.bash_profile文件中设置LD_LIBRARY_PATH环境变量: ``` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/tensorflow/bazel-bin/tensorflow/ ``` 3. 编写C++代码并链接TensorFlow: - 创建一个C++文件,比如example.cpp,并添加以下代码: ```cpp #include <tensorflow/cc/client/client_session.h> #include <tensorflow/cc/ops/standard_ops.h> #include <tensorflow/core/framework/tensor.h> int main() { using namespace tensorflow; using namespace tensorflow::ops; Scope root = Scope::NewRootScope(); auto A = Const(root, { {3.f, 2.f}, {-1.f, 0.f} }); auto b = Const(root, { {3.f, 5.f} }); auto product = MatMul(root.WithOpName("product"), A, b, MatMul::TransposeB(true)); std::vector<Tensor> outputs; ClientSession session(root); TF_CHECK_OK(session.Run({product}, &outputs)); for (const auto& tensor : outputs) { std::cout << tensor.matrix<float>() << std::endl; } return 0; } ``` - 编译C++代码: ``` g++ -std=c++11 -I/path/to/tensorflow -L/path/to/tensorflow/bazel-bin/tensorflow example.cpp -ltensorflow_cc -o example ``` - 运行生成的可执行文件: ``` ./example ``` 这样,你就可以在Ubuntu 18.04上使用C++编写和运行TensorFlow代码了。请确保将`/path/to/tensorflow`替换为你实际的TensorFlow安装路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值