AlphaML(系統(tǒng)篇)-機(jī)器學(xué)習(xí)serving框架

緣何自研算法serving框架

首先說下我們的背景,我們目前是大數(shù)據(jù)部門的算法團(tuán)隊(duì),我們的客戶:內(nèi)部子公司與業(yè)務(wù)部門所服務(wù)的CRM客戶,我們的使命:為這些客戶及客戶的客戶提供建模服務(wù),針對(duì)不同業(yè)務(wù)需求,我們開發(fā)了一系列模型及機(jī)器學(xué)習(xí)算法/產(chǎn)品,但是構(gòu)建模型只是問題的一部分,我們的建模之后的挑戰(zhàn)是要找到一種方法,使得模型可以在生產(chǎn)環(huán)境下服務(wù),而且是面向不同客戶不同環(huán)境提供部署服務(wù)。模型服務(wù)系統(tǒng)將經(jīng)受大量的業(yè)務(wù)。所以需要確保為這些模型提供的軟件和硬件基礎(chǔ)架構(gòu)是可擴(kuò)展的、可靠的和容錯(cuò)的,這對(duì)的客戶來說是非常重要的。由于好多的需求和涉及算法比較類似,如果為每一個(gè)客戶提供個(gè)性化語言的模型開發(fā)勢必會(huì)造成資源的浪費(fèi)。基于此我們開始考慮開發(fā)一套統(tǒng)一的對(duì)外算法服務(wù)框架,一來可以對(duì)算法的統(tǒng)一開發(fā)與管理,二來可以收集客戶數(shù)據(jù)及共享模型給不同的客戶(前提是得到客戶的許可)?;谶@些思考促使我們對(duì)算法服務(wù)框架的研究。

前期調(diào)研

在明確建設(shè)目標(biāo)后,我們對(duì)市面上相關(guān)的框架進(jìn)行仔細(xì)調(diào)研,總結(jié)和借鑒這些框架相關(guān)部分,以幫助對(duì)目標(biāo)的設(shè)計(jì)。經(jīng)過與工程師的多次討論,我們明確了一些需要具備的核心功能:

  • serving時(shí)的低延遲,提供REST API
  • 橫向可擴(kuò)展
  • 分布式serving,增強(qiáng)并發(fā)
  • 靈活易開發(fā)的微服務(wù)架構(gòu)
  • 支持開源框架的整合,以支持未來的數(shù)據(jù)產(chǎn)品
  • 支持場景化模型/算法pipeline的開發(fā)與部署
  • 熱部署,即新的算法服務(wù)及模型更新不需停掉舊的服務(wù)
    期間我們研究的框架包括:H2O、PredictionIO、BigML、common_lab_so、tensorflow serving等,這些框架與我們的目標(biāo)之間各有不同程度重合部分可借鑒。其中,H2O可提供REST API、模型易開發(fā)和部署,但不支持橫向算法或場景模型的擴(kuò)展、系統(tǒng)封閉不兼容其他開源框架、沒有熱部署、分布式serving和場景化pipeline部署功能;PredictionIO支持REST API服務(wù)、橫向擴(kuò)展、開源兼容、熱部署,但在場景化、靈活性、分布式方面相對(duì)比較欠缺;BigML早在12年之前就開始serving方面的研發(fā),是比較早提出MLaas模式的公司,其特點(diǎn)是與H2O類似,提供相對(duì)友好的web UI和客戶端的接口,主要focus的點(diǎn)也在基礎(chǔ)算法的訓(xùn)練和預(yù)測,其他方面涉及不多;common_lab_so為微博開發(fā)的內(nèi)部算法serving框架,在靈活、熱部署、場景化等方面都有考慮和設(shè)計(jì),但其在部署的配置方面非常麻煩,每次上線新的算法都需要配置一堆的邏輯;谷歌的tensorflow serving無疑是大多行內(nèi)人認(rèn)可和評(píng)價(jià)較高的框架,其在我們討論的各個(gè)方面除了兼容開源框架以及場景化pipeline方面的支持之外都是符合的,我們也在后期專門開發(fā)了基于python的service,支持tensorflow模型的應(yīng)用,或?qū)脮r(shí)如業(yè)務(wù)需要直接部署tensorflow serving。

AlphaML serving

經(jīng)過網(wǎng)上一系列的調(diào)研之后,我們選擇C++為框架的開發(fā)語言,綜合調(diào)研幾個(gè)框架的設(shè)計(jì),開發(fā)我們自己的模型服務(wù)。

Serving 框架:

