Baidu Create 2018深度學(xué)習(xí)前沿技術(shù)與工業(yè)應(yīng)用公開(kāi)課精彩回顧
原創(chuàng)【51CTO.com原創(chuàng)稿件】中國(guó)開(kāi)發(fā)者們的年度盛會(huì)——百度AI開(kāi)發(fā)者大會(huì)于近日落下帷幕。百度在深度學(xué)習(xí)領(lǐng)域的技術(shù)研發(fā)始于2012年初,一年后,百度在深度學(xué)習(xí)平臺(tái)領(lǐng)域已取得初步成功,并將其應(yīng)用于百度的多項(xiàng)核心業(yè)務(wù)。
百度深度學(xué)習(xí)框架PaddlePaddle自2016年開(kāi)源以來(lái),受到了業(yè)界的廣泛關(guān)注,已經(jīng)成為全球發(fā)展熱度增速最高的開(kāi)源深度學(xué)習(xí)平臺(tái),PaddlePaddle社區(qū)更是匯集了一大批AI技術(shù)開(kāi)發(fā)者。開(kāi)源的模式使PaddlePaddle在近兩年取得了快速發(fā)展和升級(jí),2017年11月百度發(fā)布了更細(xì)粒度的新一代深度學(xué)習(xí)框架——PaddlePaddleFluid,今年7月發(fā)布了PaddlePaddle3.0,這些相繼印證了百度在深度學(xué)習(xí)領(lǐng)域的雄厚實(shí)力。
實(shí)際上,無(wú)人車、智能家電、AI云、AlphaGo等常見(jiàn)的AI應(yīng)用領(lǐng)域,都離不開(kāi)深度學(xué)習(xí)框架的訓(xùn)練和預(yù)測(cè)服務(wù),深度學(xué)習(xí)框架則相當(dāng)于AI時(shí)代的操作系統(tǒng),在AI領(lǐng)域扮演者至關(guān)重要的角色。本次大會(huì)中,深度學(xué)習(xí)框架PaddlePaddle備受開(kāi)發(fā)者們的關(guān)注,深度學(xué)習(xí)前沿技術(shù)與工業(yè)應(yīng)用公開(kāi)課分論壇現(xiàn)場(chǎng)座無(wú)虛席,開(kāi)發(fā)者們擠爆全場(chǎng),不少參會(huì)者甚至坐在地上聽(tīng)完全部課程。
為滿足現(xiàn)場(chǎng)觀眾對(duì)前沿技術(shù)的渴求,本次公開(kāi)課在每輪演講結(jié)束后特意設(shè)置了多輪問(wèn)答環(huán)節(jié),與會(huì)嘉賓積極踴躍地提問(wèn),涉及到實(shí)操性的問(wèn)題時(shí)更是連翻追問(wèn),百度的專家講師團(tuán)紛紛給出了耐心詳細(xì)的解答,會(huì)后參會(huì)者們紛紛表示受益頗豐。
本次公開(kāi)課的課程內(nèi)容涉及到深度學(xué)習(xí)領(lǐng)域的方方面面,包括深度學(xué)習(xí)的語(yǔ)義計(jì)算技術(shù),百度視覺(jué)技術(shù)、OCR遷移至Paddle-Fluid版本的工程實(shí)例,PaddlePaddle的新特性,大規(guī)模稀疏數(shù)據(jù)分布式模型訓(xùn)練,移動(dòng)端深度學(xué)習(xí)技術(shù)及應(yīng)用實(shí)踐,深度學(xué)習(xí)預(yù)測(cè)引擎Anakin的優(yōu)化,以及深度學(xué)習(xí)的可視化等,小編梳理了本屆開(kāi)發(fā)者大會(huì)中百度專家講師們的最新研究及實(shí)踐成果,讓我們一睹為快吧。
深度學(xué)習(xí)公開(kāi)課現(xiàn)場(chǎng)的一角:坐在地上的小伙伴們
百度自主研發(fā)的深度學(xué)習(xí)框架PaddlePaddle
基于深度學(xué)習(xí)的語(yǔ)義計(jì)算技術(shù)
百度產(chǎn)品中常見(jiàn)的語(yǔ)義匹配場(chǎng)景包括百度搜索、百度Feed流以及百度拍照搜索等,分別實(shí)現(xiàn)問(wèn)題與答案匹配、用戶與新聞匹配、圖片與文本匹配的效果。
語(yǔ)義匹配模型包括輸入層、表示層、匹配層和匹配得分四層。
其中表示層需要完成輸入數(shù)據(jù)轉(zhuǎn)化為數(shù)值向量的過(guò)程。
匹配層需要完成兩個(gè)向量融合并產(chǎn)生打分的過(guò)程,表示層和匹配層都可以是一個(gè)深度神經(jīng)網(wǎng)絡(luò)。
上圖是百度常見(jiàn)的訓(xùn)練模型,百度擁有海量的用戶行為日志,包括點(diǎn)擊行為和非點(diǎn)擊行為,這些行為通常暗示一種語(yǔ)義關(guān)系,點(diǎn)擊行為的語(yǔ)義更相關(guān),因此要從海量的用戶行為日志信息中挖掘樣本,提取高質(zhì)量弱標(biāo)記數(shù)據(jù),將語(yǔ)義相關(guān)的數(shù)據(jù)作為正例,語(yǔ)義不太相關(guān)的數(shù)據(jù)作為負(fù)例,Query和正例的打分比Query和負(fù)例的打分大,使𝑺↓+ − 𝑺↓−> 𝝈,通過(guò)定義目標(biāo)函數(shù)來(lái)優(yōu)化神經(jīng)網(wǎng)絡(luò)的參數(shù)。
由于召回端有非常多的結(jié)果,如果用復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型來(lái)計(jì)算匹配度,系統(tǒng)很難承受,因此可以在召回層對(duì)Query做向量表示,將這個(gè)表示離線的計(jì)算出來(lái),可以大大減少計(jì)算開(kāi)銷。在精排階段,在結(jié)果很少的情況下可使用GPU做復(fù)雜的模擬計(jì)算,也就是在匹配層進(jìn)行復(fù)雜計(jì)算。
流行的Encoder, Decoder算法組件, Transformer:下載鏈接
接下來(lái)舉一個(gè)文本生成的例子。我們常用的機(jī)器翻譯模型,其目標(biāo)是把原語(yǔ)言通過(guò)神經(jīng)網(wǎng)絡(luò)建模翻譯成目標(biāo)語(yǔ)言,目前學(xué)術(shù)界對(duì)翻譯模型的抽象都是基于編碼器和解碼器兩個(gè)階段的建模方法?;谟脩糨斎氲脑Z(yǔ)言做Decoder編碼,然后對(duì)Decoder的詞做最大化的測(cè)量估計(jì),在機(jī)器翻譯的解碼過(guò)程中,通常對(duì)用戶輸入的語(yǔ)言做原語(yǔ)言的編碼,通過(guò)Beam Search的方法找到最大可能的翻譯的結(jié)果。Transformer是近兩年比較常用的、效果和速度都比較好的模型,感興趣的開(kāi)發(fā)者不妨跑一跑。
語(yǔ)言模型是自然語(yǔ)言處理中比較經(jīng)典的問(wèn)題,其目標(biāo)是學(xué)習(xí)一個(gè)詞序列的聯(lián)合概率函數(shù),也就是說(shuō)這個(gè)句子是否常見(jiàn)。如世界杯期間,在百度搜索中搜“阿根廷在”這四個(gè)字,“阿根廷在哪個(gè)組”這個(gè)Query的概率較大。
Neural Network Language Model. Bengio. 2003
上圖是神經(jīng)網(wǎng)絡(luò)中較常見(jiàn)的Neural Network Language Model,它是用神經(jīng)網(wǎng)絡(luò)做語(yǔ)言模型的比較常見(jiàn)的模型。
上圖是一個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò),它會(huì)不斷融合歷史和當(dāng)前的信息,因此也是作為語(yǔ)言模型比較常見(jiàn)的侯選。
接下來(lái)介紹一下百度賣方的NLP的計(jì)算服務(wù),在ai.baidu.com網(wǎng)站有很多基于深度學(xué)習(xí)訓(xùn)練的NLP模型的可調(diào)用服務(wù),包括DNN語(yǔ)言模型、詞法分析、短文本相似度、中文情感分析等。百度在NLP方面開(kāi)源了一些基于PaddlePaddle的項(xiàng)目,如NLP里的中文詞法分析,開(kāi)源了整個(gè)模型訓(xùn)練的配置,以及部署的方法,其中基于深度學(xué)習(xí)網(wǎng)絡(luò),融合了切詞、標(biāo)注,以及專名識(shí)別,是三個(gè)任務(wù)融合為一體的一個(gè)開(kāi)源項(xiàng)目。
PaddlePaddle應(yīng)用于百度視覺(jué)技術(shù)的工程實(shí)踐
百度的AI視覺(jué)技術(shù)主要包括四個(gè)方面:圖像識(shí)別、圖像搜索、視頻理解和機(jī)器人視覺(jué)。五年前百度已開(kāi)始將機(jī)器人視覺(jué)全面轉(zhuǎn)向深度學(xué)習(xí)技術(shù),這些技術(shù)大量應(yīng)用于百度內(nèi)部和外部的各種業(yè)務(wù)。
圖像識(shí)別是把圖像生成文本標(biāo)簽,包括通用分類,百度內(nèi)部主要的分類模型有文字識(shí)別、人臉識(shí)別,以及醫(yī)療圖像、圖像審核和一些細(xì)粒度分類等一些特定領(lǐng)域的應(yīng)用,圖像識(shí)別主要使用CNN的分類技術(shù)。
圖像檢索是用深度學(xué)習(xí)定義圖像和圖像之間的關(guān)系,圖像檢索主要應(yīng)用于百度識(shí)圖,包括圖文檢索、相同圖片檢索,相似圖片檢索以及商品圖片檢索等功能。
視頻理解用于視頻分類、視頻標(biāo)簽等,也大量應(yīng)用于監(jiān)控場(chǎng)景下的目標(biāo)跟蹤、人體姿態(tài)跟蹤等。在小視頻帶來(lái)的新型市場(chǎng)環(huán)境下,視頻理解技術(shù)大量應(yīng)用于百度內(nèi)部的業(yè)務(wù)場(chǎng)景中。
機(jī)器人視覺(jué)主要用于一些工業(yè)場(chǎng)景,包括深度傳感器、SLAM、嵌入式視覺(jué)等,使用大量的嵌入式的技術(shù)。
據(jù)現(xiàn)場(chǎng)專家的介紹,這些AI視覺(jué)技術(shù)已經(jīng)開(kāi)放,同時(shí)百度還會(huì)不斷通過(guò)新的數(shù)據(jù)進(jìn)行持續(xù)迭代,提供更加優(yōu)質(zhì)的服務(wù)。
進(jìn)行視覺(jué)技術(shù)研發(fā)的挑戰(zhàn)
百度內(nèi)部有上百個(gè)模型同時(shí)使用,每天會(huì)不斷產(chǎn)生新的數(shù)據(jù),模型迭代需要解決的問(wèn)題主要有三個(gè)方面:一是如何評(píng)價(jià)對(duì)比模型,然后才能選擇最優(yōu)的模型結(jié)構(gòu)或優(yōu)化策略;二是如何快速經(jīng)濟(jì)的訓(xùn)練(復(fù)現(xiàn))這些模型;三是如何沉淀工程和算法經(jīng)驗(yàn),供大家共同使用。百度視覺(jué)技術(shù)研發(fā)的目標(biāo)是使得機(jī)器學(xué)習(xí)流程化、標(biāo)準(zhǔn)化,構(gòu)建模型持續(xù)快速迭代能力。
接下來(lái)介紹一下百度是如何基于PaddlePaddle解決上述問(wèn)題的。
基于PaddlePaddle的模型研發(fā)
百度內(nèi)部有兩種模型的研發(fā),一是基線模型,是一些基礎(chǔ)的視覺(jué)問(wèn)題,如圖像分類、圖像檢測(cè)、圖像跟蹤等,百度將這些問(wèn)題定義為一個(gè)基本的機(jī)器學(xué)習(xí)問(wèn)題。另一種是業(yè)務(wù)模型,就是針對(duì)業(yè)務(wù)場(chǎng)景、業(yè)務(wù)需求來(lái)收集數(shù)據(jù),訓(xùn)練模型。這兩種場(chǎng)景下采用不同的方式,使模型的比較和模型的復(fù)現(xiàn)更加容易。
自2017年P(guān)addlePaddle發(fā)布Fluid版本后,基線模型研發(fā)統(tǒng)一采用開(kāi)源的方式實(shí)現(xiàn),并且通過(guò)開(kāi)源社區(qū)提交基線模型的訓(xùn)練代碼和文檔等研究成果,它的好處在于可以把機(jī)器學(xué)習(xí)的各個(gè)步驟進(jìn)行標(biāo)準(zhǔn)化,包括將訓(xùn)練框架統(tǒng)一到PaddlePaddle的最新版本,數(shù)據(jù)讀取、預(yù)處理、網(wǎng)絡(luò)定義、優(yōu)化參數(shù)等接口均實(shí)現(xiàn)標(biāo)準(zhǔn)化,便于模型對(duì)比。
PaddlePaddle的技術(shù)支持
1、PaddlePaddle提供標(biāo)準(zhǔn)的符合論文實(shí)現(xiàn)的operator實(shí)現(xiàn);
2、通過(guò)PaddlePaddle實(shí)現(xiàn)統(tǒng)一的訓(xùn)練方式,保證單機(jī)單卡、單機(jī)多卡、多機(jī)多卡訓(xùn)練效率和收斂一致性;
3、基于開(kāi)源社區(qū)開(kāi)發(fā)新的視覺(jué)相關(guān)operator。
Paddle-Cloud 集群訓(xùn)練
Paddle-Cloud平臺(tái)的作業(yè)管理
百度內(nèi)部基于PaddlePaddle有一個(gè)較好的實(shí)現(xiàn)模型快速迭代的Paddle-Cloud平臺(tái),基于Kubernetes資源調(diào)度、隊(duì)列管理、用戶管理等于一身,可管理模型訓(xùn)練,可統(tǒng)一管理訓(xùn)練配置,提供Visual-DL的支持。在數(shù)據(jù)讀取方面,Paddle-Cloud平臺(tái)上實(shí)現(xiàn)了統(tǒng)一的數(shù)據(jù)讀取、數(shù)據(jù)倉(cāng)庫(kù)的直讀,保證可以從原始數(shù)據(jù)直接復(fù)現(xiàn)業(yè)務(wù)模型。此外,訓(xùn)練模型可以經(jīng)過(guò)平臺(tái)訓(xùn)練,直接存儲(chǔ)在模型倉(cāng)庫(kù)中,跟存儲(chǔ)打通。
示例:圖像分類模型的論文結(jié)果復(fù)現(xiàn)——復(fù)現(xiàn)標(biāo)準(zhǔn)的分類模型
示例:圖像分類模型的論文結(jié)果復(fù)現(xiàn)——搭建過(guò)程
視覺(jué)模塊:已發(fā)布Paddle視覺(jué)模型
• 圖像分類:image_classification
• 人臉檢測(cè):face_detection
• OCR識(shí)別:ocr_recognition
• 目標(biāo)檢測(cè):object_detection
• 模型轉(zhuǎn)換:image_classification/caffe2fluid
視覺(jué)模塊:開(kāi)發(fā)中的視覺(jué)模型
• 圖像特征學(xué)習(xí)
• OCR end2end
• 定點(diǎn)化訓(xùn)練
未來(lái)會(huì)發(fā)布更多自研模型
• 人臉檢測(cè): 2018 WiderFace 第一名
• 大規(guī)模分類: 2018 Webvision 第一名
• 視頻識(shí)別: 2018 ActivityNet 第一名
工程示例:OCR Paddle-v1 遷移到Paddle-Fluid
下面重點(diǎn)介紹一下OCR的工程示例,OCR于三年前開(kāi)始使用Paddle-V1版本進(jìn)行識(shí)別模型訓(xùn)練,由于V1版本已不是主流的維護(hù)版本,因此要將OCR升級(jí)到最新的Fluid的版本,把訓(xùn)練統(tǒng)一遷移到內(nèi)部的Paddle-Cloud集群,與此同時(shí),百度一些優(yōu)化的預(yù)測(cè)庫(kù)也可以應(yīng)用到最新的OCR預(yù)測(cè)中。
在此背景下,百度在開(kāi)源社區(qū)成立了Paddle-vision聯(lián)合項(xiàng)目組,并在遷移的過(guò)程中實(shí)現(xiàn)了模型研發(fā)、訓(xùn)練遷移和預(yù)測(cè)遷移三大目標(biāo)。
在模型遷移的過(guò)程中,項(xiàng)目組將Paddle的一些特殊OP用Fluid的版本進(jìn)行打平,驗(yàn)證了Paddle-Fluid版本的前向網(wǎng)絡(luò)和Paddle-V1的一致性,同時(shí)也驗(yàn)證了新版本的訓(xùn)練效果。Fluid版本與舊版本Paddle對(duì)齊了模型訓(xùn)練指標(biāo),通過(guò)對(duì)比多種優(yōu)化方法和學(xué)習(xí)率動(dòng)態(tài)調(diào)整策略,使得整個(gè)網(wǎng)絡(luò)的準(zhǔn)確率大幅提升。
模型訓(xùn)練方面,實(shí)現(xiàn)Fluid框架訓(xùn)練OCR英文識(shí)別模型,與舊版本Paddle訓(xùn)練出的模型相比,精度相對(duì)提升1%。此外,還在Paddle-Cloud上實(shí)現(xiàn)了afs數(shù)據(jù)分發(fā),實(shí)現(xiàn)了Paddle-Cloud進(jìn)行單機(jī)單卡、單機(jī)多卡訓(xùn)練OCR識(shí)別模型。
OCR預(yù)測(cè)庫(kù)接入和封裝需要解決的問(wèn)題包括:
1、開(kāi)發(fā)Fluid預(yù)測(cè)庫(kù)框架,實(shí)現(xiàn)統(tǒng)一接口的封裝;
2、實(shí)現(xiàn)Fluid預(yù)測(cè)庫(kù)框架下的多batch預(yù)測(cè);
3、攜手sys anakin團(tuán)隊(duì)優(yōu)化了GPU預(yù)測(cè)速度,加速47%;
4、將fluid-OCR預(yù)測(cè)加入到QA自動(dòng)回歸測(cè)試流程,避免因Paddle升級(jí)而引入新的bug。
在預(yù)測(cè)庫(kù)的接入和封裝方面遇到了不少困難,其中包括封裝的接口與原服務(wù)Tcmalloc兼容、預(yù)測(cè)加速不明顯、新預(yù)測(cè)庫(kù)對(duì)原檢測(cè)系統(tǒng)耗時(shí)的影響大等問(wèn)題。
具體的解決方法如下:
1、在動(dòng)態(tài)庫(kù)里面提供glibc編譯的內(nèi)存釋放接口;
2、與sys anakin團(tuán)隊(duì)合作,優(yōu)化了預(yù)測(cè)速度;
3、fluid默認(rèn)打開(kāi)了openblas的多線程。openblas多線程優(yōu)先級(jí)較高,導(dǎo)致系統(tǒng)默認(rèn)多線程的資源只能分配到單核CPU上,需要服務(wù)顯式關(guān)閉openblas的多線程。
經(jīng)過(guò)一番努力之后,實(shí)現(xiàn)了基于PaddlePaddle Fluid框架訓(xùn)練和預(yù)測(cè)的OCR英文識(shí)別模型上線。成功上線后,整體中英文系統(tǒng)QPS提升7%,每天影響約1500w含英文文本圖像的OCR流量。
模型研發(fā)總結(jié)
1、基于公開(kāi)數(shù)據(jù)集對(duì)齊公開(kāi)算法,保證基線模型正確性,標(biāo)準(zhǔn)化數(shù)據(jù)集合和訓(xùn)練步驟,便于橫向?qū)Ρ取?o:p>
2、基于開(kāi)源方式,百度實(shí)現(xiàn)貢獻(xiàn)到Paddle社區(qū),經(jīng)過(guò)重復(fù)review,提升代碼和文檔質(zhì)量,實(shí)現(xiàn)社區(qū)反饋,技術(shù)積累和問(wèn)題解決。
3、基于PaddlePaddle統(tǒng)一的集群訓(xùn)練方式,實(shí)現(xiàn)一些高級(jí)訓(xùn)練特性的快速集成;Paddlemobile,anakin等團(tuán)隊(duì)針對(duì)不同硬件的優(yōu)化;獨(dú)立的訓(xùn)練QA測(cè)試,保證訓(xùn)練結(jié)果隨版本迭代可復(fù)現(xiàn)。
深度學(xué)習(xí)框架PaddlePaddle的新特性與煉成之路
PaddlePaddle能全面支撐Modeling、Training和Serving下的各種AI場(chǎng)景。
Paddle Modeling
Paddle Modeling涵蓋數(shù)百種計(jì)算operator和layer組網(wǎng);支持序列變長(zhǎng),動(dòng)態(tài)batch size;Pre-trained模型開(kāi)放。
Paddle Training
Paddle Training支持同步,異步分布式;多線程,多GPU,多stream異構(gòu)并行計(jì)算;ring,trainer-pserver拓?fù)洹?o:p>
Paddle Serving
Paddle Serving能實(shí)現(xiàn)服務(wù)器端快速部署;匯編層高度性能優(yōu)化;移動(dòng)端Linux-ARM/iOS/Android/DuerOS多終端支持。
PaddlePaddle Serving靈活適配多種預(yù)測(cè)引擎:
- 靈活融合原生計(jì)算operator與第三方預(yù)測(cè)引擎;
- 默認(rèn)引擎,快速可用;
- 兼容業(yè)內(nèi)流行預(yù)測(cè)引擎TensorRT;
- Anakin,百度開(kāi)源預(yù)測(cè)引擎,性能優(yōu)異。
PaddlePaddle Serving的默認(rèn)引擎:
- 統(tǒng)一的training與serving的基礎(chǔ)架構(gòu)和實(shí)現(xiàn),訓(xùn)后模型快速部署。
- 多pass進(jìn)行圖優(yōu)化。
- CPU MKLDNN高性能加速。
- GPU可以混合調(diào)度TensorRT。
PaddlePaddle核心框架
PaddlePaddle Fluid版本主要包含四大組成部分:Python API;模型改寫與優(yōu)化;訓(xùn)練Runtime;CPU/GPU支持。
Python API支持圖像模型、NLP模型、語(yǔ)音模型、推薦模型等各類模型。Python API大致可分為組網(wǎng)類底層API以及執(zhí)行類底層API兩大類別。組網(wǎng)類底層API包含通用、控制、計(jì)算、優(yōu)化、IO等類型的API。執(zhí)行類底層API包含訓(xùn)練、預(yù)測(cè)、分布式等API。
組網(wǎng)類API
- Variables:Paddle中的變量,可以是Tensor,可以是Parameter,也可以是RPCClient。概念類似高級(jí)語(yǔ)言中的變量,可以有不同類型。
- Layers:Paddle中,用戶配置模型的基礎(chǔ)模塊,Layer表示一個(gè)或者一組緊密關(guān)聯(lián)的計(jì)算,Layers可以通過(guò)輸入輸出連接起來(lái)。
- Block:Block表示一組連續(xù)的計(jì)算邏輯,通常是一個(gè)或多個(gè)順序Layer組成。通常主模型是一個(gè)block0,另外在control flow中,比如while, iflese,也會(huì)單獨(dú)形成一個(gè)子block。
- Control Flow:Paddle支持if-else, while, switch等編程語(yǔ)言中常見(jiàn)的control flow。以確保模型的靈活表達(dá)。control flow通常以block的形式存在。
- Program:包含了1個(gè)或者多個(gè)block,表示一個(gè)完整的模型執(zhí)行單元。執(zhí)行器需要完整的執(zhí)行Program,并保證讀寫關(guān)系符合用戶的預(yù)期。
執(zhí)行類API
執(zhí)行類API
執(zhí)行類API
示例
訓(xùn)練Runtime
訓(xùn)練Runtime
顯存優(yōu)化
- InPlace Activation
- 反向不需要input,并且輸出和輸入的tensor一致,可以直接overwrite input,節(jié)省顯存開(kāi)銷。
- Memory Optimizer
- Live variable analysis:分析每個(gè)Op的live-in和live-out,找到可以將來(lái)被復(fù)用的candidate。在將來(lái)的op output中,如果有match candidate的,復(fù)用candidate,節(jié)省顯存分配。
多卡并行-SSA Graph
- 將模型program轉(zhuǎn)換成一個(gè)可并發(fā)執(zhí)行的Intermediate Representation (IR);利用Static Single Assignment為variable加version,得到一個(gè)正確的依賴關(guān)系;Build Pass中插入通信節(jié)點(diǎn)和額外的依賴關(guān)系。
- 基于圖依賴的執(zhí)行:Input ready的所有operator可以并發(fā)執(zhí)行;Operators在多個(gè)GPU上數(shù)據(jù)并行執(zhí)行;多卡gradient聚合,確保數(shù)據(jù)并行中參數(shù)一致。
多卡并行-Profile
多機(jī)分布式
多機(jī)分布式支持ring、pserver兩種模式。ring:自動(dòng)插入多機(jī)communicator,多機(jī)同步訓(xùn)練,支持高性能RDMA通信。pserver:拆分成trainer program和pserver program。支持同步和異步的分布式訓(xùn)練。Trainer端多線程異步發(fā)送gradient;Pserver端多線程異步apply optimization。
用戶Focus Modeling, 框架自動(dòng)多機(jī)化部署:
- 發(fā)現(xiàn)optimizer operators,parameters, gradients。
- split和assign他們到parameter server上。
- 在trainer和parameter server上插入發(fā)送和接收的通信節(jié)點(diǎn)。
- 生成在trainer執(zhí)行的program。
- 生成在parameter server執(zhí)行的program。
多機(jī)分布式的通信和集群:
- 支持MPI, RPC等通信方式。
- RPC將來(lái)會(huì)換成brpc,并提供原生的RPC+RDMA支持,極大提高通信效率。
- 支持Kubernetes集群部署。
多機(jī)分布式下的容錯(cuò):
- trainer或者pserver failure后可以重啟恢復(fù)訓(xùn)練。
- 即將支持pserver端的分布式checkpoint和恢復(fù),支持大規(guī)模embedding。
大規(guī)模稀疏數(shù)據(jù)分布式模型訓(xùn)練
在互聯(lián)網(wǎng)場(chǎng)景中,億級(jí)的用戶每天產(chǎn)生著百億級(jí)的用戶數(shù)據(jù),百度的搜索和推薦系統(tǒng)是大規(guī)模稀疏數(shù)據(jù)分布式模型訓(xùn)練的主要應(yīng)用場(chǎng)景。
如何利用這些數(shù)據(jù)訓(xùn)練出更好的模型來(lái)給用戶提供服務(wù),對(duì)機(jī)器器學(xué)習(xí)框架提出了很高的要求。主要包括:
- 樣本數(shù)量大,單周20T+。
- 特征維度多達(dá)千億甚至萬(wàn)億。
- T級(jí)別,參數(shù)大。
- 小時(shí)級(jí)更新,時(shí)效要求高。
主要問(wèn)題包括三個(gè)方面:
1. 在千億feature的時(shí)候,一個(gè)寬度8的 embedding table的參數(shù)量2980.23GB。
2. Feature ID使用hash算法計(jì)算,分布在int64范圍內(nèi),難以預(yù)先確定。
3. 輸入特征非常稀疏。(數(shù)百/千億)
分布式查找表(Distribute Lookup Table):
1. 參數(shù)量大:針對(duì)數(shù)據(jù)特點(diǎn)的數(shù)據(jù)結(jié)構(gòu)SelectedRows(key-value);分布式存儲(chǔ);Pserver端 save/load。
2. Feature ID不確定:Auto Growth。
3. 輸入特征稀疏:參數(shù)Prefetch。
系統(tǒng)整體架構(gòu)一
系統(tǒng)整體架構(gòu)二
應(yīng)用優(yōu)化
- Model Average Optimizer:訓(xùn)練中通過(guò)窗⼝累計(jì)歷史parameter,在預(yù)測(cè)時(shí)使用average后的parameter,整體提高預(yù)測(cè)的精度。
- 序列變長(zhǎng):Batch中序列長(zhǎng)度不一,計(jì)算時(shí)無(wú)需填充。
- 動(dòng)態(tài)Batch:訓(xùn)練中,每個(gè)iteration的batch size可變。
移動(dòng)端深度學(xué)習(xí)優(yōu)化
移動(dòng)端深度學(xué)習(xí)具有低延遲、節(jié)省流量、節(jié)省吞吐量和隱私安全四大優(yōu)勢(shì),同時(shí)也面臨著來(lái)自性能、機(jī)型覆蓋、硬件芯片覆蓋、SDK尺寸、內(nèi)存使用、模型尺寸和32位APP限制等多方面的挑戰(zhàn)。
影響移動(dòng)端深度學(xué)習(xí)性能的硬件包括:
- CPU:緩存預(yù)取,Block 對(duì)齊;降低總線帶寬占用;DL預(yù)測(cè)加速。
- GPU:矩陣運(yùn)算,DL預(yù)測(cè)加速;圖形渲染加速。
- DSP/NPU:DSP高通多媒體芯片;NPU華為AI芯片。
- FPGA:AIG合作研發(fā)ARM的AI框架;落地安防監(jiān)控,各類攝像頭場(chǎng)景。
影響移動(dòng)端深度學(xué)習(xí)性能的工具:
- ATrace - 從ftrace中讀取統(tǒng)計(jì)信息然后交給數(shù)據(jù)分析工具來(lái)處理。
- Gprof - gprof精確地給出函數(shù)被調(diào)用的時(shí)間和次數(shù)。
- xcode - instrument 動(dòng)態(tài)調(diào)追蹤和分析OS X和iOS代碼的性能分析。
- streamline - 查看核心數(shù)據(jù)。
影響移動(dòng)端深度學(xué)習(xí)性能的trick包括編譯選項(xiàng)、循環(huán)展開(kāi)、內(nèi)聯(lián)、分支優(yōu)先和匯編。
緩存優(yōu)化
neon優(yōu)化
移動(dòng)端深度學(xué)習(xí)的體積優(yōu)化有編譯選項(xiàng)、避免不必要引入、根據(jù)網(wǎng)絡(luò)適配、定制probuf或者去掉。移動(dòng)端深度學(xué)習(xí)的能效比優(yōu)化從DSP、GPU和AI處理器三方面著手。
百度已與華為、ARM等多家硬件廠商展開(kāi)合作。與華為的合作,基于百度視覺(jué)搜索SDK驗(yàn)證,在圖像分類和主體監(jiān)測(cè)方面,GoogLeNet-V3和squeezenet兩種網(wǎng)絡(luò)CPU與NPU性能對(duì)比,華為AI芯片的NPU加速效果顯著。
百度還與ARM合作,且在Paddle-Mobile 中已經(jīng)融入了ARM的合作成果,在Mali GPU上性能表現(xiàn)優(yōu)異,實(shí)現(xiàn)了在G71 mobilenet 1.0運(yùn)行時(shí)的自動(dòng)切換。
此外,百度專家在本次公開(kāi)課上還分享了深度學(xué)習(xí)預(yù)測(cè)引擎Anakin的優(yōu)化以及深度學(xué)習(xí)的可視化,來(lái)自英特爾人工智能產(chǎn)品事業(yè)部的高級(jí)經(jīng)理Marcin Rysztowski也分享了《PaddlePaddle在Intel平臺(tái)的優(yōu)化》的主題演講。整場(chǎng)公開(kāi)課可謂干貨滿滿,不難看出百度在深度學(xué)習(xí)領(lǐng)域的成果頗豐。
據(jù)了解,為了更好的幫助開(kāi)發(fā)者學(xué)習(xí)深度學(xué)習(xí),PaddlePaddle建立了覆蓋線上、線下的全套課程及培訓(xùn)。PaddlePaddle公開(kāi)課擁有10大系列、400節(jié)課程、累計(jì)學(xué)習(xí)時(shí)間3000分鐘的在線課程體系,可以覆蓋開(kāi)發(fā)者的學(xué)習(xí)全階段。
沒(méi)有到現(xiàn)場(chǎng)聽(tīng)課的小伙伴們也不必感到惋惜和沮喪,本次公開(kāi)課的視頻正在加緊剪輯中,并將在PaddlePaddle的官方微信號(hào)上更新,讓我們共同期待吧。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】