"50萬行代碼、GitHub 4200星:騰訊發布全棧機器學習平台Angel 3.0"
发布时间:2019-08-27 19:05:29
"

近日,騰訊首個AI開源項目Angel正式發布一個里程碑式的版本:Angel 3.0。這是一個全棧機器學習平台,功能特性涵蓋了機器學習的各個階段,超過50萬行代碼,在 GitHub 上 Star 數已超過 4200,Fork 數超過 1000。

據悉,Angel 3.0嘗試打造一個全棧機器學習平台,功能特性涵蓋了機器學習的各個階段:特徵工程,模型訓練,超參數調節和模型服務

Angle 於2016年年初在騰訊內部上線,2017 年 6 月, Angel 在 Github上低調開源,截至目前,Angel 在 GitHub 上 Star 數已超過 4200Fork 數超過 1000。Angel 項目目前總共有 38 位代碼貢獻者,其他包括 8 位 committer,他們總共提交了超過 2000 個 commit

Angel在2017年6月正式開源

從1.0到3.0,Angel發生了巨大的變化,它從一個單一的模型訓練平台發展到涵蓋機器學習各個流程,包含自己生態的通用計算平台,代碼量也超過了50萬行

為了讓整個系統更加的智能,Angel 3.0新增了超參數調節的功能,目前支持3種算法:隨機搜索,網格搜索和貝葉斯優化

