APP下载

基于TensorFlow Serving的模型部署应用及实践

2021-09-10翟高粤高乾龙赵云杰唐竹韵

客联 2021年6期
关键词:文件夹神经网络框架

翟高粤 高乾龙 赵云杰 唐竹韵

摘 要:深度学习通常需要把训练好的神经网络模型部署到生产环境中,并能够以服务的形式提供给生产应用。常用的两种方案是基于Flask和基于TensorFlow Serving。本文先对TensorFlow Serving框架进行介绍,然后对环境的搭建进行说明,最后通过一个工程项目详细说明TensorFlow Serving框架的部署方法。

关键词:深度学习;TensorFlow Serving;CIFAR-10;神经网络模型部署

在日常的生产应用中,我们需要将训练好的神经网络模型部署到生产环境中,并能够以服务的形式提供给生产应用。基于TensorFlow 编写的神经网络模型部署有两种方案可以选择:一是基于Flask等 Web框架;二是基于TensorFlow Serving。

TensorFlow Serving是一个用于机器学习模型serving的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用gRPC作为接口接受外部调用。它支持模型热更新与自动模型版本管理。一旦部署TensorFlow Serving后,不需要为线上服务操心,只需要关心你的线下模型训练。本文接下来将介绍使用TensorFlow Serving进行模型部署的方案,并以训练好的基于CNN的CIFAR-10图像分类模型为部署案例进行详细说明。

一、TensorFlow Serving框架简介

TensorFlow Serving是一个高性能、开源的机器学习服务系统,为生产环境部署及更新TensorFlow模型而设计。TensorFlow Serving能够让训练好的模型更快、更易于投入生产环境中使用,提供了高效、高可用的模型服务治理能力。

二、TensorFlow Serving框架构成

TensorFlow Serving包含四个核心模块,分别是Servable、 Source、Loader和Manager,根据对官方文档的研究,以这四个模块为基础绘制出TensorFlow Serving的整体架构,如图1所示。下面简单介绍架构中各个模块的定义。

(一)Servable

Servable是用于执行计算的底层对象。单个Servable的大小和粒度是灵活可变的,因此其可以包括从单个模型到多个模型组合的所有信息。为了保证灵活性和可扩展性,Servable可以是任意类型或者接口,比如Streaming result、Experimental API、Asynchronous modes of operation等。

(二)Source

Source的作用是在文件系统中查找并提供Servable,每个Source可以提供多个Servable stream,并会为每个Servable stream提供一个Loader实例,使其可以被加载或者调用。 Source可以在不同的文件系统中查找可用的Servable,并且支持RPC协议进行远程调用。

(三)Loader

Loader的作用是对Servable的生命周期进行管理。Loader API是一个独立于學习算法、数据或者产品用例的公共组件,并且可以使用 标准化API来加载或消亡一个Servable。

(四) Manager

Manager会监听Source来跟踪所有的Servable版本,在资源充足的 情况下,Manager会加载从Source监听到的所有需要加载的Servable,但是当资源不足时会拒绝加载Servable的新请求。在Manager中支持基于策略的Servable卸载管理,当策略是保证在所有时间内至少有一个Servable版本被加载时,在新的Servable完成加载前Manager会延迟卸载老版本的Servable。

三、TensorFlow Serving环境搭建

TensorFlow Serving环境搭建有基于Docker和Ubuntu 16.04两种方式,其中基于Docker的搭建方式具有跨平台、操作简单的特点,但是屏蔽了搭建细节;基于Ubuntu 16.04的搭建方式则要求掌握一定的Linux环境的软件安装知识。下面以基于Docker搭建TensorFlow Serving环境为例,说明搭建的方法。

使用Docker搭建TensorFLow Serving环境是非常方便和快捷的,在安装好Docker环境之后,可以直接使用如下命令完成Docker镜像的 下载和运行。

docker pull tensorflow/serving

docker run -p 8500:8500 -p 8501:8501 --name tfserving_resnet \

-- mount type=bind,source=/tmp/resnet,target=/models/resnet \

