深度學習系列:深度學習在騰訊的平臺化和應用實踐(一)
深度學習是近年機器學習領域的重大突破,有著廣泛的應用前景。隨著Google公開Google Brain計劃,業界對深度學習的熱情高漲。騰訊在深度學習領域持續投入,獲得了實際落地的產出。我們準備了四篇文章,闡述深度學習的原理和在騰訊的實 踐,介紹騰訊深度學習平臺Mariana,本文為第一篇。
深度學習(Deep Learning)是近年來機器學習領域的熱點,在語音識別、圖像識別等領域均取得了突破性進展。騰訊提供廣泛的互聯網服務,在2014年第一季度,即擁 有3.96億月活躍用戶的微信,8.48億月活躍用戶的QQ,以及6.44億月活躍用戶的Qzone等平臺,擁有海量數據和眾多應用,深度學習在騰訊有廣 泛的潛在應用場景。
深度學習是近年來機器學習領域最令人矚目的方向。自2006年深度學習界泰斗Geoffrey Hinton在Science雜志上發表Deep Belief Networks [1]的論文后,重新激活了神經網絡的研究,開啟了深度神經網絡的新時代。學術界和工業界對深度學習熱情高漲,并逐漸在語音識別、圖像識別、自然語言處理 等領域獲得突破性進展。深度學習在語音識別領域獲得相對20%到30%的準確率提升,突破了近十年的瓶頸。2012年圖像識別領域在ImageNet圖像 分類競賽中取得了85%的top5準確率 [2],相比前一年74%的準確率有里程碑式的提升,并進一步在2013年獲得89%的準確率。目前Google、非死book、 Microsoft、IBM等國際巨頭,以及國內百度、阿里巴巴等互聯網巨頭爭相布局深度學習。
深度學習通過構建深層神經網絡,來模擬人類大腦的工作原理。如圖1所示,深層神經網絡由一個輸入層,數個隱層,以及一個輸出層構成。每層有若干個神經元,神經元之間有連接權重。每個神經元模擬人類的神經細胞,而結點之間的連接模擬神經細胞之間的連接。
圖1:深度神經網絡的結構
然而,深度學習要在騰訊落地,面臨巨大的挑戰。
首先,深度神經網絡模型復雜,訓練數據多,計算量大。一方面,DNN需要模擬人腦的計算能力,而人腦包含100多億個神經細胞,這要求DNN中神經 元多,神經元間連接數量也相當驚人。從數學的角度看,DNN中每個神經元都包含數學計算(如Sigmoid、ReLU或者Softmax函數),需要估計 的參數量也極大。語音識別和圖像識別應用中,神經元達數萬個,參數數千萬,模型復雜導致計算量大。另一方面,DNN需要大量數據才能訓練出高準確率的模 型。DNN參數量大,模型復雜,為了避免過擬合,需要海量訓練數據。兩方面因素疊加,導致訓練一個模型耗時驚人。以語音識別為例,目前業界通常使用樣本量 達數十億,以CPU單機需要數年才能完成一次訓練,用流行的GPU卡也需要數周才能完成訓練。
其次,深度神經網絡需要支持大模型。以圖像識別為例,已有工作證明通過增加卷積層的filter數量,加大模型深度等,可以獲得更好的模型質量,但 模型參數也隨之增加。然而,以ImageNet 2012競賽冠軍的網絡為例,其占用3.99 GB的顯存,已接近主流GPU的顯存容量,試圖增大模型則會超過GPU顯存范圍。因此,如何支持更大模型是一個大的挑戰。
再次,深度神經網絡訓練收斂難,需要反復多次實驗。深度神經網絡是非線性模型,其代價函數是非凸函數,容易收斂到局部最優解。同時,深度神經網絡的 模型結構、輸入數據處理方式、權重初始化方案、參數配置、激活函數選擇、權重優化方法等均可能對最終效果有較大影響。另外,深度神經網絡的數學基礎研究稍 顯不足。雖然可以通過限制性波爾茲曼機(Restricted Boltzmann Machines,RBMs),或者(DenoisingAutoencoder,DAEs)等產生式建模方法初始化網絡模型,以達到減少陷入局部最優的 風險,但仍然不是徹底的解決方案,仍然需要在實際使用深度神經網絡解決問題的時候,合理的利用海量數據,合理的選擇優化方式。上述原因導致需要技巧、經 驗,基于大量實驗來訓練出一個效果好的模型。
因此,深度學習成為一個效果很好但門檻極高的方向,如何落地產生實際應用效果成為關注的焦點。
面對機遇和挑戰,我們打造了騰訊深度學習平臺Mariana。Mariana包括三個框架:深度神經網絡(Deep Neural Networks,DNN)的GPU數據并行框架,深度卷積神經網絡(Deep ConvolutionalNeural Networks,CNN)的GPU數據并行和模型并行框架,以及DNN CPU集群框架。Mariana通過此三個框架完成并行加速,針對多種應用場景,以解決深度學習訓練極慢的問題;Mariana通過模型并行,支持大模 型;Mariana提供默認算法的并行實現以減少新算法開發量,簡化實驗過程。Mariana面向語音識別、圖像識別、廣告推薦等眾多應用領域。
騰訊深度學習平臺Mariana以GPU服務器為主,每臺服務器配置4或者6塊Nvidia Tesla系列高端科學計算用GPU卡。利用每塊GPU卡2000多個流處理器的強大計算能力,并實現多GPU卡并行以加速訓練。
騰訊深度學習平臺Mariana重點研究多GPU卡的并行化技術,完成DNN的數據并行框架,以及CNN的模型并行和數據并行框架。數據并行和模型 并行是Google分布式大神Jeff Dean和深度學習大佬Andrew Ng在2012年NIPS會議上發表的DistBelief[3] 論文中針對深度學習的CPU集群框架提出的定義。數據并行指將訓練數據劃分為多份,每份數據有一個模型實例進行訓練,再將多個模型實例產生的梯度合并后更 新模型。模型并行指將模型劃分為多個分片,每個分片在一臺服務器,全部分片協同對一份訓練數據進行訓練。我們學習并借鑒了這兩種并行方式,并成功應用于單 機多GPU卡的并行。
DNN的數據并行框架通過同步隨機梯度下降進行訓練。數據并行訓練中,每個GPU卡各自訓練,并各自產生一份梯度值,然后進行參數交換。圖2. 展示了參數交換過程。每臺GPU服務器配置6塊GPU卡,其中四塊通過樹狀的PCIe連接,并與另外兩塊GPU卡通過IOH連接。參數交換過程從邏輯上 看,梯度收集階段將全部梯度值累加起來,然后應用到當前模型以更新參數得到新模型,最后在模型分發階段將新模型下發給全部GPU卡。采用數據并行后,相對 于單卡訓練過程,關鍵的問題是參數交換過程引入額外時間消耗,拖累了并行性能,使得加速比很難提高。我們通過一個精心設計的拓撲完成參數交換,提升整體性 能。此外,我們采用近似的自適應學習率算法,使得支持自適應學習率所需交換的數據量降低了一個數量級。
圖2:DNN GPU框架數據并行的參數交換過程
DNN的數據并行框架在微信語音識別中得到應用。微信中語音識別功能的入口是語音輸入法、語音開放平臺以及長按語音消息轉文本等。對微信語音識別任 務,通過Mariana,識別準確率獲得了極大的提升,目前識別能力已經躋身業界一流水平。同時可以滿足語音業務海量的訓練樣本需求,通過縮短模型更新周 期,使得微信語音業務可以及時滿足各種新業務需求。
卷積神經網絡CNN的模型并行和數據并行框架的結構如下圖所示:
圖3:CNN GPU框架的模型并行和數據并行架構
CNN模型并行和數據并行框架對GPU卡分組,組內兩個GPU卡做模型并行,組間做數據并行。如上圖所示,4個GPU卡分成Worker Group 0和1。組內兩卡各持有CNN模型的一部分,稱為partition,協作完成單個模型的訓練。模型并行中,卡間數據傳輸通過引入Transfer Layer透明的完成。組間數據并行按同步隨機梯度下降進行訓練,并采用精巧的拓撲完成參數交換,但注意只有各組內屬于同一個partition的數據各 自交換,即圖中GPU0和GPU2、GPU1和GPU3分別進行參數交換。引入數據并行和模型并行后,從磁盤讀取訓練數據,訓練數據預處理,CNN訓練分 別占用磁盤、CPU、GPU資源,且均耗時較大。因此,我們引入流水線,使得磁盤、CPU、GPU資源可以同時得到利用,提升整體性能。
CNN數據并行和模型并行框架已在圖像識別應用中初見成效。針對Hinton在2012年獲得ImageNet競賽冠軍用的網絡 [2],我們取得了兩卡模型并行1.71倍加速比,4 GPU卡數據并行加模型并行時比單卡2.52倍的加速比。通過CNN并行框架的模型并行,單個GPU上CNN網絡占用的GPU顯存從3.99 GB減少到2.15 GB,使得可以訓練更大規模的圖像分類模型。通過模型并行獲得ImageNet 2012數據集87%的top5準確率。CNN并行訓練框架在微信圖像業務中有眾多潛在應用都已嘗試接入本框架。同時在廣點通廣告推薦也開始應用探索。
圖4:CNN GPU框架對Hinton的網絡[2]在ImageNet 2012的并行加速性能
DNN CPU集群框架實現基于CPU集群的數據并行和模型并行,其總體架構如下圖所示:
圖5:DNN CPU集群框架總體架構
DNN CPU集群框架提供Vertex+Message的API,實現BulkSynchronous Parallel(BSP)模式。每次DNN訓練作業作為一個DNN Job,其執行包含多個迭代,用戶通過Client工具提交DNN Job。DNN Master負責任務調度,將訓練數據分發到不同的Worker Group進行訓練,并完成任務的failover等,以支持數據并行。Master將DNN Job的狀態變化通過LogStore系統同步到數據庫,便于從WebUI展示全部作業狀態。此外,Master負責Counter的收集,并在 WebUI上可視化展示。每個Worker Group中有1個Coordinator協調全部Worker完成模型并行,而Worker完成具體訓練任務。模型通過參數服務器Parameter Server劃分,并可靠存儲在分布式文件系統中。在微信語音業務中,證明DNN CPU集群可取得與GPU相當的訓練結果,而且CPU集群訓練和GPU訓練框架有互補性。
經過一年多的沉淀,深度學習在騰訊產生了落地的成果。騰訊深度學習平臺Mariana逐步成型,形成了3個框架,包括:DNN GPU數據并行框架,CNN GPU模型并行和數據并行框架,以及DNN CPU集群模型并行和數據并行框架。Mariana通過數據并行和模型并行,解決了深度學習耗時冗長的問題,成為深度學習研究的有效助力。Mariana 通過模型并行,有效支持了大模型。Mariana完成眾多工作增強易用性,簡化深度學習實驗,大幅節約算法開發時間。Mariana的DNN GPU數據并行框架,針對微信語音識別應用,在單機6 GPU卡配置下獲得相比單卡4.6倍的加速,可在數日內完成數十億高維度訓練樣本的DNN模型訓練,同時模型字錯率降低10%以上。Mariana的 CNN模型并行和數據并行框架,針對ImageNet圖像分類問題,在單機4 GPU卡配置下,獲得了相比單卡2.52倍的加速,并支持更大模型,在ImageNet 2012數據集中獲得了87%的top5準確率。目前,騰訊深度學習平臺Mariana已支持了微信語音識別的語音輸入法、語音開放平臺、長按語音消息轉 文本等產品,在微信圖像識別中開始應用。此外,在廣告推薦及個性化推薦等領域,也正在積極探索和實驗中。
參考文獻:
1.Hinton, G. E. andSalakhutdinov, R. R. (2006) Reducing the dimensionality of data with neuralnetworks. Science, Vol. 313. no.5786, pp. 504 – 507, 28 July 2006.
2. Alex Krizhevsky, IlyaSutskever. and Geoffrey E. Hinton. (2012) ImageNet Classification with DeepConvolutional Neural Networks. in Advancesin Neural Information Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.
3. Jeffrey Dean, Greg S. Corrado,Rajat Monga, et al, and Andrew Y. Ng (2012) Large Scale Distributed DeepNetworks. in Advances in NeuralInformation Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.
via:騰訊大講堂
End.