Angel (https://github.com/Angel-ML)是基於參數服務器架構的分布式計算平台,致力於解決稀疏數據大模型訓練以及大規模圖數據分析問題,它由騰訊與北京大學聯合研發,兼顧了工業界的高可用性和學術界的創新性。

Angel發布里程碑版本3.0:全棧機器學習平台

Angel是騰訊開源的大規模分布式機器學習平台,專注於稀疏數據高維模型的訓練。目前Angel是Linux基金會人工智慧(LFAI)孵化項目,相比於TensorFlow, PyTorch和Spark等業界同類平台,它有如下特點:

  • Angel是一個基於Parameter Server(PS)理念開發的高性能分布式機器學習平台,它具有靈活的可定製函數PS Function(PSF),可以將部分計算下推至PS端。PS架構良好的橫向擴展能力讓Angel能高效處理千億級別的模型。
  • Angel具有專門為處理高維稀疏特徵特別優化的數學庫,性能可達breeze數學庫的10倍以上。Angel的PS和內置的算法內核均構建在該數學庫之上。
  • Angel擅長推薦模型和圖網絡模型相關領域(如社交網絡分析)。圖1是Angel和幾個業界主流平台在稀疏數據,模型維度,性能表現,深度模型和生態建設幾個維度的對比。Tensorflow和PyTouch在深度學習領域和生態建設方面優勢明顯,但在稀疏數據和高維模型方面的處理能力相對不足,而Angel正好與它們形成互補,3.0版本推出的PyTorch On Angel嘗試將PyTorch和Angel的優勢結合在一起。

圖1 Angel與業界主流平台的對比

Angel系統架構

圖2 Angel 3.0架構

Angel自研的高性能數學庫是整個系統的基礎,Angel的PS功能和內置的算法內核均是在這個數學庫基礎之上實現的。

Angel PS提供了高效,穩定和靈活的參數存儲和交換服務。在3.0版本中,我們對Angel PS功能進行了擴展,使得它可以存儲任意類型的對象,一個典型的例子是在圖算法的實現過程中,我們使用Angel PS來存儲了大量複雜的對象。

MLcore是Angel自研的一套算法內核,它支持自動求導,可以使用JSON配置文件定義和運行算法。除此之外,在3.0版本中,Angel還集成了PyTorch作為計算引擎。在計算引擎層之上是計算框架,它們可以看作計算引擎的容器,目前支持3種計算框架:原生的Angel,Spark On Angel(SONA)和PyTorch On Angel(PyTONA),這些計算框架可以使得Spark和PyTorch用戶可以無縫切換到Angel平台。最上層是兩個公共組件:AutoML和模型服務。

Angel使用情況

如圖3所示,在過去12個月,Angel在騰訊內部的任務數量有了非常明顯的增長,增幅達到150%。值得一提的是,Spark On Angel的任務數增長了10倍,為了讓Spark On Angel更加的易用,3.0版本對Spark On Angel做了大幅度升級。在騰訊內部,使用Angel的業務包括騰訊視頻,騰訊新聞和微信等。

圖3騰訊內部Angel任務數

Angel官方維護了一個QQ群與外部開發者進行交流,對群用戶的統計表明:

  • Angel的絕大部分用戶來自中國,主要分布在北京,上海,杭州,成都和深圳等網際網路行業比較發達的城市。
  • 有超過100家的公司和科研機構在使用或測試Angel,其中包括了中國最頂級的IT公司:微博,華為和百度等。

圖4 Angel開源用戶

Angel開源

圖5 GitHub上Angel的統計信息以及Angel發表的論文

從2017年6月開源以來,Angel受到了較多的關注,目前在GitHub上Star數超過4200,Fork數超過1000。Angel項目目前總共有38位代碼貢獻者,其他包括8位committer,他們總共提交了超過2000個commit。

從1.0到3.0,Angel發生了巨大的變化,它從一個單一的模型訓練平台發展到涵蓋機器學習各個流程,包含自己生態的通用計算平台,代碼量也超過了50萬行。為了後續維護和使用的方便,Angel拆分成8個子項目,統一放在Angel-ML目錄下(https://github.com/Angel-ML):angel,PyTorch On Angel,sona,serving,automl,mlcore,math2和format,這些子項目會在下文詳細介紹。

Angel 3.0新特性

圖6 Angel 3.0概覽(紅色的表示新增特性,白色的表示已有的但在持續改進的特性)

圖6提供了一個Angel 3.0特性的整體視圖。Angel 3.0試圖打造一個全棧機器學習平台,它的功能特性涵蓋了機器學習的各個階段:特徵工程,模型訓練,超參數調節和模型服務。

Angel的特徵工程模塊基於Spark開發,增強了Spark的特徵選擇功能,同時使用特徵交叉和重索引實現了自動特徵生成。這些組件可以無縫地整合進Spark的流水線。為了讓整個系統更加的智能,Angel 3.0新增了超參數調節的功能,目前支持3種算法:隨機搜索,網格搜索和貝葉斯優化。在模型服務方面,Angel 3.0提供了一個跨平台的組件Angel Serving, Angel Serving不僅可以滿足Angel自身的需求,還可以為其他平台提供模型服務。

在生態方面,Angel也嘗試將PS能力賦能給其他的計算平台,目前已經完成了Spark On Angel和PyTorch On Angel兩個平台的建設。這兩個平台各有優勢和側重, Spark On Angel使用的是Angel內置的算法核心,主要負責常見推薦領域的機器學習算法和基礎圖算法。PyToch On Angel使用PyTorch作為計算核心,主要負責推薦領域深度學習算法和圖深度學習算法。

自動特徵工程

特徵工程,例如特徵交叉和選擇,對於工業界的機器學習應用具有重要意義。Spark提供了一些特徵選擇算子,但是仍有一些局限性。Angel基於Spark提供了更多的特徵選擇算子:

  • 基於統計的算子,包括VarianceSelector和FtestSelector
  • 基於模型的算子,包括LassoSelector和RandomForestSelector

大多數在線推薦系統經常選擇線性算法,例如邏輯回歸作為機器學習模型,但邏輯回歸需要複雜的特徵工程才能實現較高的精度,這使得自動特徵合成至關重要。但是,現有的自動化的高階特徵合成方法帶來了維度災難。為了解決這個問題,Angel實現了一種疊代生成高階合成特徵的方法。每次疊代由兩個階段組成:

  • 擴增階段:任意特徵的笛卡爾積
  • 縮約階段:特徵選擇和特徵重索引

以下是疊代步驟:

  • 首先任意的輸入特徵之間通過笛卡爾積生成合成特徵。該步驟後,特徵數量將以二次方式增加。接下來,從合成特徵中選擇最重要的特徵子集(使用例如VarianceSelector和RandomForestSelector)
  • 然後,重新索引所選擇的特徵以減少特徵空間
  • 最後,合成特徵與原始特徵拼接在一起

圖7自動特徵工程流程

如圖7所示,這種特徵合成方法線性地增加特徵數量,避免了維度災難。在Higgs數據集上的實驗表明合成的特徵能有效地提高模型精度(如表1所示)。

表1特徵合成效果

Spark On Angel (SONA)

在Angel 3.0中,我們對Spark On Angel做了大幅度的優化,添加了下面這些新的特性:

  • Spark On Angel中集成了特徵工程。在集成的過程中並不是簡單地借用Spark的特徵工程,我們為所有的運算支持了長整型索引的向量使其能夠訓練高維稀疏模型
  • 與自動調參無縫連接
  • Spark用戶能夠通過Spark-fashion API毫不費力的將Spark轉換成Angel
  • 支持兩種新的數據格式:LibFFM 和Dummy

圖8 Spark On Angel架構

除了這些大的特徵,我們也在持續完善Spark On Angel的算法庫:添加了一些新的算法,如:Deep & Cross Network (DCN) 和 Attention Factorization Machines (AFM)等;同時對已有的算法做了大量的優化,例如對LINE和K-Core算法進行了重構,重構後的算法性能和穩定性都有大幅度提升。

從圖9中可以看出,Spark On Angel中的算法與Spark中的算法存在顯著的不同,如:基於Spark On Angel的算法主要是針對推薦和圖領域,然而Spark中的算法更通用。

圖9 Spark與Spark On Angel算法比較

圖10 Spark On Angel算法示例

圖10提供了一個基於Spark On Angel的分布式算法示例,主要包含以下步驟:

  • 在程序開始時啟動參數服務器,程序結束時關閉參數服務器
  • 將訓練集和測試集以Spark DataFrame形式加載
  • 定義一個Angel模型並以Spark的參數設置方式為其設置參數。在這個示例中,算法是一個通過JSON定義的計算圖
  • 使用「fit」方法來訓練模型
  • 使用「evaluate」方法來評估已訓練的模型

在訓練完成後,Spark On Angel將會展示多種模型指標,如:準確率, ROC 曲線, AUC等。用戶可以保存訓練好的模型以便下次使用。

圖11 Spark On Angel和TensorFlow性能比較

我們在兩種流行的推薦算法Deep & Wide 和 DeepFM上使用了相同的資源和數據集比較了Spark On Angel和Tensorflow的性能。如圖11所示,在Deep & Wide算法上Spark On Angel比Tensorflow快3倍,而在DeepFM算法上Tensorflow運行稍快一些。

PyTorch On Angel(PyTONA)

PyTorch On Angel是Angel 3.0新增的特性,它主要是為了解決大規模圖表示學習和深度學習模型訓練問題。

在過去幾年時間,圖卷積神經網絡(GNN)快速發展,一系列的研究論文以及相關的算法問世:例如GCN,GraphSAGE和GAT等,研究和測試結果表明,它們能夠比傳統圖表示學習更好的抽取圖特徵。騰訊擁有龐大的社交網絡(QQ和微信),同時擁有大量對圖數據進行分析的需求,而圖表示學習正是這些分析的基礎,因此騰訊內部對GNN有著強烈的需求,這也是我們開發PyTorch On Angel的主要原因之一。

大規模圖的表示學習面臨著兩個主要的挑戰:第一個挑戰來自於超大規模圖結構的存儲以及訪問,這要求系統不僅能存得下,還需要提供高效的訪問接口,例如需要提供高效的訪問任意節點的兩跳鄰居的接口;第二個挑戰來自於GNN計算過程,它需要有高效的自動求導模塊。

通過對Angel自身狀況以及對業界已有系統的分析,我們得到如下結論:

  • TensorFlow和PyTorch擁有高效的自動求導模塊,但是它們不擅長處理高維度模型和稀疏數據
  • Angel擅長處理高維度模型和稀疏數據,雖然Angel自研的計算圖框架(MLcore)也可以自動求導,但是在效率和功能完整性上卻不及TensorFlow和PyTorch,無法滿足GNN的要求

為了將兩者的優勢結合起來,我們基於Angel PS開發了PyTorch On Angel平台,基本思路是使用Angel PS來存儲大模型,使用Spark來作為PyTorch的分布式調度平台,也就是在在Spark的Executor中調用PyTorch來完成計算。

PyTorch On Angel的架構如圖12所示:

圖12 PyTorch On Angel系統架構

PyTorch On Angel擁有3個主要的組件:

  • Angel PS:存儲模型參數,圖結構信息和節點特徵等,並且提供模型參數和圖相關數據結構的訪問接口,例如需要提供兩跳鄰接訪問接口
  • Spark Driver:中央控制節點,負責計算任務的調度和一些全局的控制功能,例如發起創建矩陣,初始化模型,保存模型,寫checkpoint以及恢復模型命令
  • Spark Worker:讀取計算數據,同時從PS上拉取模型參數和網絡結構等信息,然後將這些訓練數據參數和網絡結構傳給PyTorch,PyTorch負責具體的計算並且返回梯度,最後Spark Worker將梯度推送到PS更新模型

當然,這些細節都是封裝好的,算法開發人員和用戶並不需要了解。在PyTorch On Angel平台上開發新算法,只需要關注算法邏輯即可,與開發單機的PyTorch算法並沒有太大區別。下面給出一個2層GCN算法的實現例子:

圖13在PyTorch On Angel上實現GCN的例子

算法開發完成後,將代碼保存為pt文件,然後將pt文件提交給PyTorch On Angel平台就可以實現分布式訓練了。

我們已經在PyTorch On Angel上實現了許多算法:包括推薦領域常見的算法(FM,DeepFM,Wide & Deep,xDeepFM,AttentionFM, DCN和PNN等)和GNN算法(GCN和GraphSAGE)。在後續的版本疊代中,我們將會進一步豐富PyTorch On Angel的算法庫。

由於結合了PyTorch和Angel的優點,PyTorch On Angel在算法性能方面有很大的優勢:對於推薦領域常見的深度學習算法,性能可以達到TensorFlow的4倍以上;對於GNN算法,性能也遠好於目前業界開源的同類型平台(具體的性能數據會在開源社區陸續公開)。下圖是在公開的數據集criteo kaggle2014(4500萬訓練樣本,100w特徵)上做的對比測試:

圖14 PyTorch On Angel和TensorFlow性能對比測試

除了性能方面的優勢,PyTorch On Angel還有一個比較大的優勢就是易用性好。如圖12所示:PyTorch運行在Spark的Executor中,可以實現Spark圖數據預處理和PyTorch模型訓練的無縫對接,在一個程序中完成整個計算過程。

自動超參數調節

傳統超參數調節的方式有兩種(如圖15所示):

  • 網格搜索:網格搜索將整個搜索空間切分為網格,假設超參數是同等重要的。這種方式雖然直觀,但有兩個明顯的缺點:1)計算代價隨參數數量的增長而呈指數增長;2)超參數的重要程度常常是不同的,網格搜索可能會花費太多精力來優化不太重要的超參數
  • 隨機搜索:隨機採樣超參數組合,並評估抽樣組合。雖然這種方法有可能關注更重要的超參數,但是仍無法保證找到最佳組合

