PaddleCloud
PaddleCloud copied to clipboard
关于`PaddlePaddle Serving`的一点调研
TensorFlow serving
首先是调研了一下TensorFlow Serving
。他的arch view
文档在这里 或者这里。
除了提供基础的rpc server
的功能外,亮点在于一下几个feature
:
- 多版本管理:
- 可以同时
load
多个版本的model
,并且客户端可以访问指定的版本。 - 模型热加载:新版本的
model
发布后,自动加载新版本。- 版本管理的policy是可以定制的。默认主要实现的有两种:
Availability Preserving Policy
和Resource Preserving Policy
。
- 版本管理的policy是可以定制的。默认主要实现的有两种:
- 可以同时
TensorFlow Serving includes two policies that accommodate most known use- cases.
These are the Availability Preserving Policy (avoid leaving zero versions loaded;
typically load a new version before unloading an old one), and the Resource Preserving Policy
(avoid having two versions loaded simultaneously, thus requiring double the resources;
unload an old version before loading a new one)
- 支持从多种存储上加载模型:
- 可以扩展支持更多种类的存储。
-
client
端访问的批处理功能:- 同样,这个功能也是可以自定义policy。
Batching of multiple requests into a single request can significantly reduce the cost
of performing inference, especially in the presence of hardware accelerators such as GPUs.
根据文档描述,其Loaders
是可以扩展的,这样具有了支持非TensorFlow model
的能力。社区已经有人为TensorFlow Serving
增加caffe
模型的支持:https://github.com/tensorflow/serving/pull/261
https://github.com/rayglover-ibm/serving-caffe
厂内情况
- 某组基于
TensorFlow Serving
做了一些,不过仅支持TensorFlow
的模型。- http://wiki.baidu.com/pages/viewpage.action?pageId=253167629
- 多数是拿
baidurpc
做一个简单Infer Server
。
讨论:
我们在大会之前做一个可以和TensorFlow Serving
对标的Serving
服务作为亮点,时间有点来不及。
- 在
TensorFlow Serving
的基础上做插件支持PaddlePaddle
的模型? - 做一个简单的C++版本
Infer Server
(如HttpServer)?
-
不是很理解为什么TF Serving要做model更新和版本管理。在分布式的情况下似乎更适合Kubernetes来做rolling update和load balancing,单机情况下需要框架来支持model更新和版本管理吗?个人不是很认同TF Serving中
Loader
,Source
,Manager
概念的必要性。如果要做TF Serving的插件,可能需要论证下TF Serving思路的合理性。 -
TF Serving我理解是gRPC和protobuf(有protobuf message不能大于64MB的限制,需要打patch重新编译解除限制),如果要HTTP接口,还需要在上面包一层。我们需要确定下咱们讲的PaddlePaddle Serving是直接暴露HTTP接口吗?
-
我个人认为比较理想的方式是serving可以直接用重构后的remote session(这里是Python的接口,如果需要高性能我们可以提供C++/Go的接口),这里是模块示意图。如果用户需要HTTP接口,可以自己在上面再包一层。
我个人认为比较理想的方式是serving可以直接用重构后的remote session(这里是Python的接口,如果需要高性能我们可以提供C++/Go的接口),这里是模块示意图。如果用户需要HTTP接口,可以自己在上面再包一层。
好啊!
可以弄一个纯净版
serving grpc
@biolee grpc用的protobuf不适合tensor这种binary blob,因为protobuf是为小message设计的,这里有一些benchmark: https://github.com/PaddlePaddle/Paddle/pull/4610
http://wiki.baidu.com/pages/viewpage.action?pageId=253167629 这个地址更新了吗? 请问最新地址是什么? 谢谢!