protobuf使用详解_TF--C++动态库编译从头到尾的详解

682aa08c157f91bd28539ed9c7f65dc4.png

Hi各位,专栏有点时间没有更新文章啦,主要是由于工作方面有点忙(拖延癌),不过这次终于能够抽出空来写文章啦。本次带来TF C++动态库的编译指导,下次的话预告下应该是YOLOv3算法详解,时间方面小七争取尽快写作完成啦,哈哈哈(拖延癌晚期)

OK,进入正题,小七了解到平时大家都比较习惯python+tensorflow的组合进行模型搭建、训练和推理,理由是两者耦合的生态比较好(用的多,支持多)。不过,从工程化的角度来讲,使用C++编码可以使得代码执行效率更高,服务更加稳定,也更容易嵌入C++开发的各种应用之中(C++的工程化应用比较广阔)。小七最近工作上也比较多需要使用tensorflow C++接口进行编程的工作,所以,本次给大家带来的是Tensorflow C++动态库编译从零开始从头到尾的一个技术详解。

前置条件

开始前,小七把编译动态库的一些前置条件、环境先贴出来下:

先贴一个tensorflow 编译为pip安装包的各个环境对应关系,链接,可以用来参考如何构建C++动态库。直接拉到Tested build configurations:

8ce650b98f48604770476d871ccaf07e.png
依赖关系

理论上按照上述的各个依赖对应关系去编译C++动态库都能够成功,小七列一个例子:

  • 系统 Ubuntu 16.04
  • bazel 0.15.0,在github上下载对应版本,通过这个指导编译安装。
  • cuda 9 + cudnn7+nccl2.4.8,安装指导,nccl安装
  • gcc 4.8.5,多版本共存和切换
  • python 3.5.2 + python3-dev,加上six、numpy、wheel包,建议新开一个virtualenv环境安装上述依赖。
sudo apt-get install python3-dev
virtualenv cpp_tf -p python3
source cpp_tf/bin/activate
pip install six numpy wheel

c4e8eb86f185c04fa88e13763d2668b7.png
  • tensorflow source 1.12,网页切换到r1.12版本下载zip文件 or:
git clone https://github.com/tensorflow/tensorflow/tree/r1.12

OK,完成上述的环境自查和安装后,我们就可以开始进行动态库的编译了。

步骤一:编译配置,生成tensorflow_cc.so(请注意保持cpp_tf的虚拟环境激活状态)

cd tensorflow-r1.12
./configure

configure的过程中,基本上都是enter就可以,除了:是否支持CUDA选择y,cuda位置输入‘/usr/local/cuda-9.0’(具体看你的配置), nvcc版本输入2.4.8,其他一步下来全部选择默认即可。如下图:

ff84274aa8512bb71607d66479f9ca98.png

配置过程中可能会出现:'site' has no attribute "getsitepackages",忽略即可。

bazel build --config=opt //tensorflow:libtensorflow_cc.so

编译预计花费30分钟,完成后在bazel-bin/tensorflow下面生成libtensorflow_cc.so和libtensorflow_framework.so两个文件。

步骤二:编译其他依赖(eigen、protobuf等):

开始前先确定下tensorflow/workspace.bzl里面的protobuf版本是哪个,看是否和download_dependecies.sh里面下载的版本一致。如果不的话,会报This file was generated by a newer version of protoc which is i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值