圖15網格搜索和隨機搜索

貝葉斯優化與傳統的無模型方法不同,使用計算成本較低的代理函數(surrogate function)來近似原始目標函數。在貝葉斯優化中,代理函數生成超參數組合的機率均值和方差。然後,效用函數(acquisition function)將評估超參數組合的預期損失或改進。這樣的機率解釋方法使貝葉斯優化能夠使用少得多的開銷找到目標函數的較優解。

Angel 3.0包括傳統的兩種方法和貝葉斯算法優化。對貝葉斯優化,Angel實現了以下的功能:

  • 代理函數。除了常用的兩種模型(高斯過程和隨機森林),也實現了EM + LBFGS優化高斯過程內核函數中的超參數
  • 效用函數:實現了PI(Probability of improvement),EI(Expected Improvement)和UCB(Upper Confidence Bound)

由於每次評估目標函數的計算開銷可能較大,如果觀察到候選的超參數組合在開始的若干輪疊代中表現不佳,可以提前停止這些候選超參數組合。Angel 3.0版本中實現了這種早停策略。

表2是在邏輯回歸算法的實驗,調節的超參數是學習速度和學習速度衰減率,結果顯示貝葉斯優化的性能優於隨機搜索和網格搜索,而隨機搜索的結果略優於網格搜索

