这篇教程轻松搞定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 生成的文件。
将h5模型[转化为SavedModel格式模型脚本在此。
如果你是CheckPoint或其他格式模型,就需要其他转化方式了。
二、docker镜像下载 首先你需要安装docker,方法自行百度。安装好后,下载tfserving镜像。 docker pull tensorflow/serving:latest
这里使用的是非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了,接下来就是运行它。
四、开启服务 docker run -p 8501:8501 -t my_resnet_serving 输出如下,恭喜成功! 查看:curl http://localhost:8501/v1/models/resnet
五、执行本地request访问
client客户端脚本点击链接 这是在官方教程上更改的适合自己的,大家根据自己的情况修改
返回列表 keras h5模型转化tensorflow serving模型脚本和restful client访问脚本 |