bigrlab-frame.png
  • 框架說明:
    • Offline train:有些線上服務(wù)需要離線模型支持,支持方式包括定期、周期更新兩種,比如文本相似度計(jì)算需要的向量化數(shù)據(jù)定期即可,Leads模型需要的模型數(shù)據(jù)可能需要周期性訓(xùn)練并更新,離線模型訓(xùn)練好后保存至其對(duì)應(yīng)的線上算法路徑。
    • File System:保存離線模型文件。
    • AlgoPool:存放線上算法文件,并開發(fā)對(duì)應(yīng)的so庫,上線時(shí)load需要的模型文件,上線時(shí)需要向模型管理模塊注冊(cè),告知新增算法可用,上線舉例:

lGLOG_logtostderr=1 ./ftrl.bin -model model -algname ftrl -algmgr localhost:9001 -port 10080
其中,ftrl.bin為算法主文件,-model 為需要load的模型文件,-algname 為該服務(wù)名,用戶根據(jù)服務(wù)名區(qū)分不同服務(wù),也是通過服務(wù)名完成相同服務(wù)的分布式(由模型管理模塊做負(fù)載均衡的管理),-algmgr為該服務(wù)的注冊(cè)IP地址

- Algomgr:模型管理模塊,負(fù)責(zé)上線算法的管理、更新模型文件的檢測與自動(dòng)更新。
- Apiserver:負(fù)責(zé)對(duì)外提供服務(wù),和算法so文件的自動(dòng)識(shí)別和加載,并提供已上線模型服務(wù)的查看。需要先啟動(dòng)服務(wù),以供管理模塊和算法模塊的注冊(cè)與管理,啟動(dòng)方法:

nohup ./apiserver.bin -port 9000 -algomgr_port 9001 -b > nohup.log 2>&1 &
apiserver只需在master主機(jī)上啟動(dòng)即可,worker節(jié)點(diǎn)通過IP:port向其注冊(cè),其中-port 為對(duì)外訪問的端口,-algomgr_port為內(nèi)部算法服務(wù)向管理模塊注冊(cè)的地址,算法服務(wù)可以部署在不同的worker節(jié)點(diǎn)上。

  - 通信協(xié)議:內(nèi)部采用thrift實(shí)現(xiàn)序列化,對(duì)外預(yù)測服務(wù)采用http協(xié)議。

#### 現(xiàn)有功能和pipeline:
- 監(jiān)督式學(xué)習(xí):[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)
- 非監(jiān)督式學(xué)習(xí):聚類問題(Sparse k-means++)、共現(xiàn)矩陣生成算法
在線學(xué)習(xí):[在線梯度下降模型](OnlineFTRL)(online stochastic gradient descent)、[在線主題模型-LDA](Bigartm)(LDA、PLSA)
- 文本挖掘:[基礎(chǔ)功能](cppjieba-master)(在線分詞、基于TF-IDF和TF-entropy關(guān)鍵詞提?。?、[文本自動(dòng)分類](cppjieba-master)、[文本內(nèi)容推薦](cppjieba-master)(sum-vec、cluster2vec、LDA2Vec)、[標(biāo)簽自動(dòng)標(biāo)注](tagging)(基于embedding和共現(xiàn)矩陣及Prob-CF框架)、[概率語言模型](kenlm)(依賴kenlm、rnn、knn、trie tree、beam search)
- 推薦算法框架:[內(nèi)容-協(xié)同過濾混合框架](RNN-PLSA-CF)(PLSA-CF)
- Corsets scalable resample online Ensemble框架
為兼容TensorFlow/MXnet等深度學(xué)習(xí)框架,新增python algo server功能
算法框架組件:
- [特征工程](xgboost):可以對(duì)連續(xù)變量自動(dòng)binning,基于GBDT的方法
- [文本向量自動(dòng)轉(zhuǎn)化](cppjieba-master-clustering-artical2vec.cpp)(x2vector):可將文本內(nèi)容/行為記錄自動(dòng)映射為向量
- [概率協(xié)同過濾框架](%E5%B7%B2%E5%AE%9E%E7%8E%B0)(Prob-CF):可處理標(biāo)簽和推薦類問題
- [數(shù)據(jù)服務(wù)器](Data%20%20service)(Data server):負(fù)責(zé)批量和實(shí)時(shí)外部數(shù)據(jù)傳輸
#### 期待未來增加的功能清單:
增加積木化的算法框架(比如TensorFlow)和由其產(chǎn)生的場景化模型,當(dāng)然也無需盲目追求高大上,更重要的還是算法本身與業(yè)務(wù)之間的切合度。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容