Categories
程式開發

vivo手機背後的一站式機器學習平台架構實踐


如今,大多數互聯網公司都有自己的機器學習平台,雖然名字和承載的業務不完全相同,但就平台要解決的問題和技術選型來說大同小異。在ArchSummit全球架構師峰會(北京站)的現場,InfoQ有幸採訪了vivo AI研究院的資深算法工程師魯文龍,詳細了解vivo在機器學習平台方面的實踐。

vivo手機背後的一站式機器學習平台架構實踐 1

機器學習項目痛點

起初,vivo也是採用類似“作坊式”的團隊模式,每個團隊針對各自要解決的問題進行規劃,由此產生了一種小作坊式的生產局面。隨著應用規模逐漸增大,這種模式的局限就暴露出來了。魯文龍表示,這種模式下的機器學習項目會出現如下問題:

1、特徵與樣本層面,添加新特徵流程較長,且不同業務間特徵無法共用;特徵與樣本的處理和存儲系統性能與穩定性不佳。

2、訓練與調參層面,在大業務量場景下,深度學習模型分佈式訓練有一定門檻;線上效果不佳時,缺乏一套分析定位問題的方法論。

3、CPU與GPU線上推理層面,駕馭CPU尤其是GPU的深度學習模型的高性能推理門檻較高;離線調參與線上工程開發速度不匹配,影響整體迭代效率。

4、缺乏端到端的系統支撐,每個業務都重複做一套煙囪系統,可維護性差;缺乏技術沉澱,團隊間協作效率低,整體產出會受影響。

舉例來說,魯文龍所在團隊起初主要負責廣告系統的機器學習項目研發,當時經常遇到的一個問題就是離線訓·練和在線推理結果不一致。為了保證性能,線上通常會用Java/C++ 來寫一套程序,離線通常會基於Spark、Flink這樣的大數據工具套件來開發,離線和在線的工程師團隊也是不同的,如此種種造成了出現問題很難定位與修復。為了解決上述這些痛點,團隊決定研發一套統一的機器學習平台來支撐各項目快速迭代。

vivo手機背後的一站式機器學習平台架構實踐 2

vivo機器學習平台實踐

經過討論,vivo將機器學習平台定位在解決公共的工程性難點和痛點,比如特徵工程、模型訓練、模型推理和資源調度方面的問題,不需要每個團隊都重新學習部署一套K8s等基礎設施平台,降低算法工程師的使用門檻,從而提高業務迭代效率。

對於AI研究院的各業務場景的工程師來講,平台提供了開發調試、高效調參、模型部署、效果監控等能力,降低上線門檻,提高迭代效率。在平台內部,由四個部分組成。

1.特徵工程系統:在規范特徵格式、標準化數據流、統一存儲與管理的前提下,以特徵處理引擎為基礎,構建更靈活增刪特徵、共享特徵的系統;
2.模型訓練:在深度定制的框架與計算組件的基礎上,如Tensorflow、Horovod等,通過大規模分佈式訓練引擎提供了使用簡單、功能強大的訓練能力;
3.模型推理:在深度定制的推理框架與計算組件基礎上,如TensorRT、OpenVINO、TF Serving等,提供CPU和GPU極致的高性能推理能力;
4.資源調度: 通過K8s來管理與調度CPU集群和GPU集群,規模2000+CPU機器,1000+GPU卡,來支撐大規模的模型訓練任務與推理服務。

魯文龍表示,第一階段主要以SDK的形式將在特徵、訓練和推理上構建的能力嵌入到業務中,推動業務方使用。經過大半年的努力,機器學習平台已經在眾多業務中落地。接下來,團隊的更多精力將聚焦在打通端到端的能力,通過平台門戶提供更優的產品體驗給工程師。

在構建機器學習平台的過程中,vivo也探索出一些亮點性工作。鑑於資源調度部分,幾個月前已經通過文章介紹過了(《Kube-batch 在 vi​​vo AI 計算平台的應用》),接下來就介紹下其他三部分的亮點工作。

特徵工程系統

特徵工程系統是由統一特征服務和样本生產服務組成,提供機器學習算法落地所需要的數據服務。它解決了特徵生產效率,特徵樣本監控,特徵處理一致性和數據一致性等問題;降低數據開發的入門難度,減少新業務上線成本,提高算法迭代上線效率。

vivo手機背後的一站式機器學習平台架構實踐 3

vivo機器學習平台數據流示意圖

前文提到的離線訓練與線上推理結果不一致的問題,主要是兩方面原因造成的:其一是離線和線上兩套流程邏輯可能存在不一致;其二是時間上的延時,離線訓練通常是在曝光時生成的樣本,而線上推理則是在請求時。對於前者,vivo團隊基於一套基礎的特徵處理標準,通過配置化將兩套流程統一起來使得問題完美解決。對於後者,平台根據特徵變化程度進行分級,分別在請求、請求回傳(排序勝出後)、曝光回傳三個環節拼接不同的特徵,這樣在保證一致性的同時,大大減少了存儲和寬帶成本。除了這些方法外,魯文龍團隊還構建了驗證一致性的系統方法。如此,這個問題就徹底解決了。

大規模分佈式訓練引擎

訓練引擎以SDK的形式供業務方使用,用戶只需配置特徵格式和模型超參,即可使用。各種訓練技巧即刻獲得,包括極致的訓練性能、分佈式訓練、分佈式驗證、增量訓練、實時訓練等。同時,也支持各種形式的定制,以滿足各業務方的需求。

