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

缘何自研算法serving框架

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

前期调研

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

  • serving时的低延迟,提供REST API
  • 横向可扩展
  • 分布式serving,增强并发
  • 灵活易开发的微服务架构
  • 支持开源框架的整合,以支持未来的数据产品
  • 支持场景化模型/算法pipeline的开发与部署
  • 热部署,即新的算法服务及模型更新不需停掉旧的服务
    期间我们研究的框架包括:H2O、PredictionIO、BigML、common_lab_so、tensorflow serving等,这些框架与我们的目标之间各有不同程度重合部分可借鉴。其中,H2O可提供REST API、模型易开发和部署,但不支持横向算法或场景模型的扩展、系统封闭不兼容其他开源框架、没有热部署、分布式serving和场景化pipeline部署功能;PredictionIO支持REST API服务、横向扩展、开源兼容、热部署,但在场景化、灵活性、分布式方面相对比较欠缺;BigML早在12年之前就开始serving方面的研发,是比较早提出MLaas模式的公司,其特点是与H2O类似,提供相对友好的web UI和客户端的接口,主要focus的点也在基础算法的训练和预测,其他方面涉及不多;common_lab_so为微博开发的内部算法serving框架,在灵活、热部署、场景化等方面都有考虑和设计,但其在部署的配置方面非常麻烦,每次上线新的算法都需要配置一堆的逻辑;谷歌的tensorflow serving无疑是大多行内人认可和评价较高的框架,其在我们讨论的各个方面除了兼容开源框架以及场景化pipeline方面的支持之外都是符合的,我们也在后期专门开发了基于python的service,支持tensorflow模型的应用,或届时如业务需要直接部署tensorflow serving。

AlphaML serving

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

Serving 框架:

bigrlab-frame.png
  • 框架说明:
    • Offline train:有些线上服务需要离线模型支持,支持方式包括定期、周期更新两种,比如文本相似度计算需要的向量化数据定期即可,Leads模型需要的模型数据可能需要周期性训练并更新,离线模型训练好后保存至其对应的线上算法路径。
    • File System:保存离线模型文件。
    • AlgoPool:存放线上算法文件,并开发对应的so库,上线时load需要的模型文件,上线时需要向模型管理模块注册,告知新增算法可用,上线举例:

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)和由其产生的场景化模型,当然也无需盲目追求高大上,更重要的还是算法本身与业务之间的切合度。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容