當前位置︰首頁 > 新聞資訊 > 正文

騰訊發布開源機器學習平台 Angel 3.02019-08-26 10:39:02 | 編輯︰hely | 查看︰ | 評論︰0

近日,騰訊首個 AI 開源項目 Angel 正式發布 3 0 版本。Angel 3 0 的目標是打造一個全棧的機器學習平台,功能特性涵蓋了機器學習的各個階段︰特征工程、模型訓練、超參數調節和模型服務。

近日,騰訊首個 AI 開源項目 Angel 正式發布 3.0 版本。Angel 3.0 的目標是打造一個全棧的機器學習平台,功能特性涵蓋了機器學習的各個階段︰特征工程、模型訓練、超參數調節和模型服務。

Angel 是騰訊開源的大規模分布式機器學習平台,專注于稀疏數據高維模型的訓練。自 2016 年年初在騰訊內部上線以來,Angel 已應用于微信支付、QQ、騰訊視頻、騰訊社交廣告及用戶畫像挖掘等業務。2017 年 6 月,Angel 在 Github 上低調開源;2018 年 9 月,Angel 2.0 版本發布,支持千億級模型維度訓練,同時算法庫也更加豐富,首次引入了深度學習算法和圖算法。截至目前,Angel 在 GitHub 上 Star 數已超過 4200,Fork 數超過 1000。

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

概述

相比于 TensorFlow、PyTorch 和 Spark 等業界同類平台,Angel 有如下特點︰

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 系統架構

Angel 3.0 系統架構如圖 2 所示。

 

 

圖 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 性能相當,甚至更好。

案例一︰騰訊短視頻推薦

 

 

圖 17 短視頻推薦數據處理流程

上圖所示是騰訊短視頻部門的一個使用案例。用戶的視頻播放日志和上下文信息被實時轉發給 Kafka,流數據引擎 Storm 訂閱 Kafka 的數據。Storm 是一個實時的特征生成器,它從一個離線的 key-value 存儲中獲得用戶畫像和視頻信息,將兩者拼接起來生成特征。生成的特征被傳輸到在線訓練系統中來更新在線模型;同時,這些特征也被轉存到 HDFS 作為離線訓練的輸入。離線模型通常用來初始化在線訓練系統,當出現異常時,離線模型還可以用來重置在線系統。本案例用到的推薦算法是 FM,訓練樣本 24 億條,特征維度為 63611,在 Spark 上訓練耗時 10 多個小時,應用 Angel 後減少至 1 小時。

案例二︰金融反欺詐

 

 

圖 18 金融反欺詐數據處理流程

金融欺詐檢測是大規模圖學習的常見案例,其網絡數據是異構的,包含幾種不同類型的邊︰

交易關系: 用戶 A 和用戶 B 之間如存在交易關系表明他們之間曾出現過交易行為

設備關系︰用戶 A 和用戶 B 之間如存在設備關系表明他們曾共享過同一個設備

Wi-Fi 關系︰用戶 A 和用戶 B 之間如存在 Wi-Fi 關系表明他們曾通過一個 Wi-Fi 連接到互聯網

金融詐騙者通常共享設備和 Wi-Fi,通過擴展邊緣關系生成社區。Angel 上的 fast unfolding 算法可以有效地發現這些社區。下游的欺詐風險模型可以將這些社區的用戶畫像和網絡特征作為輸入來學習和推到反欺詐策略。該圖數據包含 15 億個節點和 200 億條邊,基于 Spark GraphX 的實現耗時 20 小時,而 Angel 僅需 5 小時。

小結

本文主要介紹了 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,從而可以在雲上運行

上一篇︰數據科學的5個陷阱與缺陷 21個必知的機器學習開源工具,涵蓋5大領域下一篇︰

公眾平台

搜索"raincent"或掃描下面的二維碼

?