表2不同超參數自動條件方法的效果對比

Angel Serving

為了滿足在生產環境中高效地進行模型服務的需求,我們在Angel 3.0中實現了Angel Serving子系統,它是一個可拓展性強、高性能的機器學習模型服務系統,是全棧式機器學習平台Angel的上層服務入口,使Angel生態能夠形成閉環。圖16展示了Angel Serving的架構設計。

圖16 Angel Serving架構

Angel Serving主要特徵包括:

1)支持多種類型的API訪問服務,包括gRPC和Restful 接口;

2)Angel Serving是一個通用的機器學習服務框架,可插拔機制設計使得來自其他第三方機器學習平台的模型可以很容易使用Angel Serving來服務,目前已經支持三種平台的模型:Angel,PyTorch和支持PMML模型格式的平台(Spark、XGBoost等);

3)受TensorFlow Serving的啟發,Angel Serving還提供細粒度版本控制策略:包括使用模型的最早,最新以及指定版本進行服務;

4)Angel Serving還提供豐富的的模型服務監控指標,包括:

  • QPS: 每秒請求數
  • 總的請求數以及成功請求總數
  • 請求的響應時間分布
  • 平均響應時間

表3 Angel Serving和Tensorflow Serving性能對比

表3展示了Angel Serving和TensorFlow Serving性能對比結果,我們使用具有100萬個特徵的DeepFM模型,向服務發送100,000個預測請求。Angel Serving和TensorFlow Serving的總耗時分別為56秒和59秒。兩個服務系統的平均響應時間都為2毫秒。Angel Serving的QPS是1,900,而TensorFlow Serving的QPS是1,800。上述結果表明Angel Serving與TensorFlow Serving性能相當,甚至更好。

