tensorflow serving api

简介: 背景介绍 tensorflow serving 在客户端和服务端之间的通信采用的是RPC/REST协议。在TFS提供的REST协议接口存在一定的局限性,REST和RPC对比如下:1、REST在实际应用中不能支持运行过程动态模型发布。

背景介绍

 tensorflow serving 在客户端和服务端之间的通信采用的是RPC/REST协议。在TFS提供的REST协议接口存在一定的局限性,REST和RPC对比如下:

  • 1、REST在实际应用中不能支持运行过程动态模型发布。
  • 2、REST预测过程中组装报文格式复杂。
  • 3、RPC接口提供TFS的所有核心能力。

 基于以上原因且考虑我们主要使用java进行编程,因此我们必须具备能够编译TFS JAVA API的能力,这篇文章主要目的就是提供编译TFS JAVA API的方法。


编译方法

step_1 安装protoc

 protoc 3 已经有编译好的版本, 直接从protoc官网 下载编译好的安装包 protoc-3.6.1-osx-x86_64.zip, 然后将命令复制到 /usr/local/bin 即可。

cd /tmp
mv protoc-3.5.1-osx-x86_64.zip .
unzip protoc-3.5.1-osx-x86_64.zip
cd bin
cp protoc /usr/local/bin/

lebron374$ protoc --version
libprotoc 3.6.1


step_2 maven构建工程

参考TFS API编译文章,核心操作的主要步骤都在文章里面写的明白。核心步骤主要是:


核心过程注解

拷贝proto文件

#!/bin/sh
SUBMODULE_PATH_TENSOR_FLOW="src/external/tensorflow"
SUBMODULE_PATH_TENSOR_SERV="src/external/tensorflow-serving"
DEST_SRC_PATH="src/main/proto"

function copy_proto_files()
{
  dest_path=$1
  src_path=$2
  cd ${src_path}
  proto_files=`find . | grep  '\.proto$' | grep -v 'host'`
  cd -
  for file in ${proto_files}
  do
    echo ${file}
    sub_file_path=`echo ${file} | awk 'BEGIN{FS=OFS="/";}{seg=$2; for(i=3; i<NF; ++i){seg=seg"/"$i;}}END{print seg;}'`
    sub_file_name=`echo ${file} | awk 'BEGIN{FS=OFS="/";}{print $NF;}'`
    src_file_name=${src_path}/${sub_file_path}/${sub_file_name}
    dest_file_path=${dest_path}/${sub_file_path}
    if [ ! -f ${dest_file_path} ]
    then
      mkdir -p ${dest_file_path}
    fi
    cp ${src_file_name} ${dest_file_path}
  done
}

copy_proto_files ${DEST_SRC_PATH} ${SUBMODULE_PATH_TENSOR_FLOW}
copy_proto_files ${DEST_SRC_PATH} ${SUBMODULE_PATH_TENSOR_SERV}

说明:

  • proto_files=find . | grep '\.proto$' | grep -v 'host'负责拷贝proto文件,实际过程中因为编译冲突动态排除几个冲突的proto文件。


pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <tensor.jar.version>1.8.0-SNAPSHOT</tensor.jar.version>
    <tensor.version>1.8.0</tensor.version>
    <grpc.version>1.12.0</grpc.version>
    <protobuf.version>3.5.1</protobuf.version>
    <protobuf.plugin.version>0.5.1</protobuf.plugin.version>
  </properties>
  <groupId>tensorflow.serving</groupId>
  <artifactId>tensorflow-serving-api</artifactId>
  <version>${tensor.jar.version}</version>
  <packaging>jar</packaging>
    <distributionManagement>
        <repository>
            <id>nexus</id>
            <name>xxx nexus</name>
            <url>http://maven.repos.xxx.com/nexus/content/repositories/snapshots/</url>
        </repository>
    </distributionManagement>
  <dependencies>
    <dependency>
      <groupId>org.tensorflow</groupId>
      <artifactId>proto</artifactId>
      <version>${tensor.version}</version>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-netty</artifactId>
      <version>${grpc.version}</version>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-protobuf</artifactId>
      <version>${grpc.version}</version>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-stub</artifactId>
      <version>${grpc.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>${protobuf.version}</version>
    </dependency>
  </dependencies>
  <build>
    <extensions>
      <extension>
        <groupId>kr.motd.maven</groupId>
        <artifactId>os-maven-plugin</artifactId>
        <version>1.6.0</version>
      </extension>
    </extensions>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.xolstice.maven.plugins</groupId>
        <artifactId>protobuf-maven-plugin</artifactId>
        <version>${protobuf.plugin.version}</version>
        <configuration>
          <protocArtifact>
            com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
          </protocArtifact>
          <pluginId>grpc-java</pluginId>
          <pluginArtifact>
            io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
          </pluginArtifact>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>compile-custom</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>


参考文章

目录
相关文章
|
3月前
|
编译器 TensorFlow 算法框架/工具
windows部署tensorflow serving
windows部署tensorflow serving
|
2月前
|
机器学习/深度学习 人工智能 API
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
30 0
|
4月前
|
机器学习/深度学习 TensorFlow API
【计算机视觉】Keras API和Tensorflow API的讲解(超详细必看)
【计算机视觉】Keras API和Tensorflow API的讲解(超详细必看)
30 1
|
8月前
|
XML TensorFlow API
TensorFlow Object Detection API 超详细教程和踩坑过程
TensorFlow Object Detection API 超详细教程和踩坑过程
117 1
|
9月前
|
机器学习/深度学习 JSON 算法
TensorFlow Serving使用指南
TensorFlow Serving使用指南
251 0
|
11月前
|
人工智能 安全 Cloud Native
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
434 0
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(1)
|
11月前
|
Cloud Native 安全 TensorFlow
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(2)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(2)
211 0
|
11月前
|
弹性计算 Cloud Native TensorFlow
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(3)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(3)
176 0
|
11月前
|
Cloud Native TensorFlow 算法框架/工具
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(4)
带你读《云原生机密计算最佳实践白皮书》——部署TensorFlow Serving在线推理服务(4)
215 0
|
TensorFlow API 算法框架/工具