超50万行代码、GitHub 4200星:腾讯重磅发布全栈机器学习平台Angel 3.0
來(lái)源:新智元編輯部
【新智元導(dǎo)讀】騰訊首個(gè)AI開(kāi)源項(xiàng)目Angel,正式發(fā)布一個(gè)里程碑式的版本:Angel 3.0。這是一個(gè)全棧的機(jī)器學(xué)習(xí)平臺(tái),功能特性涵蓋了機(jī)器學(xué)習(xí)的各個(gè)階段,超過(guò)50萬(wàn)行代碼,在 GitHub 上 Star 數(shù)已超過(guò) 4200,Fork 數(shù)超過(guò) 1000。
一個(gè)全棧的機(jī)器學(xué)習(xí)平臺(tái),近日悄悄上線(xiàn)了。
8月22日,騰訊首個(gè)AI開(kāi)源項(xiàng)目Angel正式發(fā)布一個(gè)里程碑式的版本:Angel 3.0。
Angel 3.0嘗試打造一個(gè)全棧的機(jī)器學(xué)習(xí)平臺(tái),功能特性涵蓋了機(jī)器學(xué)習(xí)的各個(gè)階段:特征工程,模型訓(xùn)練,超參數(shù)調(diào)節(jié)和模型服務(wù)。
自2016年年初在騰訊內(nèi)部上線(xiàn)以來(lái),2017 年 6 月, Angel 在 Github上低調(diào)開(kāi)源,截至目前,Angel 在 GitHub 上?Star 數(shù)已超過(guò) 4200,Fork 數(shù)超過(guò) 1000。Angel 項(xiàng)目目前總共有?38 位代碼貢獻(xiàn)者,其他包括?8 位 committer,他們總共提交了超過(guò) 2000 個(gè) commit。
Angel在2017年6月正式開(kāi)源
從1.0到3.0,Angel發(fā)生了巨大的變化,它從一個(gè)單一的模型訓(xùn)練平臺(tái)發(fā)展到涵蓋機(jī)器學(xué)習(xí)各個(gè)流程,包含自己生態(tài)的通用計(jì)算平臺(tái),代碼量也超過(guò)了50萬(wàn)行。
為了讓整個(gè)系統(tǒng)更加的智能,Angel 3.0新增了超參數(shù)調(diào)節(jié)的功能,目前支持3種算法:隨機(jī)搜索,網(wǎng)格搜索和貝葉斯優(yōu)化。
Angel (https://github.com/Angel-ML)是基于參數(shù)服務(wù)器架構(gòu)的分布式計(jì)算平臺(tái),致力于解決稀疏數(shù)據(jù)大模型訓(xùn)練以及大規(guī)模圖數(shù)據(jù)分析問(wèn)題,它由騰訊與北京大學(xué)聯(lián)合研發(fā),兼顧了工業(yè)界的高可用性和學(xué)術(shù)界的創(chuàng)新性。
Angel發(fā)布里程碑版本3.0:全棧機(jī)器學(xué)習(xí)平臺(tái)Angel是騰訊開(kāi)源的大規(guī)模分布式機(jī)器學(xué)習(xí)平臺(tái),專(zhuān)注于稀疏數(shù)據(jù)高維模型的訓(xùn)練。目前Angel是Linux深度學(xué)習(xí)基金會(huì)孵化項(xiàng)目,相比于TensorFlow, PyTorch和Spark等業(yè)界同類(lèi)平臺(tái),她有如下特點(diǎn):
Angel是一個(gè)基于Parameter Server(PS)理念開(kāi)發(fā)的高性能分布式機(jī)器學(xué)習(xí)平臺(tái),它具有靈活的可定制函數(shù)PS Function(PSF),可以將部分計(jì)算下推至PS端。PS架構(gòu)良好的橫向擴(kuò)展能力讓Angel能高效處理千億級(jí)別的模型。
Angel具有專(zhuān)門(mén)為處理高維稀疏特征特別優(yōu)化的數(shù)學(xué)庫(kù),性能可達(dá)breeze數(shù)學(xué)庫(kù)的10倍以上。Angel的PS和內(nèi)置的算法內(nèi)核均構(gòu)建在該數(shù)學(xué)庫(kù)之上。
Angel擅長(zhǎng)推薦模型和圖網(wǎng)絡(luò)模型相關(guān)領(lǐng)域(如社交網(wǎng)絡(luò)分析)。圖1是Angel和幾個(gè)業(yè)界主流平臺(tái)在稀疏數(shù)據(jù),模型維度,性能表現(xiàn),深度模型和生態(tài)建設(shè)幾個(gè)維度的對(duì)比。Tensorflow和PyTouch在深度學(xué)習(xí)領(lǐng)域和生態(tài)建設(shè)方面優(yōu)勢(shì)明顯,但在稀疏數(shù)據(jù)和高維模型方面的處理能力相對(duì)不足,而Angel正好與它們形成互補(bǔ),3.0版本推出的PyTorch On Angel嘗試將PyTorch和Angel的優(yōu)勢(shì)結(jié)合在一起。
圖1 Angel與業(yè)界主流平臺(tái)的對(duì)比
Angel 3.0系統(tǒng)架構(gòu)如圖2所示。
?
圖2 Angel 3.0架構(gòu)
?
Angel自研的高性能數(shù)學(xué)庫(kù)是整個(gè)系統(tǒng)的基礎(chǔ),Angel的PS功能和內(nèi)置的算法內(nèi)核均是在這個(gè)數(shù)學(xué)庫(kù)基礎(chǔ)之上實(shí)現(xiàn)的。
Angel PS提供了高效,穩(wěn)定和靈活的參數(shù)存儲(chǔ)和交換服務(wù)。在3.0版本中,我們對(duì)Angel PS功能進(jìn)行了擴(kuò)展,使得它可以存儲(chǔ)任意類(lèi)型的對(duì)象,一個(gè)典型的例子是在圖算法的實(shí)現(xiàn)過(guò)程中,我們使用Angel PS來(lái)存儲(chǔ)了大量復(fù)雜的對(duì)象。
MLcore是Angel自研的一套算法內(nèi)核,它支持自動(dòng)求導(dǎo),可以使用JSON配置文件定義和運(yùn)行算法。除此之外,在3.0版本中,Angel還集成了PyTorch作為計(jì)算引擎。在計(jì)算引擎層之上是計(jì)算框架,它們可以看作計(jì)算引擎的容器,目前支持3種計(jì)算框架:原生的Angel,Spark On Angel(SONA)和PyTorch On Angel(PyTONA),這些計(jì)算框架可以使得Spark和PyTorch用戶(hù)可以無(wú)縫切換到Angel平臺(tái)。最上層是兩個(gè)公共組件:AutoML和模型服務(wù)。
Angel使用情況如圖3所示,在過(guò)去12個(gè)月,Angel在騰訊內(nèi)部的任務(wù)數(shù)量有了非常明顯的增長(zhǎng),增幅達(dá)到150%。值得一提的是,Spark On Angel的任務(wù)數(shù)增長(zhǎng)了10倍,為了讓Spark On Angel更加的易用,3.0版本對(duì)Spark On Angel做了大幅度升級(jí)。在騰訊內(nèi)部,使用Angel的業(yè)務(wù)包括騰訊視頻,騰訊新聞和微信等。
圖3騰訊內(nèi)部Angel任務(wù)數(shù)
?
Angel官方維護(hù)了一個(gè)QQ群與外部開(kāi)發(fā)者進(jìn)行交流,對(duì)群用戶(hù)的統(tǒng)計(jì)表明:
Angel的絕大部分用戶(hù)來(lái)自中國(guó),主要分布在北京,上海,杭州,成都和深圳等互聯(lián)網(wǎng)行業(yè)比較發(fā)達(dá)的城市。
有超過(guò)100家的公司和科研機(jī)構(gòu)在使用或測(cè)試Angel,其中包括了中國(guó)最頂級(jí)的IT公司:微博,華為和百度等。
?
圖4 Angel開(kāi)源用戶(hù)
?
Angel開(kāi)源圖5 GitHub上Angel的統(tǒng)計(jì)信息以及Angel發(fā)表的論文
?
從2017年6月開(kāi)源以來(lái),Angel受到了較多的關(guān)注,目前在GitHub上Star數(shù)超過(guò)4200,Fork數(shù)超過(guò)1000。Angel項(xiàng)目目前總共有38位代碼貢獻(xiàn)者,其他包括8位committer,他們總共提交了超過(guò)2000個(gè)commit。
?
從1.0到3.0,Angel發(fā)生了巨大的變化,它從一個(gè)單一的模型訓(xùn)練平臺(tái)發(fā)展到涵蓋機(jī)器學(xué)習(xí)各個(gè)流程,包含自己生態(tài)的通用計(jì)算平臺(tái),代碼量也超過(guò)了50萬(wàn)行。為了后續(xù)維護(hù)和使用的方便,Angel拆分成8個(gè)子項(xiàng)目,統(tǒng)一放在Angel-ML目錄下(https://github.com/Angel-ML):angel,PyTorch On Angel,sona,serving,automl,mlcore,math2和format,這些子項(xiàng)目會(huì)在下文詳細(xì)介紹。
?
Angel 3.0新特性圖6 Angel 3.0概覽(紅色的表示新增特性,白色的表示已有的但在持續(xù)改進(jìn)的特性)
?
圖6提供了一個(gè)Angel 3.0特性的整體視圖。Angel 3.0試圖打造一個(gè)全棧的機(jī)器學(xué)習(xí)平臺(tái),它的功能特性涵蓋了機(jī)器學(xué)習(xí)的各個(gè)階段:特征工程,模型訓(xùn)練,超參數(shù)調(diào)節(jié)和模型服務(wù)。
Angel的特征工程模塊基于Spark開(kāi)發(fā),增強(qiáng)了Spark的特征選擇功能,同時(shí)使用特征交叉和重索引實(shí)現(xiàn)了自動(dòng)特征生成。這些組件可以無(wú)縫地整合進(jìn)Spark的流水線(xiàn)。為了讓整個(gè)系統(tǒng)更加的智能,Angel 3.0新增了超參數(shù)調(diào)節(jié)的功能,目前支持3種算法:隨機(jī)搜索,網(wǎng)格搜索和貝葉斯優(yōu)化。在模型服務(wù)方面,Angel 3.0提供了一個(gè)跨平臺(tái)的組件Angel Serving, Angel Serving不僅可以滿(mǎn)足Angel自身的需求,還可以為其他平臺(tái)提供模型服務(wù)。
在生態(tài)方面,Angel也嘗試將PS能力賦能給其他的計(jì)算平臺(tái),目前已經(jīng)完成了Spark On Angel和PyTorch On Angel兩個(gè)平臺(tái)的建設(shè)。這兩個(gè)平臺(tái)各有優(yōu)勢(shì)和側(cè)重, Spark On Angel使用的是Angel內(nèi)置的算法核心,主要負(fù)責(zé)常見(jiàn)推薦領(lǐng)域的機(jī)器學(xué)習(xí)算法和基礎(chǔ)圖算法。PyToch On Angel使用PyTorch作為計(jì)算核心,主要負(fù)責(zé)推薦領(lǐng)域深度學(xué)習(xí)算法和圖深度學(xué)習(xí)算法。
?
自動(dòng)特征工程
特征工程,例如特征交叉和選擇,對(duì)于工業(yè)界的機(jī)器學(xué)習(xí)應(yīng)用具有重要意義。Spark提供了一些特征選擇算子,但是仍有一些局限性。Angel基于Spark提供了更多的特征選擇算子:
基于統(tǒng)計(jì)的運(yùn)算符,包括VarianceSelector和FtestSelector
基于模型的運(yùn)算符,包括LassoSelector和RandomForestSelector
?
大多數(shù)在線(xiàn)推薦系統(tǒng)經(jīng)常選擇線(xiàn)性算法,例如邏輯回歸作為機(jī)器學(xué)習(xí)模型,但邏輯回歸需要復(fù)雜的特征工程才能實(shí)現(xiàn)較高的精度,這使得自動(dòng)特征合成至關(guān)重要。但是,現(xiàn)有的自動(dòng)化的高階特征合成方法帶來(lái)了維度災(zāi)難。為了解決這個(gè)問(wèn)題,Angel實(shí)現(xiàn)了一種迭代生成高階合成特征的方法。每次迭代由兩個(gè)階段組成:
?擴(kuò)增階段:任意特征的笛卡爾積
縮約階段:特征選擇和特征重索引
?
以下是迭代步驟:
首先任意的輸入特征之間通過(guò)笛卡爾積生成合成特征。該步驟后,特征數(shù)量將以二次方式增加·??????接下來(lái),從合成特征中選擇最重要的特征子集(使用例如VarianceSelector和RandomForestSelector)
然后,重新索引所選擇的特征以減少特征空間
最后,合成特征與原始特征拼接在一起
?
圖7自動(dòng)特征工程流程
?
如圖7所示,這種特征合成方法線(xiàn)性地增加特征數(shù)量,避免了維度災(zāi)難。在Higgs數(shù)據(jù)集上的實(shí)驗(yàn)表明合成的特征能有效地提高模型精度(如表1所示)。
LR | FM | Ours | |
AUC | 0.68 | 0.69 | 0.70 |
表1特征合成效果
?
Spark On Angel (SONA)
在Angel 3.0中,我們對(duì)Spark On Angel做了大幅度的優(yōu)化,添加了下面這些新的特性:
Spark On Angel中集成了特征工程。在集成的過(guò)程中并不是簡(jiǎn)單地借用Spark的特征工程,我們?yōu)樗械倪\(yùn)算支持了長(zhǎng)整型索引的向量使其能夠訓(xùn)練高維稀疏模型
與自動(dòng)調(diào)參無(wú)縫連接
Spark用戶(hù)能夠通過(guò)Spark-fashion API毫不費(fèi)力的將Spark轉(zhuǎn)換成Angel
支持兩種新的數(shù)據(jù)格式:LibFFM 和Dummy
圖8 Spark On Angel架構(gòu)
?
除了這些大的特征,我們也在持續(xù)完善Spark On Angel的算法庫(kù):添加了一些新的算法,如:Deep & Cross Network (DCN) 和 Attention Factorization Machines (AFM)等;同時(shí)對(duì)已有的算法做了大量的優(yōu)化,例如對(duì)LINE和K-Core算法進(jìn)行了重構(gòu),重構(gòu)后的算法性能和穩(wěn)定性都有大幅度提升。
從圖9中可以看出,Spark On Angel中的算法與Spark中的算法存在顯著的不同,如:基于Spark On Angel的算法主要是針對(duì)推薦和圖領(lǐng)域,然而Spark中的算法更通用。
圖9 Spark與Spark On Angel算法比較
圖10 Spark On Angel算法示例
?
圖10提供了一個(gè)基于Spark On Angel的分布式算法示例,主要包含以下步驟:
·??????在程序開(kāi)始時(shí)啟動(dòng)參數(shù)服務(wù)器,程序結(jié)束時(shí)關(guān)閉參數(shù)服務(wù)器
·??????將訓(xùn)練集和測(cè)試集以Spark DataFrame形式加載
·??????定義一個(gè)Angel模型并以Spark的參數(shù)設(shè)置方式為其設(shè)置參數(shù)。在這個(gè)示例中,算法是一個(gè)通過(guò)JSON定義的計(jì)算圖
·??????使用“fit”方法來(lái)訓(xùn)練模型
·??????使用“evaluate”方法來(lái)評(píng)估已訓(xùn)練的模型
?
在訓(xùn)練完成后,Spark On Angel將會(huì)展示多種模型指標(biāo),如:準(zhǔn)確率, ROC 曲線(xiàn), AUC等。用戶(hù)可以保存訓(xùn)練好的模型以便下次使用。
?
圖11 Spark On Angel和TensorFlow性能比較
?
我們?cè)趦煞N流行的推薦算法Deep & Wide 和 DeepFM上使用了相同的資源和數(shù)據(jù)集比較了Spark On Angel和Tensorflow的性能。如圖11所示,在Deep & Wide算法上Spark On Angel比Tensorflow快3倍,而在DeepFM算法上Tensorflow運(yùn)行稍快一些。
PyTorch On Angel(PyTONA)
PyTorch On Angel是Angel 3.0新增的特性,它主要是為了解決大規(guī)模圖表示學(xué)習(xí)和深度學(xué)習(xí)模型訓(xùn)練問(wèn)題。
在過(guò)去幾年時(shí)間,圖卷積神經(jīng)網(wǎng)絡(luò)(GNN)快速發(fā)展,一系列的研究論文以及相關(guān)的算法問(wèn)世:例如GCN,GraphSAGE和GAT等,研究和測(cè)試結(jié)果表明,它們能夠比傳統(tǒng)圖表示學(xué)習(xí)更好的抽取圖特征。騰訊擁有龐大的社交網(wǎng)絡(luò)(QQ和微信),同時(shí)擁有大量對(duì)圖數(shù)據(jù)進(jìn)行分析的需求,而圖表示學(xué)習(xí)正是這些分析的基礎(chǔ),因此騰訊內(nèi)部對(duì)GNN有著強(qiáng)烈的需求,這也是我們開(kāi)發(fā)PyTorch On Angel的主要原因之一。
大規(guī)模圖的表示學(xué)習(xí)面臨著兩個(gè)主要的挑戰(zhàn):第一個(gè)挑戰(zhàn)來(lái)自于超大規(guī)模圖結(jié)構(gòu)的存儲(chǔ)以及訪(fǎng)問(wèn),這要求系統(tǒng)不僅能存得下,還需要提供高效的訪(fǎng)問(wèn)接口,例如需要提供高效的訪(fǎng)問(wèn)任意節(jié)點(diǎn)的兩跳鄰居的接口;第二個(gè)挑戰(zhàn)來(lái)自于GNN計(jì)算過(guò)程,它需要有高效的自動(dòng)求導(dǎo)模塊。
通過(guò)對(duì)Angel自身狀況以及對(duì)業(yè)界已有系統(tǒng)的分析,我們得到如下結(jié)論:
TensorFlow和PyTorch擁有高效的自動(dòng)求導(dǎo)模塊,但是它們不擅長(zhǎng)處理高維度模型和稀疏數(shù)據(jù)
Angel擅長(zhǎng)處理高維度模型和稀疏數(shù)據(jù),雖然Angel自研的計(jì)算圖框架(MLcore)也可以自動(dòng)求導(dǎo),但是在效率和功能完整性上卻不及TensorFlow和PyTorch,無(wú)法滿(mǎn)足GNN的要求
?
為了將兩者的優(yōu)勢(shì)結(jié)合起來(lái),我們基于Angel PS開(kāi)發(fā)了PyTorch On Angel平臺(tái),基本思路是使用Angel PS來(lái)存儲(chǔ)大模型,使用Spark來(lái)作為PyTorch的分布式調(diào)度平臺(tái),也就是在在Spark的Executor中調(diào)用PyTorch來(lái)完成計(jì)算。
PyTorch On Angel的架構(gòu)如圖12所示:
圖12 PyTorch On Angel系統(tǒng)架構(gòu)
?
PyTorch On Angel擁有3個(gè)主要的組件:
·????? Angel PS:存儲(chǔ)模型參數(shù),圖結(jié)構(gòu)信息和節(jié)點(diǎn)特征等,并且提供模型參數(shù)和圖相關(guān)數(shù)據(jù)結(jié)構(gòu)的訪(fǎng)問(wèn)接口,例如需要提供兩跳鄰接訪(fǎng)問(wèn)接口
·????? Spark Driver:中央控制節(jié)點(diǎn),負(fù)責(zé)計(jì)算任務(wù)的調(diào)度和一些全局的控制功能,例如發(fā)起創(chuàng)建矩陣,初始化模型,保存模型,寫(xiě)checkpoint以及恢復(fù)模型命令
·????? Spark Worker:讀取計(jì)算數(shù)據(jù),同時(shí)從PS上拉取模型參數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)等信息,然后將這些訓(xùn)練數(shù)據(jù)參數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)傳給PyTorch,PyTorch負(fù)責(zé)具體的計(jì)算并且返回梯度,最后Spark Worker將梯度推送到PS更新模型
?
當(dāng)然,這些細(xì)節(jié)都是封裝好的,算法開(kāi)發(fā)人員和用戶(hù)并不需要了解。在PyTorch On Angel平臺(tái)上開(kāi)發(fā)新算法,只需要關(guān)注算法邏輯即可,與開(kāi)發(fā)單機(jī)的PyTorch算法并沒(méi)有太大區(qū)別。下面給出一個(gè)2層GCN算法的實(shí)現(xiàn)例子:
圖13在PyTorch On Angel上實(shí)現(xiàn)GCN的例子
算法開(kāi)發(fā)完成后,將代碼保存為pt文件,然后將pt文件提交給PyTorch On Angel平臺(tái)就可以實(shí)現(xiàn)分布式訓(xùn)練了。
我們已經(jīng)在PyTorch On Angel上實(shí)現(xiàn)了許多算法:包括推薦領(lǐng)域常見(jiàn)的算法(FM,DeepFM,Wide & Deep,xDeepFM,AttentionFM, DCN和PNN等)和GNN算法(GCN和GraphSAGE)。在后續(xù)的版本迭代中,我們將會(huì)進(jìn)一步豐富PyTorch On Angel的算法庫(kù)。
由于結(jié)合了PyTorch和Angel的優(yōu)點(diǎn),PyTorch On Angel在算法性能方面有很大的優(yōu)勢(shì):對(duì)于推薦領(lǐng)域常見(jiàn)的深度學(xué)習(xí)算法,性能可以達(dá)到TensorFlow的4倍以上;對(duì)于GNN算法,性能也遠(yuǎn)好于目前業(yè)界開(kāi)源的同類(lèi)型平臺(tái)(具體的性能數(shù)據(jù)會(huì)在開(kāi)源社區(qū)陸續(xù)公開(kāi))。下圖是在公開(kāi)的數(shù)據(jù)集criteo kaggle2014(4500萬(wàn)訓(xùn)練樣本,100w特征)上做的對(duì)比測(cè)試:
圖14 PyTorch On Angel和TensorFlow性能對(duì)比測(cè)試
?
除了性能方面的優(yōu)勢(shì),PyTorch On Angel還有一個(gè)比較大的優(yōu)勢(shì)就是易用性好。如圖12所示:PyTorch運(yùn)行在Spark的Executor中,可以實(shí)現(xiàn)Spark圖數(shù)據(jù)預(yù)處理和PyTorch模型訓(xùn)練的無(wú)縫對(duì)接,在一個(gè)程序中完成整個(gè)計(jì)算過(guò)程。
?
自動(dòng)超參數(shù)調(diào)節(jié)
傳統(tǒng)超參數(shù)調(diào)節(jié)的方式有兩種(如圖15所示):
·??????網(wǎng)格搜索:網(wǎng)格搜索將整個(gè)搜索空間切分為網(wǎng)格,假設(shè)超參數(shù)是同等重要的。這種方式雖然直觀,但有兩個(gè)明顯的缺點(diǎn):1)計(jì)算代價(jià)隨參數(shù)數(shù)量的增長(zhǎng)而呈指數(shù)增長(zhǎng);2)超參數(shù)的重要程度常常是不同的,網(wǎng)格搜索可能會(huì)花費(fèi)太多精力來(lái)優(yōu)化不太重要的超參數(shù)
·??????隨機(jī)搜索:隨機(jī)采樣超參數(shù)組合,并評(píng)估抽樣組合。雖然這種方法有可能關(guān)注更重要的超參數(shù),但是仍無(wú)法保證找到最佳組合
圖15網(wǎng)格搜索和隨機(jī)搜索
?
貝葉斯優(yōu)化與傳統(tǒng)的無(wú)模型方法不同,使用計(jì)算成本較低的代理函數(shù)(surrogate function)來(lái)近似原始目標(biāo)函數(shù)。在貝葉斯優(yōu)化中,代理函數(shù)生成超參數(shù)組合的概率均值和方差。然后,效用函數(shù)(acquisition function)將評(píng)估超參數(shù)組合的預(yù)期損失或改進(jìn)。這樣的概率解釋方法使貝葉斯優(yōu)化能夠使用少得多的開(kāi)銷(xiāo)找到目標(biāo)函數(shù)的較優(yōu)解。
Angel 3.0包括傳統(tǒng)的兩種方法和貝葉斯算法優(yōu)化。對(duì)貝葉斯優(yōu)化,Angel實(shí)現(xiàn)了以下的功能:
代理函數(shù)。除了常用的兩種模型(高斯過(guò)程和隨機(jī)森林),也實(shí)現(xiàn)了EM + LBFGS優(yōu)化高斯過(guò)程內(nèi)核函數(shù)中的超參數(shù)
效用函數(shù):實(shí)現(xiàn)了PI(Probability of improvement),EI(Expected Improvement)和UCB(Upper Confidence Bound)
?
由于每次評(píng)估目標(biāo)函數(shù)的計(jì)算開(kāi)銷(xiāo)可能較大,如果觀察到候選的超參數(shù)組合在開(kāi)始的若干輪迭代中表現(xiàn)不佳,可以提前停止這些候選超參數(shù)組合。Angel 3.0版本中實(shí)現(xiàn)了這種早停策略。
表2是在邏輯回歸算法的實(shí)驗(yàn),調(diào)節(jié)的超參數(shù)是學(xué)習(xí)速度和學(xué)習(xí)速度衰減率,結(jié)果顯示貝葉斯優(yōu)化的性能優(yōu)于隨機(jī)搜索和網(wǎng)格搜索,而隨機(jī)搜索的結(jié)果略?xún)?yōu)于網(wǎng)格搜索
Random | Grid | GP | |
AUC | 0.926 | 0.924 | 0.933 |
表2不同超參數(shù)自動(dòng)條件方法的效果對(duì)比
?
Angel Serving為了滿(mǎn)足在生產(chǎn)環(huán)境中高效地進(jìn)行模型服務(wù)的需求,我們?cè)贏ngel 3.0中實(shí)現(xiàn)了Angel Serving子系統(tǒng),它是一個(gè)可拓展性強(qiáng)、高性能的機(jī)器學(xué)習(xí)模型服務(wù)系統(tǒng),是全棧式機(jī)器學(xué)習(xí)平臺(tái)Angel的上層服務(wù)入口,使Angel生態(tài)能夠形成閉環(huán)。圖16展示了Angel Serving的架構(gòu)設(shè)計(jì)。
圖16 Angel Serving架構(gòu)
?
Angel Serving主要特征包括:
1)支持多種類(lèi)型的API訪(fǎng)問(wèn)服務(wù),包括gRPC和Restful 接口;
2)Angel Serving是一個(gè)通用的機(jī)器學(xué)習(xí)服務(wù)框架,可插拔機(jī)制設(shè)計(jì)使得來(lái)自其他第三方機(jī)器學(xué)習(xí)平臺(tái)的模型可以很容易使用Angel Serving來(lái)服務(wù),目前已經(jīng)支持三種平臺(tái)的模型:Angel,PyTorch和支持PMML模型格式的平臺(tái)(Spark、XGBoost等);
3)受TensorFlow Serving的啟發(fā),Angel Serving還提供細(xì)粒度版本控制策略:包括使用模型的最早,最新以及指定版本進(jìn)行服務(wù);
4)Angel Serving還提供豐富的的模型服務(wù)監(jiān)控指標(biāo),包括:
QPS: 每秒請(qǐng)求數(shù)
- 總的請(qǐng)求數(shù)以及成功請(qǐng)求總數(shù)
- 請(qǐng)求的響應(yīng)時(shí)間分布
- 平均響應(yīng)時(shí)間
| Angel Serving | TensorFlow Serving | |
| 總耗時(shí)(s) | 56 | 59 |
| 最小響應(yīng)時(shí)間(ms) | 1 | 1 |
| 平均響應(yīng)時(shí)間(ms) | 2 | 2 |
| 99% 分位響應(yīng)時(shí)間(ms) | 2 | 3 |
| QPS | 1900 | 1800 |
案例一:騰訊短視頻推薦
圖17短視頻推薦數(shù)據(jù)處理流程上圖所示是騰訊短視頻部門(mén)的一個(gè)使用案例。用戶(hù)的視頻播放日志和上下文信息被實(shí)時(shí)轉(zhuǎn)發(fā)給Kafka,流數(shù)據(jù)引擎Storm訂閱Kafka的數(shù)據(jù)。Storm是一個(gè)實(shí)時(shí)的特征生成器,它從一個(gè)離線(xiàn)的key-value存儲(chǔ)中獲得用戶(hù)畫(huà)像和視頻信息,將兩者拼接起來(lái)生成特征。生成的特征被傳輸?shù)皆诰€(xiàn)訓(xùn)練系統(tǒng)中來(lái)更新在線(xiàn)模型;同時(shí),這些特征也被轉(zhuǎn)存到HDFS作為離線(xiàn)訓(xùn)練的輸入。離線(xiàn)模型通常用來(lái)初始化在線(xiàn)訓(xùn)練系統(tǒng),當(dāng)出現(xiàn)異常時(shí),離線(xiàn)模型還可以用來(lái)重置在線(xiàn)系統(tǒng)。本案例用到的推薦算法是FM,訓(xùn)練樣本24億條,特征維度為63611,在Spark上訓(xùn)練耗時(shí)10多個(gè)小時(shí),應(yīng)用Angel后減少至1小時(shí)。案例二:金融反欺詐
圖18金融反欺詐數(shù)據(jù)處理流程金融欺詐檢測(cè)是大規(guī)模圖學(xué)習(xí)的常見(jiàn)案例,其網(wǎng)絡(luò)數(shù)據(jù)是異構(gòu)的,包含幾種不同類(lèi)型的邊:·?????? 交易關(guān)系:用戶(hù)A和用戶(hù)B之間如存在交易關(guān)系表明他們之間曾出現(xiàn)過(guò)交易行為·?????? 設(shè)備關(guān)系:用戶(hù)A和用戶(hù)B之間如存在設(shè)備關(guān)系表明他們?cè)蚕磉^(guò)同一個(gè)設(shè)備·?????? Wi-Fi關(guān)系:用戶(hù)A和用戶(hù)B之間如存在Wi-Fi關(guān)系表明他們?cè)ㄟ^(guò)一個(gè)Wi-Fi連接到互聯(lián)網(wǎng)金融詐騙者通常共享設(shè)備和Wi-Fi,通過(guò)擴(kuò)展邊緣關(guān)系生成社區(qū)。Angel上的fast unfolding算法可以有效地發(fā)現(xiàn)這些社區(qū)。下游的欺詐風(fēng)險(xiǎn)模型可以將這些社區(qū)的用戶(hù)畫(huà)像和網(wǎng)絡(luò)特征作為輸入來(lái)學(xué)習(xí)和推到反欺詐策略。該圖數(shù)據(jù)包含15億個(gè)節(jié)點(diǎn)和200億條邊,基于Spark GraphX的實(shí)現(xiàn)耗時(shí)20小時(shí),而Angel僅需5小時(shí)。小結(jié)本文主要介紹了Angel在騰訊內(nèi)外的使用情況和3.0版本的新特性。Angel在騰訊內(nèi)外的使用情況:
騰訊內(nèi)部:用戶(hù)數(shù)和任務(wù)數(shù)增加1.5倍
騰訊外部:超過(guò)100多家公司和機(jī)構(gòu)使用Angel
開(kāi)源貢獻(xiàn):4200多個(gè)star, 8個(gè)子項(xiàng)目,1100多個(gè)fork,2000多次commits
Angel 3.0新特性:
新的計(jì)算引擎:
- SONA(加強(qiáng)):特征工程支持索引為L(zhǎng)ong類(lèi)型的向量;所有的算法被封裝成Spark風(fēng)格的APIs;SONA上的算法可以作為Spark的補(bǔ)充
- PyTONA(新):PyTONA作為圖學(xué)習(xí)算法的引擎被引入,目前支持GCN和GraphSage,同時(shí)也支持推薦領(lǐng)域的算法。PyTONA采用Python作為交互,因此是用戶(hù)友好的
- 自動(dòng)機(jī)器學(xué)習(xí):Angel3.0引入了3種超參數(shù)調(diào)節(jié)算法:網(wǎng)格搜索、隨機(jī)搜索和貝葉斯優(yōu)化
- Angel模型服務(wù):Angel提供一個(gè)跨平臺(tái)的模型服務(wù)框架,支持Angel、PyTorch和Spark的模型,性能上與TensorFlow Serving相當(dāng)
- 支持Kubernetes:Angel3.0支持Kubernetes,從而可以在云上運(yùn)行?
Angel開(kāi)源地址:
https://github.com/Angel-ML
總結(jié)
以上是生活随笔為你收集整理的超50万行代码、GitHub 4200星:腾讯重磅发布全栈机器学习平台Angel 3.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 知乎上 40 个有趣回复,很精辟!
- 下一篇: 【漫画】程序猿 996 会猝死,而企业家