-e MODEL_NAME=resnet -t tensorflow/serving

四、基于TensorFlow Serving项目工程结构设计

整个项目工程结构分为两部分:文件夹和代码文件,在编程实践中强烈建议采用文件夹和代码文件的方式来设计项目工程结构。所谓的文件夹和代码文件的方式就是指把所有的Python代码文件放在根目录下,其他需要存放的静态文件、训练数据文件和模型文件等都放在文件夹中。

本项目分为三个部分,分别是模型文件导出模块、模型文件部署模块和Web应用模块。模型文件导出模块提供了将已经加载的模型导出TensorFlow Serving部署所需的文件;模型文件部署模块提供了TensorFlow Serving部署功能;Web应用模块提供了可视化人机交互功能。

在文件夹中,model_dir存放训练完成的模型文件, predict_images存放我们上传的需要预测的图像,serving_model存放TensorFlow Serving部署所需的文件,static和templates存放Web应用 程序所需的HTML、JS等静态文件。

项目实现代码包括工具类实现、模型文件导出模块实现、模型文件部署模块实现、Web应用模块实现的代码。

(一)工具类实现

在实际的项目中,我们往往需要对参数进行频繁的调整,因此这里定义一个工具类来读取配置文件中的配置参数,这样在调参时只需要对配置文件中的参数进行调整,即可实现对全部参数的调整。部分关键代碼如下:

def get_config(config_file=’config.ini’):

parser=configparser.ConfigParser()

parser.read(config_file)

_conf_ints=[(key,int(value)) for key,value in parser.items(‘floats’)]

_conf_floats=[(key,str(value)) for key,value in parser.items(‘strings’)]

return dict(_conf_ints+_conf_floats+_conf_strings)

(二)模型文件部署模块实现

模型文件部署模块主要实现对Tensorflow Serving服务的启动和停止。部分关键代码如下:

try:

#先启动TensorFlow Serving服务,完成模型的部署

tf_model_server=subprocess.Popen([“tensorflow_model_server””--model_base_path=

gConfig[‘exeport_dir’]”

“--rest_api_port=gConfig[‘server_port’]

--model_name=ImageClassifier”],

Stdout=subprocess.DEVNULL,shell=True,preexec_fn=os.setsid)

Print(“TensorFlow Serving服务启动成功” )

Except KeyboardInterrupt:

Print(“停止所有服务中....”)

Os.killpg(os.getpgid(tf_mod_server.pid)

Print(“所有服务停止成攻”)

(三)Web应用模块实现

Web应用模块主要实现预测、图片上传、预测结果返回等功能。

五、结论

TensorFlow Serving是google开源的一个适用于部署机器学习模型,具有灵活、高性能、可用于生产环境的模型框架。它支持模型版本控制和回滚;支持并发;支持多模型部署;支持模型热更新等,由于这些特性,使得我们不需要为部署线上服务而操心,只需要训练好线下模型即可。同时,TensorFlow Serving还提供gRPC和REST API两种接口访问形式,其中gRPC接口对应的端口号为8500,而REST API对应的端口号为8501。本文为应用TensorFlow Serving框架的技术人员提供了一个较为详细的使用价值。

参考文献:

[1] 江宁远等.基于微服务的深度学习模型服务系统[J],软件工程,2021(4).

[2] 李建明等.基于深度学习的工业自动化包装缺陷检测方法[J],包装工程,2021(4).

[3] 闫涛. 深度学习算法实践 [M]. 电子工业出版社出版社,2020.

[4] 王宇石等.一种基于卷积神经网络的违禁品探测系统及部署方法[J],科技创新与应用,2020(7).

猜你喜欢

文件夹神经网络框架
基于人工智能LSTM循环神经网络的学习成绩预测
基于图像处理与卷积神经网络的零件识别
框架
Fast Folders,让你的文件夹四通八达
基于自适应神经网络的电网稳定性预测
浅谈框架网页的学习
基于Jmeter对Node框架性能的测试研究
摸清超标源头 大文件夹这样处理
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
调动右键 解决文件夹管理三大难题