dockerimages没了_tensorflow


前言

Tensorflow Serving是专门为生产环境设计的一套系统,最近正好有时间就尝试去使用了一下,我只是简单的部署了一下,不会涉及到高级用法,在这里简单做一个记录。

正文

一、安装docker,搭建环境

我简单介绍一下docker,docker其实是一种虚拟化方式,类似于我们使用过的虚拟机,但是相比于虚拟机又更加轻便,灵活,具体区别请看图1。大家把自己配置好的一个系统环境提交到docker hub中,我们可以直接去把镜像pull下来使用,我们运行pull下来的镜像就会生成一个容器,这个容器就是一个操作系统,里边有别人配置好的东西,我们自己也可以去添加部署项目需要的东西,配置好之后可以commit,别人也可以去使用这个镜像。


dockerimages没了_搜索_02

图1 docker与传统虚拟机对比


下载docker就直接去官网下载吧,docker官网。

因为我们是使用TensorFlow Serving,所以搜索配置好的镜像进行下载。使用命令


docker search serving


dockerimages没了_docker export save_03

图2 搜索结果

如图2所示,可以搜索到很多镜像,我们选择第一个,这个是官方出品的。还有一点就是镜像的版本,我使用的是1.12.0-devel版本。


docker pull tensorflow/serving:1.12.0-devel


下载好之后运行这个镜像,生成一个容器。端口这里我简单说一下,-p后边8888是我本地的端口,9999的容器内的端口,这个参数的意思就是把我本地的8888端口映射到容器中的9999端口中去。其他具体参数大家参考[2]了解。


docker run -it -p 8888:9999 tensorflow/serving bash


到此我们的环境就算是搭建好了,非常简单,就像从github拉取了一个代码一样,直接可以跑起来。

二、将训练好的模型导成TensorFlow Serving格式,启动服务

有两种方式,一种是训练的过程中直接将模型导出成TensorFlow Serving所需格式,另外一种是将图恢复再导出,我这里使用的是第二种,直接上代码。


import


将导出的模型导入到运行的容器中


docker cp 模型路径 容器ID:路径


在容器中启动服务,我们服务的端口就是8500,调用的时候记得这个端口


tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=saved_model --model_base_path=/tensorflow-serving/checkpoint/serving_model


三、编写服务端部署代码

接下来我们就要编写服务端代码,调用启动的模型服务,使用web框架将我们部署好的服务暴露给外边。直接上代码。


import


我这里使用flask将程序封装成HTTP接口,看最后一行可以看到,我这里指定的端口是9999,这正好对应好了我启动容器时候的端口,服务启动成功之后,我在本地调用8888端口就直接映射到容器内的9999端口,也就能访问到内部的程序了。

这篇文章写得比较仓促,比较乱,主要目的还是记录一下自己使用的过程,如果能帮助到大家就更好了,接下来如果在真正项目中的使用的话,我会重新将这篇文章写一遍。

参考文献

[1]TensorFlow Serving官网

[2]Docker——从入门到实践

[3]TensorFlow Serving + Docker + Tornado机器学习模型生产级快速部署