docker+tensorflow/serving
Tensorflow在部署上也提供的许多多方便的方法。其中最为方便的,就是通过Docker+Tensorflow_Serving 进行部署。在这里仅仅只对docker + tensorflow/serving + rest api 进行简单介绍。
在进行部署前,先要安装Docker。
Docker
Install Docker
点击该链接进行安装 Install Docker
安装成功后,打开终端,输入
1 | $ docker info |
若能正确得到docker信息,代表安装成功。
常用命令
基本上了解 一下命令就行了。至于构建自己的Docker image等高级操作 请参阅Docker 以及docker_practice
1 | #显示当前正在运行的容器 |
tensorflow/serving
在进行介绍前,首先确保已经安装了Docker。
这里我们以最简单的MINIST 进行介绍。下面是Tensorflow2.0版本的代码。
MINIST Model Save
1 | import tensorflow as tf |
通过上面的model.save(‘./mode_out’)对模型进行保存,保存后,产生的文件目录如下:
/Users/lollipop/Documents/tf2/learn/mode_out
└── 00000123
├── assets
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
有了模型后,我们就要开始进行部署了。
Server
通过下面docker命令 获取tensorflow/serving 镜像
1 | $ docker pull tensorflow/serving |
获取后,通过上面讲的常用Docker命令进行查看
1 | $ docker images |
可以看到 我们确实获取了tensorflow/serving
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
然后在终端进行输入下方命令进行部署。其中
source指定model_out的位置.
1 | $ docker run -p 8501:8501 --name MINIST --mount source=/Users/lollipop/Documents/tf2/learn/mode_out,type=bind,target=/models/MINIST -e MODEL_NAME=MINIST -t tensorflow/serving |
部署成功后终端会显示 如下信息:
1 | 2019-12-01 06:26:46.997159: I tensorflow_serving/model_servers/server.cc:85] Building single TensorFlow model file config: model_name: MINIST model_base_path: /models/MINIST |
Client
服务端已经部署成功,我们来看看client 端怎么编写。这里我用的是REST api。
1 | import tensorflow as tf |
输出:
[7 2 1 0 4 1 4 9 6 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1]
tf.Tensor([7 2 1 0 4 1 4 9 6 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1], shape=(30,), dtype=int64)
在此可以看到Server端正确的给出了预测。
通过这种docker+tensorflow/serving 的方式,我们可以轻松的将我们的模型在服务器进行部署,部署后就像开了一个API接口一样,可供其他应用进行调用。