AlphaML(系统篇)-机器学习serving框架

2017-06-13  本文已影响0人  leepand

缘何自研算法serving框架

首先说下我们的背景,我们目前是大数据部门的算法团队,我们的客户:内部子公司与业务部门所服务的CRM客户,我们的使命:为这些客户及客户的客户提供建模服务,针对不同业务需求,我们开发了一系列模型及机器学习算法/产品,但是构建模型只是问题的一部分,我们的建模之后的挑战是要找到一种方法,使得模型可以在生产环境下服务,而且是面向不同客户不同环境提供部署服务。模型服务系统将经受大量的业务。所以需要确保为这些模型提供的软件和硬件基础架构是可扩展的、可靠的和容错的,这对的客户来说是非常重要的。由于好多的需求和涉及算法比较类似,如果为每一个客户提供个性化语言的模型开发势必会造成资源的浪费。基于此我们开始考虑开发一套统一的对外算法服务框架,一来可以对算法的统一开发与管理,二来可以收集客户数据及共享模型给不同的客户(前提是得到客户的许可)。基于这些思考促使我们对算法服务框架的研究。

前期调研

在明确建设目标后,我们对市面上相关的框架进行仔细调研,总结和借鉴这些框架相关部分,以帮助对目标的设计。经过与工程师的多次讨论,我们明确了一些需要具备的核心功能:

AlphaML serving

经过网上一系列的调研之后,我们选择C++为框架的开发语言,综合调研几个框架的设计,开发我们自己的模型服务。

Serving 框架:

bigrlab-frame.png

lGLOG_logtostderr=1 ./ftrl.bin -model model -algname ftrl -algmgr localhost:9001 -port 10080
其中,ftrl.bin为算法主文件,-model 为需要load的模型文件,-algname 为该服务名,用户根据服务名区分不同服务,也是通过服务名完成相同服务的分布式(由模型管理模块做负载均衡的管理),-algmgr为该服务的注册IP地址

- Algomgr:模型管理模块,负责上线算法的管理、更新模型文件的检测与自动更新。
- Apiserver:负责对外提供服务,和算法so文件的自动识别和加载,并提供已上线模型服务的查看。需要先启动服务,以供管理模块和算法模块的注册与管理,启动方法:

nohup ./apiserver.bin -port 9000 -algomgr_port 9001 -b > nohup.log 2>&1 &
apiserver只需在master主机上启动即可,worker节点通过IP:port向其注册,其中-port 为对外访问的端口,-algomgr_port为内部算法服务向管理模块注册的地址,算法服务可以部署在不同的worker节点上。

  - 通信协议:内部采用thrift实现序列化,对外预测服务采用http协议。

#### 现有功能和pipeline:
- 监督式学习:[GBDT](%E5%B9%BF%E4%B9%89%E7%BA%BF%E6%80%A7%E6%A8%A1%E5%9E%8B,xgboost)(Gradient Boosting Decision Tree,包括poisson regression、LR、linear regression、multiclass classification),[最近邻模型](knn)(k-NearestNeighbor)
- 非监督式学习:聚类问题(Sparse k-means++)、共现矩阵生成算法
在线学习:[在线梯度下降模型](OnlineFTRL)(online stochastic gradient descent)、[在线主题模型-LDA](Bigartm)(LDA、PLSA)
- 文本挖掘:[基础功能](cppjieba-master)(在线分词、基于TF-IDF和TF-entropy关键词提取)、[文本自动分类](cppjieba-master)、[文本内容推荐](cppjieba-master)(sum-vec、cluster2vec、LDA2Vec)、[标签自动标注](tagging)(基于embedding和共现矩阵及Prob-CF框架)、[概率语言模型](kenlm)(依赖kenlm、rnn、knn、trie tree、beam search)
- 推荐算法框架:[内容-协同过滤混合框架](RNN-PLSA-CF)(PLSA-CF)
- Corsets scalable resample online Ensemble框架
为兼容TensorFlow/MXnet等深度学习框架,新增python algo server功能
算法框架组件:
- [特征工程](xgboost):可以对连续变量自动binning,基于GBDT的方法
- [文本向量自动转化](cppjieba-master-clustering-artical2vec.cpp)(x2vector):可将文本内容/行为记录自动映射为向量
- [概率协同过滤框架](%E5%B7%B2%E5%AE%9E%E7%8E%B0)(Prob-CF):可处理标签和推荐类问题
- [数据服务器](Data%20%20service)(Data server):负责批量和实时外部数据传输
#### 期待未来增加的功能清单:
增加积木化的算法框架(比如TensorFlow)和由其产生的场景化模型,当然也无需盲目追求高大上,更重要的还是算法本身与业务之间的切合度。
上一篇 下一篇

猜你喜欢

热点阅读