小結

本文主要介紹了Angel在騰訊內外的使用情況和3.0版本的新特性。

Angel在騰訊內外的使用情況:

  • 騰訊內部:用戶數和任務數增加1.5倍
  • 騰訊外部:超過100多家公司和機構使用Angel
  • 開源貢獻:4200多個star, 8個子項目,1100多個fork,2000多次commits

Angel 3.0新特性:

  • 自動特徵工程:新增特徵選擇和組合方法,將特徵合成、選擇和重新索引以pipeline的形式呈現,用來疊代生成高階合成特徵

新的計算引擎:

  • SONA(加強):特徵工程支持索引為Long類型的向量;所有的算法被封裝成Spark風格的APIs;SONA上的算法可以作為Spark的補充
  • PyTONA(新):PyTONA作為圖學習算法的引擎被引入,目前支持GCN和GraphSage,同時也支持推薦領域的算法。PyTONA採用Python作為交互,因此是用戶友好的
  • 自動機器學習:Angel3.0引入了3種超參數調節算法:網格搜索、隨機搜索和貝葉斯優化
  • Angel模型服務:Angel提供一個跨平台的模型服務框架,支持Angel、PyTorch和Spark的模型,性能上與TensorFlow Serving相當
  • 支持Kubernetes : Angel3.0支持Kubernetes,從而可以在雲上運行

Angel開源地址:https://github.com/Angel-ML

關注TechTree,關注網際網路一線大廠技術乾貨。

"
相关阅读