Tensorflow Serving部署tensorflow、keras模型

发布时间:2020-11-17  栏目:深度学习, 软件、框架及系统  评论:0 Comments

TensorFlow Serving 是一个适用于机器学习模型的灵活、高性能应用系统,专为生产环境而设计。借助 TensorFlow Serving,您可以轻松部署新算法和实验,同时保留相同的服务器架构和 API。TensorFlow Serving 提供与 TensorFlow 模型的开箱即用型集成,但也可以轻松扩展以应用其他类型的模型和数据。
官方介绍:https://www.tensorflow.org/tfx/serving/architecture
Tensorflow serving是tensorflow推出的一个用于模型部署的工具,它可以让你基于docker快速部署你的模型,方便地进行版本迭代和容器管理,此外tensorflow serving基于C++构建,摒弃了一些模型训练之中的冗余参数和设计,让你的模型可以高性能地运行在CPU/GPU服务器上。

基于TF Serving的持续集成框架还是挺简明的,基本分三个步骤:

  • 模型训练
    这是大家最熟悉的部分,主要包括数据的收集和清洗、模型的训练、评测和优化;
  • 模型上线
    前一个步骤训练好的模型在TF Server中上线;
  • 服务使用
    客户端通过gRPC和RESTfull API两种方式同TF Servering端进行通信,并获取服务;

 

Servables

Servable是Tensorflow Serving的核心抽象,是客户端用于执行计算的基础对象,其大小和粒度是灵活的。Tensorflow serving可以在单个实例的生命周期内处理一个或多个版本的Servable,这样既可以随时加载新的算法配置,权重或其他数据;也能够同时加载多个版本的Servable,支持逐步发布和实验。由此产生另外一个概念:Servable stream,即是指Servable的版本序列,按版本号递增排序。Tensorflow Serving 将 model 表示为一个或者多个Servables,一个Servable可能对应着模型的一部分,例如,a large lookup table 可以被许多 Tensorflow Serving 共享。另外,Servable不管理自己的生命周期。典型的Servable包括:

  • Tensorflow SavedModelBundle (tensorflow::Session)
  • lookup table for embedding or vocabulary lookups
Sources

Sources 是可以寻找和提供 Servables 的模块,每个 Source 提供了0个或者多个Servable streams,对于每个Servable stream,Source 都会提供一个Loader实例。

Loaders

Loaders管理Servables的生命周期。Loader API 是一种支持独立于特定算法,数据或产品用例的通用基础架构。具体来说,Loaders标准化了用于加载和卸载Servable的API。

Managers

管理 Servable 的整个的生命周期,包括:

  • loading Servables
  • serving Servables
  • unloading Servables

Managers监听Sources并跟踪所有版本。Managers尝试满足、响应Sources的请求,但是如果所请求的资源不可用,可能会拒绝加载相应版本。Managers也可以推迟“卸载”。例如,Managers可能会等待到较新的版本完成加载之后再卸载(基于保证始终至少加载一个版本的策略)。

Core

Tensorflow Serving core 负责管理Servables的Lifecycle和metrics,将Servables和loaders看作黑箱(opaque objects)

简而言之():

  • Sources create Loaders for Servable Versions.
  • Loaders are sent as Aspired Versions to the Manager, which loads and serves them to client requests.

具体来说就是:

  • Source 为指定的服务(磁盘中检测模型权重的新版本)创建Loader,Loader里包含了服务所需要的元数据(模型);
  • Source 使用回调函数通知 Manager 的 Aspired Version(Servable version的集合);
  • Manager 根据配置的Version Policy决定下一步的操作(是否 unload 之前的Servable,或者 load 新的Servable);
  • 如果 Manager 判定是操作安全的,就会给 Loader 要求的resource并让 Loader 加载新的版本;
  • 客户端向 Manager 请求服务,可以指定服务版本或者只是请求最新的版本。Manager 返回服务端的处理结果;

Extensibility

Tensorflow Serving提供了几个可扩展的entry point,用户可以在其中添加自定义功能。

Version Policy

Version Policy(版本策略)可以指定单个Servable stream中的版本加载和卸载顺序。它包括Availability Preserving Policy(在卸载旧版本之前加载并准备好新版本)和Resource Preserving Policy(在加载新版本之前先卸载旧版本)。

Source

New Sources可以支持新的文件系统,云产品和算法后端,这主要和创建自定义Source有关。

Loaders

Loaers是添加算法、数据后端的扩展点。Tensorflow就是这样一种算法后端。例如,用户将实现一个新的Loader,以便对新的Servable机器学习模型实例的访问和卸载。

Batcher

将多个请求批处理为单个请求可以显着降低计算成本,尤其是在存在诸如GPU的硬件加速器的情况下。Tensorflow Serving包括一个请求批处理小部件,它允许客户端轻松地将请求中特定类型的计算进行批量处理。

 

目前TF Serving有Docker、APT(二级制安装)和源码编译三种方式,但考虑实际的生产环境项目部署和简单性,推荐使用Docker方式。

 

参考链接:

https://blog.csdn.net/jeffery0207/article/details/86072456

https://zhuanlan.zhihu.com/p/119419931

https://www.jianshu.com/p/afe80b2ed7f0

 

Comments are closed.

相册集

pix pix pix pix pix pix

关于自己

杨文龙,微软Principal Engineering Manager, 曾在各家公司担任影像技术资深总监、数据科学团队资深经理、ADAS算法总监、资深深度学习工程师等职位,热爱创新发明,专注于人工智能、深度学习、图像处理、机器学习、算法、自然语言处理及软件等领域,目前发明有国际专利19篇,中国专利28篇。

联系我

个人技术笔记

welonshen@gmail.com

2015 in Shanghai