亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種運算和數據協同優(yōu)化的深度學習編譯框架①

        2020-03-31 12:17:06吳林陽杜偉健陳小兵莊毅敏
        高技術通訊 2020年2期
        關鍵詞:代碼生成引擎運算

        吳林陽 杜偉健 陳小兵 莊毅敏

        (*中國科學院計算技術研究所計算機體系結構國家重點實驗室 北京 100190) (**中國科學院大學 北京 100049) (***上海寒武紀信息科技有限公司 上海 201308)

        0 引 言

        隨著大數據時代到來,深度學習算法已被廣泛應用于安防、教育、醫(yī)療、貿易、交通、家居等各個領域。然而,深度學習應用對硬件計算能力要求極高,通用處理器已經無法滿足應用的實時性需求。在此背景下,深度學習處理器蓬勃發(fā)展,逐漸成為處理深度學習應用的主要載體。

        深度學習算法和硬件的快速發(fā)展給編譯器設計帶來了巨大的挑戰(zhàn),主要體現在2個方面:

        (1) 通用性。如何設計統一的編譯框架,支持不同的硬件平臺后端(GPU、TPU、CPU、加速器)。

        (2) 性能。針對特定的硬件平臺后端,如何把性能(延時、吞吐率)優(yōu)化到最好。

        目前已有一些相關工作針對以上2個問題提出了解決方案。比如,Chen等人[1]提出了一種自動化、端到端的編譯優(yōu)化框架TVM。為了優(yōu)化程序的性能,TVM設計了面向算法的高級優(yōu)化和面向硬件的低級優(yōu)化兩層優(yōu)化架構,并采用了操作融合、訪存延遲隱藏等關鍵技術。TVM通過中間表示來支持不同的硬件后端,同時在語言層面支持用戶自定義硬件優(yōu)化原語,從而解決通用性問題。又比如,Vasilache等人[2]提出了一種領域專用語言和編譯框架TC(tensor comprehensions)。為了優(yōu)化程序性能,TC在總體設計上采用了多面體編譯框架(優(yōu)化循環(huán)結構),并在其中集成了如存儲層次提升、映射到寄存器、向量化、并行化等面向硬件結構的優(yōu)化技術。相關工作還有DLVM[3]、Latte[4]等。

        然而,上述相關工作在考慮性能優(yōu)化時,更側重于對程序的運算部分進行優(yōu)化,對數據的優(yōu)化非常有限,比如TVM只在高級優(yōu)化層面對數據布局進行轉換。本文基于以下2點觀察:

        (1) 深度學習處理器往往需要支持可變大小的向量乘矩陣、矩陣乘矩陣操作,為了配合指令集和硬件結構進行訪存、運算優(yōu)化,數據往往需要根據不同的操作以及不同的運算規(guī)模進行不同的變換。

        (2) 深度學習算法在推理過程中存在大量的常量數據(權值、偏置等),可以采用部分求值的思想在編譯階段對運算、數據進行提前優(yōu)化。

        提出一種運算和數據協同優(yōu)化的深度學習編譯框架CDUCA(computation and data unified compile architecture),以解決深度學習性能優(yōu)化問題。本文研究的內容不涉及如何解決通用性問題。

        本文剩余章節(jié)內容組織如下。第1節(jié)介紹CDUCA的總體設計。第2節(jié)介紹CDUCA各個模塊以及優(yōu)化技術。第3節(jié)對CDUCA生成模型的性能進行了多個維度的實驗評估。第4節(jié)對本文的工作進行總結和展望。

        1 總體設計

        深度學習算法的主體是神經網絡。神經網絡由一系列的基本操作按一定的拓撲結構連接組成,每個操作包含一組或多組輸入、輸出神經元,神經元可以在操作之間共享。進一步,神經網絡可以用計算圖來表示,圖節(jié)點表示操作,邊表示神經元。訓練好的模型數據也是神經網絡的重要組成部分,比如卷積操作的權值。

        CDUCA編譯框架接收原始的神經網絡計算圖和模型數據,輸出可部署到深度學習處理器上執(zhí)行的模型文件,其總體框架如圖1所示。

        CDUCA包含計算圖引擎、代碼生成器、數據優(yōu)化器3個不同層次的組件/模塊。

        (1) 計算圖引擎采用線性變換、常量折疊等優(yōu)化技術,對原始的計算圖和模型數據進行面向算法的高級優(yōu)化,生成優(yōu)化后的計算圖和模型數據。

        (2) 代碼生成器采用基于cost model的啟發(fā)式搜索策略,對計算圖引擎優(yōu)化后的計算圖和模型數據進行運算和數據協同編譯優(yōu)化,生成高效的目標平臺代碼。

        (3) 數據優(yōu)化器采用數據對齊、維度變換、精度調優(yōu)等優(yōu)化技術,對計算圖引擎優(yōu)化后的模型數據進行面向硬件平臺的二次優(yōu)化,生成可部署模型。

        圖1 CDUCA總體架構圖

        此外,得益于層次化的設計結構,CDUCA編譯框架具有很強的擴展性,它能夠方便地集成各種編譯優(yōu)化技術。比如,CDUCA可以在計算圖引擎模塊集成操作聚合技術,可以在代碼生成器模塊集成多面體循環(huán)優(yōu)化技術。如何擴展這些優(yōu)化技術不作為本文討論的重點。

        2 CDUCA模塊

        本小節(jié)介紹CDUCA各個模塊以及優(yōu)化技術。

        2.1 計算圖引擎

        計算圖引擎采用線性變換和常量折疊技術來對運算和數據進行協同優(yōu)化。在介紹計算圖引擎的工作原理之前,本小節(jié)先介紹這2種優(yōu)化技術。

        神經網絡算法中常見的操作包含卷積、全連接、激活、池化、批規(guī)范化、縮放,本文將這些操作歸為2類:線性變換操作和非線性變換操作。所有的線性變換操作都能夠表示成向量或矩陣乘加的形式,如下:

        Y=XW+B

        (1)

        所有的非線性變換操作都無法表示成式(1)的形式。其中,X、Y是變量,W、B是常量(提前訓練好的模型數據)。按照上面的分類,卷積、全連接、批規(guī)范化、縮放操作是線性變換操作,最大池化、激活是非線性變換操作。以全連接操作為例,式(1)中的X、Y分別表示全連接的輸入、輸出神經元矩陣,W表示權值矩陣,B表示偏置矩陣。上面列舉的其他線性變換操作也能轉換成式(1),具體轉換的方法本文不做詳細描述。

        假定有2個連續(xù)的線性變換操作,第2個操作使用第1個操作的輸出作為輸入:

        Y1=X1W1+B1

        (2)

        Y2=X1W2+B2

        (3)

        由于線性變換滿足分配律和結合律,又由于W矩陣和B矩陣是常量,因此式(2)、(3)可以做以下等價線性變換:

        Y2=(X1W1+B1)W2+B2

        (4)

        Y2=X1W1W2+B1W2+B2

        (5)

        W′=W1W2,B′=B1W2+B2

        (6)

        Y2=X1W′+B′

        (7)

        因此,原始的2步計算式(2)和式(3)通過線性變換為式(4)和式(5)和常量折疊式(6)優(yōu)化,簡化成了一步計算式(7)。這2種優(yōu)化技術在減少運算量的同時也對常量模型數據進行了壓縮,一方面減少了模型數據的存儲開銷,另一方面減少了運行時的訪存量。

        舉一個具體的應用來說明這2種優(yōu)化技術是實用的。ResNet[5]是經典的圖像分類網絡,它包含大量的卷積+批規(guī)范化+縮放子結構,如圖2所示。

        圖2 ResNet子結構

        上面3個操作都是線性變換操作,因此可以進行線性變換和常量折疊優(yōu)化。具體的優(yōu)化步驟參考式(2)~(7)。

        計算圖引擎的具體工作原理如下(圖3)。首先掃描原始的計算圖,識別其中連續(xù)的線性變換操作;然后對連續(xù)的線性變換操作執(zhí)行線性變換和常量折疊優(yōu)化,把多個操作節(jié)點合并成一個操作節(jié)點,把多份模型數據合并成一份模型數據;最后輸出簡化后的計算圖和模型數據。

        圖3 計算圖引擎工作原理圖

        2.2 代碼生成器

        代碼生成器在生成目標代碼時充分考慮了對運算和數據進行協同優(yōu)化。深度學習處理器為了優(yōu)化訪存性能,往往會在靠近計算單元的地方設計片上緩存(on-chip memory),訪問片上緩存的速度遠比從片外DDR快。為了簡化結構設計,深度學習處理器并沒有將片上緩存設計成cache這種軟件透明的結構,因此軟件編程人員需要顯示地管理這些片上緩存[6,7]。合理利用片上緩存能夠極大地提升程序的性能,單從優(yōu)化運算的角度出發(fā)無法做到這一點。為了在支持可變大小的向量乘矩陣、矩陣乘矩陣操作應用場景下充分利用片上緩存,代碼生成器必須同時考慮運算優(yōu)化和數據優(yōu)化。另一方面,由于深度學習處理器支持向量化操作以及按固定維度進行循環(huán)展開[8],從提高訪存效率的角度出發(fā),片外數據往往需要做特殊的對齊以及維度變換。

        CDUCA代碼生成器在設計時充分考慮了上面幾個問題,并提出了以下解決方案。

        采用基于cost model的啟發(fā)式搜索策略來協同優(yōu)化運算和數據。cost model給出程序的運行時間估計,它考慮的核心因素是訪存時間、運算時間以及兩者的覆蓋率。增大覆蓋率是為了隱藏計算、訪存延時,在此基礎下,盡量減小訪存和運算時間就能提升程序的性能。在生成目標平臺指令時存在多種選擇,比如,分幾次加載一塊完整的數據,數據存放的位置(片上緩存/片外DDR),單次運算數據量的大小等。使用暴力搜索的開銷過大,因此,本文提出了一種啟發(fā)式的指令生成策略,一個重要的啟發(fā)式策略就是盡量把片上緩存用滿。

        代碼生成器的完整工作流程如下(圖4)。首先對計算圖引擎優(yōu)化后的計算圖進行cost model建模,然后采用啟發(fā)式搜索策略來生成高度優(yōu)化的目標平臺指令。

        圖4 代碼生成器工作原理圖

        2.3 數據優(yōu)化器

        數據優(yōu)化器根據目標平臺代碼所需要的最優(yōu)數據布局,對模型數據進行面向硬件平臺的二次優(yōu)化。主要的優(yōu)化包括:

        (1) 按照運算的要求對數據進行對齊,加快訪存速度。深度學習處理器向量化運算對數據對齊有一定的要求,對齊訪問能夠加快訪存速度。

        (2) 按照運算的要求對模型數據進行維度變換,提高訪存局部性。卷積等算法需要將數據解釋成多維數組,多維數組的排布順序會影響訪存的跳轉次數。為了盡量減少訪存跳轉,需要對數據進行維度變換。

        (3) 精度調優(yōu),提高運算速度。深度學習處理器往往支持低精度運算[8,9],比如16比特量化、8比特量化,不同的精度運算性能不同。因此,在編譯時期,可以對模型數據進行精度選優(yōu),從而提高性能。

        數據優(yōu)化器的工作原理如下(圖5)。先按照目標平臺代碼對數據布局的要求,對模型數據進行上述3種優(yōu)化;然后將目標代碼和優(yōu)化后的模型數據打包,生成可部署模型。

        圖5 數據優(yōu)化器工作原理

        3 實驗和評估

        本文在DLPlib[10]的基礎上進行了編程模型擴展,使其支持了網絡級別的計算,并在內部實現了CDUCA編譯優(yōu)化框架。本文對CDUCA編譯生成的模型進行了多方面的性能評估。接下來先介紹本文使用的硬件平臺和測試集。

        (1) 硬件平臺

        本文采用與DaDianNao[11]類似的設計,用verilog實現了大部分硬件邏輯,并在SynopsysFPGA上進行綜合。在100 MHz的現場可編程門陣列(field programmable gate array, FPGA)主頻下,單個處理器核心的峰值運算性能可以達到0.2 GFOP/s。DaDianNao包含多個處理核心,本文在測試時只使用了單個運算核心,但這并不表示CDUCA框架不支持多核系統。

        (2) 測試集

        本文選取了典型的圖像分類網絡如AlexNet[12]、ResNet[5]和典型的目標檢測網絡如Yolov2[13]、Faster-RCNN[14]作為測試集。

        本文將CDUCA生成的模型與手工優(yōu)化模型進行了性能對比。手工優(yōu)化模型是指由專業(yè)人士使用匯編指令手工實現算法模型,這種方式能夠把特定的算法模型性能優(yōu)化到極致,其缺點是開發(fā)成本太高。

        圖6給出了CDUCA模型與手工優(yōu)化模型性能的對比。其中CDUCA-NOPT系列表示的是關閉了計算圖引擎的CDUCA。對比CDUCA-NOT和CDUCA可以看出,計算圖引擎優(yōu)化對ResNet50、Yolov2性能提升很大(10%以上),而對AlexNet、Faster-RCNN提升不大,因為AlexNet中不包含連續(xù)的線性變換操作,而Faster-RCNN主要開銷并不是在線性操作部分。表1給出了CDUCA模型和手工優(yōu)化模型性能的比值,在平均值上,CDUCA生成的模型性能能達到手工優(yōu)化模型性能的86.5%。

        圖6 CDUCA模型與手工優(yōu)化模型性能對比

        表1 CDUCA模型與手工優(yōu)化模型性能對比

        AlexNetResNet50Yolov2Faster-RCNNMean89.1%90.7%83.0%83.2%86.5%

        4 結 論

        本文從深度學習算法和深度學習硬件平臺的特點出發(fā),提出了一種運算和數據協同優(yōu)化的深度學習編譯框架CDUCA。在計算圖引擎模塊,采用線性變換和常量折疊技術對原始計算圖和模型數據進行面向算法的協同優(yōu)化;在代碼生成器模塊,采用基于cost model的啟發(fā)式搜索技術,對運算和數據進行協同優(yōu)化,生成目標代碼;在數據優(yōu)化器模塊,采用數據對齊、維度變換、精度調優(yōu)技術,對模型數據進行面向硬件平臺的二次優(yōu)化。CDUCA在整個框架設計中貫穿運算和數據協同優(yōu)化的思想。實驗結果表明,CDUCA生成的模型性能能達到手工優(yōu)化模型性能的86.5%。

        此外CDUCA框架層次化的設計結構具有很強的擴展性,能夠在各個模塊集成各種編譯優(yōu)化技術。比如,CDUCA可以在計算圖引擎模塊集成操作聚合技術,可以在代碼生成器模塊集成多面體編譯優(yōu)化技術,集成這些優(yōu)化技術可以作為本文的后續(xù)研究工作。

        總結來說,在深度學習編譯優(yōu)化領域,對運算和數據進行協同優(yōu)化非常重要,這是后續(xù)通用深度學習編譯框架設計中應該重點考慮的。

        猜你喜歡
        代碼生成引擎運算
        重視運算與推理,解決數列求和題
        有趣的運算
        Lustre語言可信代碼生成器研究進展
        藍谷: “涉藍”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        “整式的乘法與因式分解”知識歸納
        撥云去“誤”學乘除運算
        代碼生成技術在軟件開發(fā)中的應用
        電子世界(2016年15期)2016-08-29 02:14:28
        基于XML的代碼自動生成工具
        電子科技(2015年2期)2015-12-20 01:09:20
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        基于Cocos2d引擎的PuzzleGame開發(fā)
        欧美综合自拍亚洲综合百度| 国产精品欧美一区二区三区| 亚洲依依成人亚洲社区| 三级国产女主播在线观看| 亚洲精品一区二区三区日韩| 久久伊人最新网址视频| 欧美黑人群一交| 亚洲黄色免费网站| 亚洲视频一区二区三区免费| 福利视频一区二区三区| 国产尤物av尤物在线观看| 波多野结衣一区| 精品久久日产国产一区| 婷婷久久精品国产色蜜蜜麻豆| 日韩中文字幕免费视频| 精品人无码一区二区三区| 精品国产乱码久久免费看| 久久精品国产91精品亚洲| 久久亚洲国产成人精品性色 | 亚洲av无码一区二区三区乱子伦| 极品熟妇大蝴蝶20p| 国产高清丝袜美腿视频在线观看| 男女主共患难日久生情的古言| 亚洲av午夜国产精品无码中文字| 午夜三级网| 日韩精品一区二区三区av| 日韩精品无码一区二区三区四区| 免费人成视频x8x8| jiZZ国产在线女人水多| 国产自拍视频在线观看免费| 欧美 国产 综合 欧美 视频| 亚洲av美女在线播放啊| 国产一区二区三区在线av| 国产成人精品日本亚洲专区61| 五月天精品视频在线观看| 国产精品一区二区三区色| 精品一区二区av天堂色偷偷| 人人狠狠综合久久亚洲| 久久91精品国产91久久麻豆| 人妻少妇精品视中文字幕免费| 五月综合激情婷婷六月色窝|