馬艷軍,于佃海,吳甜,王海峰
百度公司,北京 100085
深度學習已成為最有影響的人工智能關(guān)鍵共性技術(shù)。人們在使用深度學習技術(shù)進行科學實驗或產(chǎn)品研發(fā)時,通常都是基于某個深度學習框架開展工作。深度學習框架處于硬件層和應(yīng)用層之間,不僅支撐人工智能應(yīng)用的開發(fā),對人工智能芯片的設(shè)計也有很大影響,是智能時代的操作系統(tǒng)。因此,業(yè)界普遍認為,深度學習框架與人工智能芯片,構(gòu)成人工智能領(lǐng)域最為核心的兩項“基礎(chǔ)設(shè)施”。目前,基于深度學習的人工智能的應(yīng)用場景正在極大豐富,并內(nèi)置到終端和云端,讓人工智能技術(shù)更快速地普及到各行各業(yè),推動融合創(chuàng)新。在全球人工智能爭奪戰(zhàn)中,各國都企圖占領(lǐng)深度學習框架這一制高點,進而全面把控人工智能生態(tài)鏈,形成新的壟斷。因此,發(fā)展我國自主的深度學習框架,建立人工智能關(guān)鍵共性技術(shù)體系,對于捍衛(wèi)我國科技安全有重要的戰(zhàn)略意義。
深度學習框架最初主要用于深度學習的科研工作,代表性開源深度學習框架包括Theano[1](2010,蒙特利爾大學)、Caffe[2](2013,加州大學伯克利分校)等。近年來,國外的大型科技公司開始紛紛布局這一領(lǐng)域并開源,影響力比較大的包括谷歌的TensorFlow[3](2015)和臉書的 PyTorch[4](2017)。飛槳[5](PaddlePaddle)是國內(nèi)首個也是當前唯一一個功能完備的開源深度學習平臺,基于百度在深度學習領(lǐng)域的長期積累自主研發(fā),并在2016年開源。
本文的組織結(jié)構(gòu)如下:引言部分主要介紹深度學習框架意義和國內(nèi)外現(xiàn)狀;第一節(jié)介紹飛槳深度學習平臺的技術(shù)全景和生態(tài)建設(shè)進展;第二節(jié)詳解飛槳核心框架的關(guān)鍵技術(shù);第三節(jié)總結(jié)飛槳深度學習平臺的主要創(chuàng)新點;最后進行總結(jié)和展望。
百度從2012年開始研發(fā)具備完全自主知識產(chǎn)權(quán)的深度學習框架飛槳,并建成了國內(nèi)唯一的集深度學習訓練和預測框架、模型庫、工具組件等為一體的開源深度學習平臺。飛槳的全景圖如圖1所示。
1.1.1 核心框架
核心框架是飛槳平臺的基礎(chǔ)和核心,主要包括工業(yè)級的深度學習訓練和預測框架。目前深度學習框架主要有動態(tài)圖和靜態(tài)圖兩種編程方式。靜態(tài)圖屬于符號化編程,代碼執(zhí)行的時候不會返回運算的結(jié)果,需要事先定義神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),然后執(zhí)行整個圖結(jié)構(gòu);而動態(tài)圖屬于命令式編程,代碼能夠直接返回運算的結(jié)果。通常來說,靜態(tài)圖能夠?qū)幾g器做最大的優(yōu)化,更有利于性能的提升,而動態(tài)圖則非常便于用戶對程序進行調(diào)試。
飛槳的訓練框架源自百度海量規(guī)模的業(yè)務(wù)場景實踐,提供了大規(guī)模分布式訓練和工業(yè)級數(shù)據(jù)處理的能力,同時支持稠密參數(shù)和稀疏參數(shù)場景的超大規(guī)模深度學習并行訓練,支持萬億規(guī)模參數(shù)、數(shù)百個節(jié)點的高效并行訓練。面對實際業(yè)務(wù)上數(shù)據(jù)實時變化或者膨脹的特點,對模型做流式更新,可提供實時更新的能力。
對于模型的部署,飛槳提供了針對服務(wù)器端在線服務(wù)(Paddle Serving)和移動端部署庫(Paddle Lite)。Paddle Serving是在線預測部分,可以與模型訓練環(huán)節(jié)無縫銜接,提供深度學習的預測云服務(wù)。開發(fā)者也可以對預測庫編譯或直接下載編譯好的預測庫后,調(diào)用預測應(yīng)用程序編程接口(Application Programming Interface,API),對模型進行 C++ 預測。在移動端,Paddle Lite支持將模型部署到ARM CPU(Advanced Reduced instruction set computing Machine Central Processing Unit),Mali GPU(Graphics Processing Unit),Adreno GPU,樹莓派等各種硬件以及安卓、蘋果、Linux等軟件系統(tǒng)之上。
圖1 飛槳全景圖Fig.1 PaddlePaddle overview
飛槳開源了計算機視覺、自然語言處理、推薦和語音四大類70多個官方模型,覆蓋了各領(lǐng)域的主流和前沿模型。其中飛槳視覺模型庫(PaddleCV)提供了圖像分類、目標檢測、圖像分割、關(guān)鍵點檢測、圖像生成、文字識別、度量學習和視頻分類與動作定位等多類視覺算法模型。飛槳自然語言處理模型庫(PaddleNLP)包括了詞法分析、語言模型、語義表示和文本生成等多項自然語言處理任務(wù)的算法模型實現(xiàn),包括百度自研的增強語義表示模型ERNIE[6](Enhanced Representation from kNowledge IntEgration)。ERNIE通過建模海量數(shù)據(jù)中的詞、實體及實體關(guān)系,直接對先驗語義知識單元進行建模。與谷歌語義表示模型BERT[7](Bidirectional Encoder Representation from Transformers)相比,BERT僅學習原始語言信號,ERNIE增強了模型語義表示能力。
1.1.2 工具組件
飛槳開源了遷移學習(PaddleHub)、強化學習(PARL)、自動化網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(AutoDL Design)、訓練可視化(VisualDL)、彈性深度學習(EDL)和圖神經(jīng)網(wǎng)絡(luò)(PGL)等一系列深度學習的工具組件,用于配合深度學習相關(guān)技術(shù)的開發(fā)、訓練、部署和應(yīng)用。PaddleHub是飛槳預訓練模型管理和遷移學習工具,便于用戶將預訓練模型更好地適配到自己的應(yīng)用場景。PARL是飛槳深度強化學習工具,曾獲得NeurIPS 2018假肢挑戰(zhàn)賽冠軍。PARL不僅提供了DQN[8]、DDPG[9]、PPO[10]等主流強化學習模型,還提供了 IMPALA[11]、GA3C[12]、A2C[13]等并行算法,以及相應(yīng)的并行開發(fā)接口。AutoDL Design是飛槳自動化網(wǎng)絡(luò)設(shè)計工具,基于強化學習實現(xiàn),在CIFAR10數(shù)據(jù)上準確率超過98%。VisualDL是一個面向深度學習任務(wù)的可視化工具,原生支持Python的使用,只需在模型中增加少量的代碼,對VisualDL接口進行調(diào)用,便可以為訓練過程提供豐富的可視化支持。EDL通過與Kubernetes協(xié)作來實現(xiàn)彈性作業(yè)調(diào)度,能夠支持飛槳在人工智能(Artificial Intelligence,AI)云上進行彈性調(diào)度。PGL是飛槳圖神經(jīng)網(wǎng)絡(luò)工具,提供Python接口用于存儲/讀取/查詢圖數(shù)據(jù)結(jié)構(gòu),并且提供基于游走(Walk-based)以及消息傳遞(Message Passing)兩種計算范式的計算接口。利用這些接口,可以搭建不同的圖學習算法。
1.1.3 服務(wù)平臺
飛槳提供了包含EasyDL、AI Studio和EasyEdge的服務(wù)平臺,可以滿足不同層次開發(fā)者的深度學習開發(fā)需求。EasyDL是定制化訓練和服務(wù)平臺,為企業(yè)用戶和開發(fā)者提供高精度的AI模型定制服務(wù),已在零售、工業(yè)、安防、醫(yī)療、互聯(lián)網(wǎng)、物流等20多個行業(yè)中落地應(yīng)用。AI Studio是針對學習者的在線一體化開發(fā)實訓平臺,集合了AI教程、深度學習樣例工程、各領(lǐng)域的經(jīng)典數(shù)據(jù)集、云端的運算及存儲資源、以及比賽平臺和社區(qū),可以支撐高校老師進行AI教學。EasyEdge是基于Paddle Lite研發(fā)的端計算模型生成平臺,能夠幫助深度學習開發(fā)者將自建模型快速部署到設(shè)備端。開發(fā)者只需上傳模型,最快2分種即可生成端計算模型并獲取軟件開發(fā)工具包(Software Development Kit,SDK)。
飛槳為企業(yè)開發(fā)者提供不同層次的培養(yǎng)體系,幫助開發(fā)者成長,助力企業(yè)AI創(chuàng)新。具體包括黃埔學院、AI快車道、PaddleCamp等。其中,黃埔學院致力于為中國產(chǎn)業(yè)界培養(yǎng)第一批首席AI架構(gòu)師;AI快車道側(cè)重應(yīng)用實戰(zhàn),為1000家企業(yè)提供深度學習技術(shù)應(yīng)用落地支持;PaddleCamp面向深度學習初學者進行入門培訓。除了以上培訓,飛槳還持續(xù)提供豐富的AI開發(fā)者競賽,構(gòu)建開發(fā)者生態(tài)體系。此外,飛槳還通過深度學習師資培訓班、在線教育平臺和深度學習工程師能力評估標準等助力高校與教育機構(gòu)快速搭建完整的AI教學體系。
目前,飛槳在開源社區(qū)中的活躍度較高,已經(jīng)覆蓋超過16000家企業(yè)和130萬名開發(fā)者。隨著在開源社區(qū)的影響力逐步增強,包括英特爾、英偉達、華為、寒武紀、比特大陸等諸多芯片廠商也紛紛支持飛槳,并基于此開展合作。后續(xù)飛槳還需要在如下幾個方面進一步完善:核心框架的高層API目前還比較缺乏,易用性有待進一步提升;基于飛槳的學術(shù)論文還不夠多,生態(tài)還需要持續(xù)加大力度建設(shè)等。
飛槳深度學習框架核心技術(shù),主要包括前端語言、組網(wǎng)編程范式、核心架構(gòu)、算子庫以及高效率計算核心五部分。
為了方便用戶使用,選擇Python作為模型開發(fā)和執(zhí)行調(diào)用的主要前端語言,并提供了豐富的編程接口API。Python作為一種解釋型編程語言,代碼修改不需要重新編譯就可以直接運行,使用和調(diào)試非常方便,并且擁有豐富的第三方庫和語法糖,擁有眾多的用戶群體。同時為了保證框架的執(zhí)行效率,飛槳底層實現(xiàn)采用C++。對于預測推理,為方便部署應(yīng)用,則同時提供了C++和Java API。
圖2 飛槳的組網(wǎng)編程范式和執(zhí)行邏輯Fig.2 PaddlePaddle programming paradigm and execution logic
在介紹飛槳的組網(wǎng)方式之前,首先介紹兩種編程范式,聲明式編程(也叫符號式編程)和命令式編程。命令式編程是一種非常直觀的編程方式,程序的定義對應(yīng)著執(zhí)行,可立即返回結(jié)果,大部分Python的程序都是命令式編程,比如運行“x=10;y=x+2;”這段代碼,y的值能夠立馬獲取,這種編程方式非常方便調(diào)試。而聲明式編程,程序在定義的時候并不會立即執(zhí)行。對于深度學習模型開發(fā)來講,相當于先是構(gòu)建一個完整的網(wǎng)絡(luò)結(jié)構(gòu),例如表示成一張圖,然后再統(tǒng)一執(zhí)行前向反向計算。由于在執(zhí)行前可以進行整體優(yōu)化,因此這種方式往往可以做到執(zhí)行效率更高。但是由于執(zhí)行和定義的分離,所以不太方便測試。
在飛槳中同時兼容這兩種編程范式,如圖2所示。飛槳以程序化“Program”的形式動態(tài)描述神經(jīng)網(wǎng)絡(luò)模型計算過程,并提供對順序、分支和循環(huán)三種執(zhí)行結(jié)構(gòu)的支持,可以組合描述任意復雜的模型,并可在內(nèi)部自動轉(zhuǎn)化為中間表示的描述語言?!癙rogram”的定義過程就像在寫一段通用程序。使用聲明式編程時,相當于將“Program”先編譯再執(zhí)行,可類比靜態(tài)圖模式。首先根據(jù)網(wǎng)絡(luò)定義代碼構(gòu)造“Program”,然后將“Program”編譯優(yōu)化,最后通過執(zhí)行器執(zhí)行“Program”,具備高效性能;同時由于存在靜態(tài)的網(wǎng)絡(luò)結(jié)構(gòu)信息,能夠方便地完成模型的部署上線。而命令式編程,相當于將“Program”解釋執(zhí)行,可視為動態(tài)圖模式,更加符合用戶的編程習慣,代碼編寫和調(diào)試也更加方便。飛槳后面會增強靜態(tài)圖模式下的調(diào)試功能,方便開發(fā)調(diào)試;同時提升動態(tài)圖模式的運行效率,加強動態(tài)圖自動轉(zhuǎn)靜態(tài)圖的能力,快速完成部署上線;同時更加完善接口的設(shè)計和功能,整體提升框架易用性。
飛槳核心架構(gòu)采用分層設(shè)計,如圖3所示。前端應(yīng)用層考慮靈活性,采用Python實現(xiàn),包括了組網(wǎng)API、IO API、Optimizer API和執(zhí)行 API等完備的開發(fā)接口;框架底層充分考慮性能,采用C++來實現(xiàn)。框架內(nèi)核部分,主要包含執(zhí)行器、存儲管理和中間表達優(yōu)化;內(nèi)部表示方面,包含網(wǎng)絡(luò)表示(ProgramDesc)、數(shù)據(jù)表示(Variable)和計算表示(Operator)幾個層面。框架向下對接各種芯片架構(gòu),可以支持深度學習模型在不同異構(gòu)設(shè)備上的高效運行。
2.3.1 執(zhí)行器
飛槳神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)是由一系列的Operator和Variable構(gòu)成。用戶將定義好的“Program”傳入Executor,Executor根 據(jù)“Program”中的 Operator的順序依次調(diào)用運行。飛槳還提供了Executor的一個升級版Parallel Executor,它的執(zhí)行對象是編譯優(yōu)化過的“Program”(Compiled Program),相當于優(yōu)化過的計算圖,比如顯存優(yōu)化、Operator合并等等。但Parallel Executor對用戶是透明的,統(tǒng)一使用Executor接口來執(zhí)行,區(qū)別在于傳入的是“Program”還是經(jīng)過了編譯優(yōu)化的“Compiled Program”。相比于Executor,Parallel Executor主要有兩個改進的地方:減少了每次迭代過程中的同步操作;支持并發(fā)執(zhí)行Operator。
(1)減少同步的次數(shù)
在使用Parallel Executor執(zhí)行圖像處理單元GPU多卡訓練時,會根據(jù)“Program”和卡數(shù)構(gòu)建出一個靜態(tài)單流賦值圖(Static Single Assignment Graph,SSA Graph),在迭代過程中多卡之間只在聚合參數(shù)梯度的時候才會有同步操作。
圖3 核心架構(gòu)圖Fig 3 The core architecture
圖4 顯存分配機制Fig.4 The strategy of GPU memory allocation
(2)支持并發(fā)執(zhí)行Operator
Parallel Executor在執(zhí)行過程中根據(jù)輸入變量是否就緒來決定是否執(zhí)行Operator,通過一個線程池來管理調(diào)度。所以Parallel Executor中運行Operator的順序并不是固定的,可以通過并發(fā)執(zhí)行提升效率。
2.3.2 顯存管理
飛槳為用戶提供技術(shù)領(lǐng)先、簡單易用、兼顧顯存回收與復用的顯存優(yōu)化策略,在很多模型上的表現(xiàn)優(yōu)于其他開源框架。
(1)顯存分配機制
原生的CUDA系統(tǒng)調(diào)用(cudaMalloc)和釋放(cudaFree)均是同步操作,非常耗時。為了加速顯存分配,飛槳采用了顯存預分配的策略,具體方式如圖4所示。設(shè)置一個顯存池chunk,定義其大小為chunk_size。若分配需求requested_size不超過chunk_size,則框架會預先分配chunk_size大小的顯存池chunk,并從中分出requested_size大小的塊返回。之后每次申請顯存都會從chunk中分配。若requested_size大于chunk_size,則框架會調(diào)用cudaMalloc分配requested_size大小的顯存。chunk_size一般依據(jù)初始可用顯存大小按比例確定。同時飛槳也支持按實際顯存占用大小的動態(tài)自增長的顯存分配方式。
(2)顯存垃圾及時回收機制
顯存垃圾及時回收機制GC(Garbage Collection)的原理是在網(wǎng)絡(luò)運行階段釋放無用變量的顯存空間,達到節(jié)省顯存的目的。GC策略會積攢一定大小的顯存垃圾后再統(tǒng)一釋放。GC內(nèi)部會根據(jù)變量占用的顯存大小,對變量進行降序排列,且僅回收前面滿足占用大小閾值以上的變量顯存。GC策略默認生效于使用Executor或Parallel Executor做模型訓練預測時。
(3)Operator內(nèi)部顯存復用機制
Operator內(nèi)部顯存復用機制(Inplace)的原理是Operator的輸出復用Operator輸入的顯存空間。例如,數(shù)據(jù)整形(reshape)操作的輸出和輸入可復用同一片顯存空間。Inplace策略可通過構(gòu)建策略(BuildStrategy)設(shè)置生效于Parallel Executor的執(zhí)行過程中。
飛槳算子庫目前提供了500余個算子,并在持續(xù)增加,能夠有效支持自然語言處理、計算機視覺、語音等各個方向模型的快速構(gòu)建。同時提供了高質(zhì)量的中英文文檔,更方便國內(nèi)外開發(fā)者學習使用。文檔中對每個算子都進行了詳細描述,包括原理介紹、計算公式、論文出處,詳細的參數(shù)說明和完整的代碼調(diào)用示例。
飛槳的算子庫覆蓋了深度學習相關(guān)的廣泛的計算單元類型。比如提供了多種循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),多種卷積神經(jīng)網(wǎng) 絡(luò)(Convolutional Neural Networks,CNN)及 相關(guān)操作,如深度可分離卷積(Depthwise Deparable Convolution)、空洞卷積(Dilated Convolution)、可變形卷積 (Deformable Convolution)、池化興趣區(qū)域池化及其各種擴展、分組歸一化、多設(shè)備同步的批歸一化,另外涵蓋多種損失函數(shù)和數(shù)值優(yōu)化算法,可以很好地支持自然語言處理的語言模型、閱讀理解、對話模型、視覺的分類、檢測、分割、生成、光學字符識別(Optical Character Recognition,OCR)、OCR檢測、姿態(tài)估計、度量學習、人臉識別、人臉檢測等各類模型。
飛槳的算子庫除了在數(shù)量上進行擴充之外,還在功能性、易用性、便捷開發(fā)上持續(xù)增強:例如針對圖像生成任務(wù),支持生成算法中的梯度懲罰功能,即支持算子的二次反向能力;而對于復雜網(wǎng)絡(luò)的搭建,將會提供更高級的模塊化算子,使模型構(gòu)建更加簡單的同時也能獲得更好的性能;對于創(chuàng)新型網(wǎng)絡(luò)結(jié)構(gòu)的需求,將會進一步簡化算子的自定義實現(xiàn)方式,支持Python算子實現(xiàn),對性能要求高的算子提供更方便的、與框架解耦的C++實現(xiàn)方式,可使得開發(fā)者快速實現(xiàn)自定義的算子,驗證算法。
飛槳對核心計算的優(yōu)化,主要體現(xiàn)在以下兩個層面。
2.5.1 Operator粒度層面
飛槳提供了大量不同粒度的Operator(Op)實現(xiàn)。細粒度的Op能夠提供更好的靈活性,而粗粒度的Op則能提供更好的計算性能。飛槳提供了諸如softmax_with_cross_entropy等組合功能Op,也提供了像fusion_conv_inception、fused_elemwise_activation等融合類Operator。其中大部分普通Op,用戶可以直接通過Python API配置使用,而很多融合的Op,執(zhí)行器在計算圖優(yōu)化的時候?qū)詣舆M行子圖匹配和替換。
2.5.2 核函數(shù)實現(xiàn)層面
飛槳主要通過兩種方式來實現(xiàn)對不同硬件的支持:人工調(diào)優(yōu)的核函數(shù)實現(xiàn)和集成供應(yīng)商優(yōu)化庫。
(1)針對CPU平臺
飛槳一方面提供了使用指令I(lǐng)ntrinsic函數(shù)和借助于xbyak[14]JIT匯編器實現(xiàn)的原生Operator,深入挖掘編譯時和運行時性能;另一方面,飛槳通過引 入 OpenBLAS[15]、Intel? MKL[16]、Intel? MKLDNN[17]和nGraph[18],對Intel CXL等新型芯片提供了性能保證。
(2)針對GPU平臺
飛槳既為大部分Operator用CUDA C實現(xiàn)了經(jīng)過人工精心優(yōu)化的核函數(shù),也集成了cuBLAS[19]、cuDNN[20]等供應(yīng)商庫的新接口、新特性。
表1中給出了Paddle Fluid 1.5.0使用單個GPU訓練的性能評測數(shù)據(jù)。在Paddle Fluid 1.5.0的靜態(tài)圖基準測試中,相對于開源對標框架,Mask-RCNN、YOLOv3、DeepLab V3+、CycleGAN、BERT 這 5個模型的速度表現(xiàn)出顯著的優(yōu)勢,SE-ResNeXt和Transformer這2個模型也達到與對標框架持平。在未來的工作中,飛槳將持續(xù)致力于計算的優(yōu)化,除了針對更多不同硬件平臺特性,開發(fā)更多高效率計算的算子外,飛槳也在結(jié)合編譯器優(yōu)化技術(shù)和自動代碼生成技術(shù),研發(fā)一套通用、自動的優(yōu)化方案,使更多的模型能夠獲得性能提升。
表1 不同框架訓練性能比較Table1 The training performance comparison with other frameworks
不同于其他大部分深度學習框架,飛槳在神經(jīng)網(wǎng)絡(luò)模型定義和描述時,去掉計算圖的概念,代之以Program的形式動態(tài)描述計算過程。這種程序化的計算描述方式,兼具網(wǎng)絡(luò)結(jié)構(gòu)修改的靈活性和模型搭建的便捷性,極大地提高了框架對模型的表達能力的同時也保證了高性能。
在神經(jīng)網(wǎng)絡(luò)計算中,矩陣維度足夠大,才能最大化對計算資源的利用,充分發(fā)揮GPU或是其他異構(gòu)計算設(shè)備的計算能力,從而加速運算。在飛槳的設(shè)計中,通過對序列進行排序,然后沿時間步維度切取出多個Batch并行計算,飛槳對序列模型沒有增加計算量,也無需用戶處理填充/去填充相關(guān)的細節(jié),從而提升變長序列場景的計算效率。
飛槳框架同時充分考慮訓練和預測部署問題,一體化設(shè)計支持多端多平臺的推理引擎,在高性能、輕量化和普適性方面開展重點優(yōu)化?;诖嗽O(shè)計,在多個硬件平臺多種模型的對照評估中,飛槳預測框架顯示出了領(lǐng)先的性能優(yōu)勢。
針對大規(guī)模數(shù)據(jù)場景,GPU多機多卡訓練的擴展性至關(guān)重要。飛槳研發(fā)了一整套完備的擴展性組件包,包括多種通信拓撲的支持、梯度智能聚合、通信與計算節(jié)點依賴分析、多流并發(fā)通信等。同時,在不同模型結(jié)構(gòu)下,通過對擴展性組件包中的組件進行智能組合,實現(xiàn)對用戶透明的最佳并行擴展。
飛槳針對大規(guī)模點擊率預估的場景,創(chuàng)新性地提出了大規(guī)模稀疏參數(shù)服務(wù)器技術(shù)。設(shè)計方面,將訓練部分與通信部分、參數(shù)存儲進行了分離,可以對通信和存儲更新做針對性的并行優(yōu)化,最大化地提升速度。通信方面,通過稠密參數(shù)共享,多線程訓練可以僅用一個線程去拉取參數(shù),減少一半的通信量,從而大幅提升了訓練速度。參數(shù)存儲方面,采用了存和取解耦的模式,具備了良好的擴展性。
飛槳還針對特殊場景研發(fā)內(nèi)建(Built-in)并行能力。通過不斷地累計本地梯度,并同步最有代表性的少量梯度,在保證模型收斂的前提下可以將通信量減小為原始通信量的1%以下,大大降低了網(wǎng)絡(luò)通信負載。在帶寬壓縮到1Gb/s的情況下,通用的多機多卡并行訓練方法在吞吐方面已經(jīng)趨近于0,而基于稀疏通信的并行訓練方法依然可以保持較高的吞吐。
為提升飛槳模型的泛化性能,提出局部拉德馬赫正則化方法。該方法采用最近的拉德馬赫復雜度的估計方法,對折頁損失函數(shù)(Hinge Loss)和交叉熵(Cross Entropy)推得了固定值的表達式,并且將其稱之為局部拉德馬赫正則化項,加在經(jīng)驗損失函數(shù)上。實驗證明該正則化方法作用在模型集成之后,得到了CIFAR-10上目前最好的準確率。
飛槳知識增強的語義表示模型ERNIE,是飛槳源于產(chǎn)業(yè)實踐的典型成果。通過建模海量數(shù)據(jù)中的實體概念等先驗語義知識,學習真實世界的語義關(guān)系。最新發(fā)布的ERNIE 2.0[21]模型,在共計16個中英文任務(wù)上超越了BERT和XLNet[22],取得了SOTA效果。
深度學習框架的開源已經(jīng)大幅降低了應(yīng)用門檻。未來,隨著應(yīng)用越來越廣泛,深度學習技術(shù)的門檻還會進一步降低。對于有一定的深度學習經(jīng)驗的開發(fā)者,可以輕松結(jié)合預訓練模型開展遷移學習工作,利用Fine-tune API并結(jié)合少量代碼即可完成大規(guī)模預訓練模型的遷移學習。例如,飛槳遷移學習工具PaddleHub引入“模型即軟件”的設(shè)計理念,支持通過Python API或者命令行工具,一鍵完成基于預訓練模型的遷移學習和快速部署。對于缺乏AI算法基礎(chǔ)的開發(fā)者,EasyDL的定制化訓練和服務(wù)平臺,可以提供高精度的AI模型定制服務(wù),實現(xiàn)快速行業(yè)應(yīng)用。
隨著AI應(yīng)用場景的豐富和異構(gòu)硬件技術(shù)的快速發(fā)展,深度學習的算法模型將會運行在多種多樣的終端硬件上。因此,深度學習框架如何與硬件聯(lián)合優(yōu)化、充分釋放硬件的計算性能,將會是一個重要的發(fā)展方向。飛槳將會結(jié)合底層編譯優(yōu)化的思想,對計算圖的中間表示在各種硬件上的適配做更深入的優(yōu)化。
隨著5G技術(shù)的快速發(fā)展,傳輸能力將不再是瓶頸,終端—邊緣—云端將會實現(xiàn)無處不在的連接。但這對深度學習框架的架構(gòu)設(shè)計提出了新的更高的要求,也必將對數(shù)據(jù)的安全和隱私提出更高的要求。因此如何讓AI計算更加安全,也將是飛槳的一個重要發(fā)展方向。
利益沖突聲明
所有作者聲明不存在利益沖突關(guān)系。