【记录】记录第一次使用tensorflow serving全过程


在完成模型的训练之后,要将其部署到公司的CPU服务器上,为解决这一问题,谷歌发布了TensorFlow (TF) Serving,希望能解决ML模型部署到生产的一系列问题。

本文不对tensorflow serving进行介绍,仅仅是记录自己使用tf serving的步骤。因为是第一次使用TF Serving,所以如果文中有错误之处,烦请您指出。

1. 使用Docker安装TF serving

首先,说明我的本机环境:

ubuntu16.04
anaconda2 python2.7

开始使用TensorFlow Serving的最简单方法之一是使用Docker , 可以参考tensorflow的官方文档

1.1 安装Docker

在ubuntu的终端中,运行以下命令来安装docker

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
$ sudo apt-get update
$ sudo apt-get install docker-ce

为了避免每次运行docker命令都加上sudo,我们在终端下运行如下命令:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

接着可以试着输入docker --help来查看是否安装成功

1.2 安装TF Serving

使用以下命令,就可以安装.

首先下载TensorFlow Serving 镜像以及github代码

$ docker pull tensorflow/serving
$ git clone https://github.com/tensorflow/serving

然后启动TensorFlow Servin容器(使用REST API端口)

$ TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
$ docker run -t --rm -p 8501:8501
-v “$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two”
-e MODEL_NAME=half_plus_two
tensorflow/serving &

这里解释一下各个参数的意义:

8501: 对应的是REST API端口
-v 后面的一串 冒号之前是你的模型所在绝对地址(这里是tensorflow serving自己带的模型),冒号之后,/models/是固定的, half_plus_two这个名字可以随便起
-e MODEL_NAME= 后面的名字就是/models/后面你起的名字
tensorflow/serving 使用的镜像
& 表示后台运行

再打开一个新的终端,在新终端中输入以下命令:

curl -d ‘{“instances”: [1.0, 2.0, 5.0]}’
-X POST http://localhost:8501/v1/models/half_plus_two:predict

如果有 Returns => { “predictions”: [2.5, 3.0, 4.5] } 出现,那么就TF Serving 的安装就已经成功了。

2. 使用自己训练的模型

TensorFlow Serving使用的模型形式是下面这个图一样的:
在这里插入图片描述
也就是说,你的模型由两部分组成,一个pb文件,一个variables文件夹,这两部分放在一个编了号的文件夹下面,这个号码表示模型的version。
如果你的模型保存的不是这种形式,也先不用着急,可以将其转换成这种形式就行了。

TensorFlow有三种模型的形式,一种是ckpt形式,一种是pb形式,还有一种是saved_model形式,上图就是saved_model形式。

我的模型是ckpt形式的,如下图所示,我的模型转换路线是从ckpt转换为pb,再转换为saved_model形式。
在这里插入图片描述

2.1 ckpt 2 pb

本小节参考:ckpt模型使用的是该github代码提供的CTPN的模型。模型转换代码参考该github下328号issue“生成pb文件”。

首先使用show_ckpt()函数获取ckpt节点名称和参数,然后使用ckpt_to_pb()将ckpt模型转换为pb模型。

import os
import tensorflow as tf
from tensorflow.python import pywrap_tensorflow
from tensorflow.python.framework import graph_util


def show_ckpt():
    # 获取ckpt节点名称,参数
    checkpoint_path = '../models/checkpoints_mlt/ctpn_50000.ckpt'
    checkpoint_path = os.path.join(checkpoint_path)
    # Read data from checkpoint file
    reader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)
    var_to_shape_map = reader.get_variable_to_shape_map()
    
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值