轻松搞定tensorflow模型部署到TF serving生产环境,提供在线实时预测服务

  TF Serving有Docker、APT(二进制安装)和源码编译三种方式,但考虑实际的生产环境项目部署和简单性,推荐使用Docker方式。我自己尝试过源码编译,但是linux下源码编译安装软件本来就容易出现各种错误,自己对tf serving使用还不太熟,就一直没有成功,最后放弃。不过,按照官方说法,源码编译安装的整体运行速度会优于其他方法。下面详细介绍使用docker方法安装tf serving。

一、模型转化
  本案例中使用的模型是keras框架训练的,所有如果要进行tf serving部署,首先要将其转化为SavedModel格式。原始模型是这个样子,↓。
在这里插入图片描述
  通过程序转化将其转化为下面这个样子,↓。模型的名字是resnet,模型的版本是1,tf serving支持热更新,会加载模型最新的版本。其中 saved_model.pb包含使用 MetaGraphDef protobuf 对象定义的计算图;assets 包含附加文件;variables 目录包含 tf.train.Saver() 对象调用 save() API 生成的文件。
轻松搞定tensorflow模型部署到TF serving生产环境,提供在线实时预测服务_第1张图片
将h5模型[转化为SavedModel格式模型脚本在此。

如果你是CheckPoint或其他格式模型,就需要其他转化方式了。

二、docker镜像下载
  首先你需要安装docker,方法自行百度。安装好后,下载tfserving镜像。

docker pull tensorflow/serving:latest

轻松搞定tensorflow模型部署到TF serving生产环境,提供在线实时预测服务_第2张图片

  这里使用的是非GPU版。如果需要GPU则下载tensorflow/serving:latest-gpu,如果使用GPU版本,则还需要下载nvidia-docker,启动时容器时执行 nvidia-docker xxxx。下载完成。
在这里插入图片描述
三、ModelServer制作
  制作ModelServer主要有两种方法,一是将模型拷贝到容器中进行模型服务。二是将模型挂载到容器中进行服务。如果你了解docker,本质上没有区别。这里讲一下将模型拷贝到容器中进行模型服务。
1、启动serving容器

docker run -d --name serving_base tensorflow/serving

2、将本地的模型文件复制到容器内部。/tmp/resnet改成你本地模型路径。serving_base:/models/是serving镜像启动后容器的一个文件夹,serving默认加载的是这个文件夹下的模型。所以,将模型拷贝到models文件夹。

docker cp /tmp/resnet serving_base:/models/

3、提交保存容器修改,将serving_base容器保存成镜像。

  • 这里的my_resnet_serving可以指定为任意你想要的名字。
  • –change “ENV MODEL_NAME resnet”:提交server运行时的环境变量MODEL_NAME为resnet。serving默认服务的模型名字是model,所以,保存镜像时要改变这个环境变量为你的模型名字。
docker commit  --change "ENV MODEL_NAME resnet" serving_base  my_resnet_serving

你可能会遇到这个错误: Could not find base path /models/model for servable model,其实就是没有明确指定要服务的模型名字。
在这里插入图片描述

4、关闭并清除基础容器

docker kill serving_base
docker rm serving_base

5、运行docker images查看刚才生成的镜像。已经得到tensorflow model server了,接下来就是运行它。
轻松搞定tensorflow模型部署到TF serving生产环境,提供在线实时预测服务_第3张图片
四、开启服务

docker run -p 8501:8501   -t  my_resnet_serving  

输出如下,恭喜成功!
轻松搞定tensorflow模型部署到TF serving生产环境,提供在线实时预测服务_第4张图片
运行查看模型状态

curl http://localhost:8501/v1/models/resnet

轻松搞定tensorflow模型部署到TF serving生产环境,提供在线实时预测服务_第5张图片
五、执行本地request访问

client客户端脚本点击链接
这是在官方教程上更改的适合自己的,大家根据自己的情况修改。

你可能感兴趣的:(深度学习)