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 在線預測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章