魯文龍表示希望通過機器學習平台解決大規模分佈式訓練推理方面的工程性難題,其他團隊只需要復用這些經驗即可,精力更多地聚焦在業務效果指標的提升上,這樣可以提升整個大團隊的產出效率。

具體來說,vivo機器學習平台團隊在訓練方面,主要優化了訓練速度和模型對樣本響應速度。

在訓練速度提升方面,魯文龍表示,vivo主要做了單機訓練性能提升、同步更新的分佈式訓練和分佈式驗證三方面工作。在單機訓練性能提升方面,通過增大了batch size,即增大密集計算的workload,將CPU和GPU的利用率從30%提升至90% ;同時適當調整學習率策略,參考linear scaling rule,收斂速度提升了10倍之多。

在同步更新的分佈式訓練方面,vivo基於horovod實現分佈式訓練,採用ring allreduce的方式進行通信;深度定制Horovod優化了高維稀疏特徵梯度的交換效率。

在原生Horovod實現中,Rank0驗證時,其他worker都在等待,造成計算資源浪費。優化後,驗證計算量由所有worker一起承擔,每個worker計算完後,將指標匯總歸併。 這樣大大提高了計算資源的利用率,同時也提升了訓練速度。

vivo手機背後的一站式機器學習平台架構實踐 4

Horovod框架的稀疏特徵梯度交換量的分析

在提升響應速度層面,vivo嘗試了增量訓練和實時訓練。魯文龍表示,全量樣本訓練耗費太多計算資源與時間,增量訓練可以提高訓練的響應速度,效果更佳,同時也減少了資源的使用。要想實現實時訓練,使得最新樣本的分佈盡快反應到模型中,就要去掉驗證集;但訓練任務的停止條件是通過驗證集上early stop方式控制的,所以去掉驗證集的話,就要尋找新的、穩定的、有效的停止條件;vivo的方案是利用有驗證集的訓練任務得到訓練集上的指標來指導無驗證集的訓練任務何時停止(如下圖)。

vivo手機背後的一站式機器學習平台架構實踐 5

實時訓練方案的示意圖

高性能推理引擎

通過構建高性能推理引擎來支撐AI研究院所有推理加速的需求,魯文龍表示,對於業務使用方來講,接入方式有兩種:

  • 服務調用,適合於傳輸參數量級少的業務,方便服務升級管理。
  • SDK調用,適合於傳輸參數量級大,極致推理性能優先的業務。

vivo手機背後的一站式機器學習平台架構實踐 6

高性能推理引擎架構圖

在引擎內部,基於CPU和GPU的開源高性能計算庫和推理服務器,根據具體業務的特點,一般會採取:

  • 在計算庫與推理服務器基礎上,調優參數配置,優化熱點算子,來滿足線上推理的需求;
  • 對性能要求比較高、機器預算比較大的場景,會針對這類業務定制化實現一套輕量級的推理引擎。

具體的,在性能優化方面,vivo優化工作主要集中在圖優化和算子優化上。圖優化方面主要是:

  • 算子融合: 經典的矩陣乘加融合、卷積層和激活層融合,減少函數調用次數,提供執行效率;
  • 非功能性算子消除:如Identity、Const、Reshape、ExpandDim;
  • 異構計算:I/O密集型和邏輯處理放在CPU上執行,如embedding、並查集; 密集計算放在GPU上執行。

算子優化方面,vivo也針對CPU和GPU的硬件特性做了一些軟件層面的定制優化工作。 CPU的算子優化:

  • CPU有更大的內存和cache,所以內存對齊、增加cache命中率,可以提高運行效率;
  • CPU有更少的執行單元,那麼利用OpenMP做代碼矢量化、讓代碼並行執行,提高運行效率;
  • 對intel最新型號Cascade Lake的VNNI指令進行了INT8探索優化。
  • GPU的算子優化:
  • GPU芯片有大量的計算單元,所以合理設計線程佈局會大大優化執行效率,同時也要減少線程束分支,避免低效執行;
  • 對T4 的HMMA指令和IMMA指令進行了FP16和INT8量化的探索優化。

經過一年多的探索與實踐, 魯文龍團隊在稀疏DCN模型、通用OCR模型、BERT模型等相關技術的應用場景中,都得到了10倍左右的推理加速,為vivo節省了數千萬機器成本。

經驗總結

對於同樣希望建設機器學習平台的企業而言,魯文龍也提出了自己的建議。他表示,機器學習平台研發團隊內部最好有做過業務的人,要懂用戶(也就是業務方)的需求,不然很難抓住用戶痛點,向業務推廣時也不好落地。

未來發展

從技術發展來看,魯文龍表示,目前業界都在嘗試深度學習,並且模型的複雜度越來越高,vivo也繼續在這方面探索高效的分佈式訓練和極致性能的推理能力,爭取在眾多業務上都獲得不錯的收益。擴展到人工智能領域,他補充道,比較值得期待的是大規模落地的業務場景上的突破,搜索推薦這些互聯網常見的場景自不必談,但目前語音或視覺等技術落地的大規模業務場景還不是特別多,跟移動互聯網比起來。他認為,當眾多業務場景大規模落地後,技術的商業價值凸顯出來,隨之而來的算法、算力等各個方面的突破才能形成持續的價值閉環。

採訪嘉賓:

魯文龍,vivo資深算法工程師,目前在vivo AI研究院,在廣告的機器學習項目中,引入了深度學習與大規模分佈式訓練技術,使得廣告收入實現了大幅的增長。為了支持 AI 研究院各種各樣的機器學習項目,從零到一打造端到端的一站式機器學習平台,降低機器學習技術的落地門檻,大大提升了項目的迭代效率。