5.6 Web与模型服务对接逻辑
学习目标
- 目标
- 了解线上使用、部署模型的完整流程
- 掌握深度学习模型的部署架构
- 应用
- 无
完整过程为:
用到的技术:
- Tensorflow serving
- grpc+protobuf
- Flask
5.5 模型导出
学习目标
- 目标
- 无
- 应用
- 应用tf.saved_model.simple_save完成模型导出
5.4.1 keras 模型进行TensorFlow导出
Tensorflow Serving 使用的模型必须已固定格式导出
from nets.ssd_net import SSD300
from keras import backend as K
import tensorflow as tf
import os
- 使用tf.saved_model.simple_save工具进行导出
def save_model_for_serving(verion=1, path="./serving_model/commodity/"):
# 2、导出模型过程
# 路径+模型名字:"./model/commodity/"
export_path = os.path.join(
tf.compat.as_bytes(path),
tf.compat.as_bytes(str(verion)))
print("正在导出模型到 %s" % export_path)
# 模型获取
model = SSD300((300, 300, 3), num_classes=9)
model.load_weights("./ckpt/fine_tuning/weights.13-5.18.hdf5")
with K.get_session() as sess:
tf.saved_model.simple_save(
sess,
export_path,
inputs={'images': model.input},
outputs={t.name: t for t in model.outputs}
)
if __name__ == '__main__':
save_model_for_serving(verion=1, path="./serving_model/commodity/")
Docker部署环境使用介绍
5.7 TF Serving 与 Web开启服务
学习目标
- 目标
- 无
- 应用
- 应用TensorFlow Serving完成模型服务运行
4.8.1 TensorFlow Serving
TensorFlow Serving是一种灵活的高性能服务系统,适用于机器学习模型,专为生产环境而设计。TensorFlow Serving可以轻松部署新算法和实验,同时保持相同的服务器架构和API。TensorFlow Serving提供与TensorFlow模型的开箱即用集成,但可以轻松扩展以提供其他类型的模型和数据。
4.8.2 安装Tensorflow Serving
安装过程详细参考官网
- 使用Docker安装进行,首先你的电脑当中已经安装过docker容器
5.7.1 TensorFlow Serving Docker
-
获取最新TF Serving docker镜像
docker pull tensorflow/serving
-
查看docker镜像
docker images
-
运行tf serving(即创建一个docker容器来运行)
docker run -p 8501:8501 -p 8500:8500 --mount type=bind,source=/home/ubuntu/detectedmodel/commodity,target=/models/commodity -e MODEL_NAME=commodity -t tensorflow/serving
说明:
-p 8501:8501
为端口映射,-p 主机端口:docker容器程序(tf serving)使用端口
,访问主机8501端口就相当于访问了tf serving程序的8501端口- tf serving 使用8501端口对外提供HTTP服务,使用8500对外提供gRPC服务,这里同时开放了两个端口的使用
--mount type=bind,source=/home/ubuntu/detectedmodel/commodity,target=/models/commodity
为文件映射,将主机(source)的模型文件映射到docker容器程序(target)的位置,以便tf serving使用模型,target
参数为/models/我的模型
-e MODEL_NAME=commodity
设置了一个环境变量,名为MODEL_NAME
,此变量被tf serving读取,用来按名字寻找模型,与上面target参数中我的模型
对应-t
为tf serving创建一个伪终端,供程序运行tensorflow/serving
为镜像名
-
查看serving是否运行
docker ps # 查看正在运行的docker docker ps --all # 查看所有运行的docker,包括停止和未启动异常退出的 docker stop 容器ID(CONTAINER ID)或容器名称(NAMES) # 停止运行中的docker,CONTAINER ID可以只输入前几位,能区分开不同的容器即可 docker start 容器ID(CONTAINER ID)或容器名称(NAMES) # 启动停止的docker
5.7.2 案例操作:commodity模型服务运行
- 1、运行命令
docker run -p 8501:8501 -p 8500:8500 --mount type=bind,source=/Users/huxinghui/workspace/ml/detection/ssd_detection/ssd/serving_model/commodity,target=/models/commodity -e MODEL_NAME=commodity -t tensorflow/serving
- 2.查看是否运行
itcast:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed3a36a07ba8 tensorflow/serving "/usr/bin/tf_serving…" About a minute ago Up About a minute 0.0.0.0:8500-8501->8500-8501/tcp vigorous_goodall