avatar GDYSHI

gdyshi 的个人博客

  • 首页
  • 子域
  • 分类
  • 标签
  • 归档
  • 关于
首页 tensorflow模型部署系列————TensorFlow Serving部署
文章

tensorflow模型部署系列————TensorFlow Serving部署

发表于 2019/08/26
作者 gdyshi
5 分钟阅读
tensorflow模型部署系列————TensorFlow Serving部署
tensorflow模型部署系列————TensorFlow Serving部署
  • 摘要
  • 引言
  • 主题
    • TensorFlow Serving介绍
    • 安装
    • 模型部署
      • 模型转换
      • 模型部署
  • 示例代码
  • 附录
  • 参考

摘要

本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型的TensorFlow Serving部署。本文主要实现用TensorFlow Serving部署tensorflow模型推理服务器。实现了tensorflow模型在服务器端计算方案,并提供相关示例源代码。相关源码见链接


引言

本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型的独立简单服务器部署。本文主要实现用TensorFlow Serving部署tensorflow模型推理服务器。实现了tensorflow模型在服务器端计算的简单方案,该方案适用于BS和CS架构,易于部署和维护。上一篇博文讲解了利用flask搭建一个简单的模型服务,但模型只实例化了一个对象,在并发访问在情况下存在临界区的问题。TensorFlow Serving则很好地解决了这个问题。

主题

前面的博文tensorflow模型部署系列————独立简单服务器部署就如何将tensorflow在服务器上做简单部署做出了讲解,但模型只实例化了一个对象,在并发访问在情况下存在临界区的问题。本文要介绍的TensorFlow Serving模型部署则很好地解决了这个问题。当然,TensorFlow Serving是一个强大的工具,做一个模型部署仅仅使用了它很小的一块功能。由于本文的专题在模型部署,其它方面就不做太多介绍。

TensorFlow Serving介绍

TensorFlow Serving是google官方推出的用于生产的机器学习组件之一。他支持模型版本控制(用于实现包含回滚选项的模型更新)和多个模型(用于实现通过 A/B 测试进行的实验),同时还能够确保并发模型能够在硬件加速器(GPU 和 TPU)上以较低的延迟实现较高的吞吐量。

安装

服务端安装有以下三种方式

  • 下载docker镜像

  • 命令行安装(ubuntu)

    添加源

    1
    2
    
    echo "deb [arch=amd64] https://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list && \curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add -
    apt-get update
    

    安装 apt-get install tensorflow-model-server

  • 源码安装https://github.com/tensorflow/serving.git

模型部署

模型转换

  • 转换。下面是针对keras模型的转换代码。针对pb模型需要先手动确定输入输出op名称,从模型文件中获取输入输出op名请参考博客tensorflow模型部署系列————单机python部署

    1
    2
    3
    4
    5
    6
    7
    
    model = keras.models.load_model('../model/saved_keras/save.h5')
      
    tf.saved_model.simple_save(
        keras.backend.get_session(),
        export_path,
        inputs={'input_image': model.input},
        outputs={t.name:t for t in model.outputs})
    
  • 测试。通过命令saved_model_cli show --dir ./export/1 --all可以查看输入输出签名是否是我们预期的

模型部署

模型准备好后,就可以使用以下命令部署服务了

```tensorflow_model_server
tensorflow_model_server
–rest_api_port=8501
–model_name=saved_model
–model_base_path=/…./model_deployment/tensorflow_serving/export/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#### 客户端测试

服务端正常启动后就可以使用客户端进行测试了。TensorFlow Serving的请求和回复都是json格式,请求地址为`https://host:port/v1/models/${MODEL_NAME}`

预测接口的请求格式为

```javascript
{
  // (Optional) Serving signature to use.
  // If unspecifed default serving signature is used.
  "signature_name": <string>,

  // Input Tensors in row ("instances") or columnar ("inputs") format.
  // A request can have either of them but NOT both.
  "instances": <value>|<(nested)list>|<list-of-objects>
  "inputs": <value>|<(nested)list>|<object>
}

回复格式为:

1
2
3
{
  "predictions": <value>|<(nested)list>|<list-of-objects>
}

示例代码

  • 模型转换代码
  • 服务启动脚本
  • 客户端示例代码

附录

参考


  • TensorFlow Serving 官方文档
  • 官方代码及示例
tensorflow
tensorflow Serving keras 模型部署 服务器
本文由作者按照 CC BY 4.0 进行授权
分享

最近更新

  • paho.mqtt.embedded掉线问题记录
  • tensorflow模型部署系列————TensorFlow Serving部署
  • tensorflow模型部署系列————独立简单服务器部署
  • tensorflow模型部署系列————浏览器前端部署
  • tensorflow模型部署系列————独立简单服务器部署
外部链接
  • 996.icu
  •  此博客的 Github 仓库
  •  GDYSHI 的个人博客

文章内容

相关文章

2019/07/22

tensorflow模型部署系列————独立简单服务器部署

摘要 引言 主题 flask介绍 模型封装类 服务端接口调用 示例代码 附录 参考 摘要 本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型的独立简单服务器部署。本文主要实现用flask搭建tensorflow模型推理服务器。实现了tensorflow模型在服务器端计算方案,并提供相关示...

2019/08/26

tensorflow模型部署系列————独立简单服务器部署

摘要 引言 主题 flask介绍 模型封装类 服务端接口调用 示例代码 附录 参考 摘要 本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型的独立简单服务器部署。本文主要实现用flask搭建tensorflow模型推理服务器。实现了tensorflow模型在服务器端计算方案,并提供相关示...

2019/07/22

tensorflow模型部署系列————浏览器前端部署

摘要 引言 主题 TensorFlow.js介绍 浏览器安装 API讲解 模型文件转换 命令行转换 keras tf模型 ...

tensorflow模型部署系列————独立简单服务器部署

tensorflow模型部署系列————独立简单服务器部署

© 2025 gdyshi. 保留部分权利。

本站采用 Jekyll 主题 Chirpy

热门标签

tensorflow keras 模型部署 神经网络 机器学习 flask python 服务器 译文 人脸识别

发现新版本的内容。