tensorflow C++ api

1. 背景

TensorFlow是一个从离线到在线一条龙实现的机器学习库。 一般来说,离线算法一般采用Python进行开发,并进行训练,以及得到模型结果, 而在线部分,采用的则是C++来实现,主要考虑到在线预测要一定的性能要求。这里可以采用TensorFlow serving来实现。但是一般来说,为了更好地和内部rpc框架融合,需要将TensorFlow的库,植入到内部的rpc的框架里面。

本文主要将TensorFlow的C++版本的API的so编译过程记录下来,方便后续用到可以快速回溯。

编译环境:centos8

2. TensorFlow编译过程

2.1 下载源码

git clone https://github.com/tensorflow/tensorflow.git

2.1 安装依赖

  • 安装java jdk
dnf install java -y
  • 安装 Bazel(这里安装0.29的版本)
wget https://link.jianshu.com/?t=https%3A%2F%2Fgithub.com%2Fbazelbuild%2Fbazel%2Freleases%2Fdownload%2F0.29.0%2Fbazel-0.29.0-installer-linux-x86_64.sh

bazel的版本不能太高也不能太低,否则编译不通过。

chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user
  • 安装Eigen3

在目录tensorflow/tensorflow/workspace.bzl, 找到下载链接,然后下载下来,在对应的目录进行解压,最后配上/etc/profile的环境参数:

 export CPLUS_INCLUDE_PATH="$HOME/tools/include/:$CPLUS_INCLUDE_PATH"
 export CPLUS_INCLUDE_PATH="$HOME/tools/include/eigen3/:$CPLUS_INCLUDE_PATH"
  • Protobuf

同理,在tensorflow/tensorflow/workspace.bzl 找到对应的版本。

./autogen.sh
./configure --prefix=$HOME/tools/bin
make
 make install
  • 安装nsync

同理, 和eigen3解压到对应的目录即可。

export CPLUS_INCLUDE_PATH="$HOME/tools/include/nsync/public:$CPLUS_INCLUDE_PATH"

2.2 编译实现

./configure
bazel build //tensorflow:libtensorflow_cc.so

由于只是在虚拟机上面编译,没有GPU设备,因此在configure过程中,全部选择N。在bazel-bin/tensorflow下就会看到libtensorflow_cc.so和libtensorflow_framework.so两个动态库;之后需要把这两个库复制到$HOME/tools/lib中,这样就可以连接来编译我们的模型了,之后的任务就是写Tensorflow的C++ API接口啦。

2.3 简单的测试用例

  • 创建回话
#include <tensorflow/core/platform/env.h>
#include <tensorflow/core/public/session.h>
#include <iostream>

using namespace std;
using namespace tensorflow;

int main()
{
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }
    cout << "Session successfully created.\n";
    return 0;
}
  • 查看TensorFlow版本
#include <iostream>
#include <tensorflow/c/c_api.h>

int main() {
   std:: cout << "Hello from TensorFlow C library version" << TF_Version();
    return 0;
}

// Hello from TensorFlow C library version1.11.0-rc1

3. 内部rpc框架如何调用

3.1 加载模型

3.2 在线预测

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值