• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      面向多核處理器的機(jī)器學(xué)習(xí)推理框架

      2019-09-16 02:32:26
      關(guān)鍵詞:張量時(shí)延算子

      張 瀟 支 天

      1(中國(guó)科學(xué)院計(jì)算技術(shù)研究所 北京 100190)2(中國(guó)科學(xué)院大學(xué) 北京 100049)3(上海寒武紀(jì)信息科技有限公司 上海 201306)

      近年來(lái),得益于深度學(xué)習(xí)技術(shù)在多個(gè)領(lǐng)域取得的巨大成功[1-6],包括圖像識(shí)別、物體檢測(cè)、語(yǔ)音識(shí)別和文本處理等,深度學(xué)習(xí)已經(jīng)成為了目前最為火熱的研究領(lǐng)域.除了針對(duì)深度學(xué)習(xí)模型和算法的研究之外,研究人員同樣也在探索如何使用能夠更加高效地執(zhí)行這些深度學(xué)習(xí)模型和算法,GPU是目前最為主流的深度學(xué)習(xí)計(jì)算平臺(tái),被廣泛應(yīng)用于深度學(xué)習(xí)領(lǐng)域的云服務(wù)中.此外,專用的深度學(xué)習(xí)處理器[7-11]也成為了快速發(fā)展的一個(gè)領(lǐng)域.專用處理器針對(duì)神經(jīng)網(wǎng)絡(luò)算法的計(jì)算特點(diǎn)設(shè)計(jì)其本身的硬件結(jié)構(gòu),使其更加符合算法的計(jì)算邏輯,因此專用處理器往往在性能功耗比上對(duì)比GPU有較大的優(yōu)勢(shì).雖然出現(xiàn)了包括GPU和專用加速器在內(nèi)的這些新型硬件,通用處理器仍然是目前最為普遍且易于得到的計(jì)算設(shè)備.隨著技術(shù)的發(fā)展,基于內(nèi)存共享模型的多核處理器已經(jīng)成為了當(dāng)前處理器的主流架構(gòu),這種多核架構(gòu)和每個(gè)核內(nèi)的向量處理能力同樣可以運(yùn)用到神經(jīng)網(wǎng)絡(luò)計(jì)算中.考慮到計(jì)算資源的易獲得性,探索多核處理器在神經(jīng)網(wǎng)絡(luò)計(jì)算中的高效應(yīng)用同樣有著重要的意義.基于共享存儲(chǔ)模式設(shè)計(jì)的多核處理器在訓(xùn)練場(chǎng)景下可以使用數(shù)據(jù)并行的方式方便地?cái)U(kuò)展自己的數(shù)據(jù)吞吐量.所謂數(shù)據(jù)并行指的是通過(guò)把訓(xùn)練的數(shù)據(jù)集劃分成若干份,使用多個(gè)處理核分別處理一部分子數(shù)據(jù)集來(lái)加快訓(xùn)練.在多核結(jié)構(gòu)中采用這種方式,每個(gè)核并行地處理訓(xùn)練數(shù)據(jù)中的不同數(shù)據(jù)集,從而提高整個(gè)系統(tǒng)的吞吐量,加快訓(xùn)練速度.因此,多核的處理器架構(gòu)在保持了每個(gè)核良好的性能功耗比的前提下,又可以方便地?cái)U(kuò)展整個(gè)系統(tǒng)在訓(xùn)練階段的計(jì)算吞吐量.

      在實(shí)際應(yīng)用中,當(dāng)在線下使用數(shù)據(jù)集完成了神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練后,就會(huì)把模型部署到云端的服務(wù)器上來(lái)處理外界發(fā)來(lái)的數(shù)據(jù),此時(shí)的應(yīng)用場(chǎng)景就由離線訓(xùn)練變成了在線推理.在在線推理階段,一個(gè)非常重要的指標(biāo)是時(shí)延,也就是從服務(wù)器端收到待處理數(shù)據(jù)到返回處理后的結(jié)果的時(shí)間,進(jìn)一步來(lái)說(shuō),是使用神經(jīng)網(wǎng)絡(luò)模型處理數(shù)據(jù)的時(shí)間.低時(shí)延能夠保證云端服務(wù)器對(duì)客戶端發(fā)來(lái)的數(shù)據(jù)在最短的時(shí)間內(nèi)做出響應(yīng),在一些更加敏感的場(chǎng)景下,直接決定了方案是否可用.因此,在線推理階段對(duì)于處理器的要求就由處理大批量數(shù)據(jù)、高吞吐量轉(zhuǎn)變?yōu)樘幚硇∨繑?shù)據(jù)、低時(shí)延.

      在這種情況下,傳統(tǒng)的數(shù)據(jù)并行或者模型并行難以有效降低推理任務(wù)的時(shí)延.對(duì)于數(shù)據(jù)并行來(lái)說(shuō),大批量數(shù)據(jù)是并行加速的前提,而這與在線推理小批量數(shù)據(jù)的特點(diǎn)相矛盾.對(duì)于模型并行來(lái)說(shuō),它通常是為了解決一個(gè)規(guī)模很大的神經(jīng)網(wǎng)絡(luò)模型超過(guò)了單個(gè)設(shè)備的內(nèi)存限制而采用的方法,把算子分配到不同的核上并不能降低網(wǎng)絡(luò)的時(shí)延.所以為了能夠在多核處理器上降低執(zhí)行推理任務(wù)的時(shí)延,必須尋找一種方法,把對(duì)小批量數(shù)據(jù)甚至單個(gè)數(shù)據(jù)的推理計(jì)算任務(wù)的負(fù)載合理地分配到多核架構(gòu)的各個(gè)核上,保證每一時(shí)刻都有盡可能多的核參與計(jì)算,才能充分利用多核架構(gòu)的資源.一種直觀的方法是把神經(jīng)網(wǎng)絡(luò)中的每個(gè)算子的計(jì)算任務(wù)都拆分到多個(gè)核上計(jì)算,這種方法即使在處理單張圖片的推理任務(wù)時(shí)也能保證每一時(shí)刻都有多個(gè)核參與計(jì)算,從而達(dá)到利用多核資源降低時(shí)延的目的.

      但是,對(duì)于多核處理器來(lái)說(shuō),還有很多要解決的問(wèn)題.首先,處理器往往需要足夠的數(shù)據(jù)規(guī)模才能達(dá)到較高的計(jì)算效率,而算子內(nèi)的進(jìn)一步拆分會(huì)減小每個(gè)核上的計(jì)算規(guī)模.當(dāng)拆分達(dá)到一定粒度,每個(gè)核上計(jì)算效率的損失會(huì)超過(guò)拆分增加并行度所帶來(lái)的收益.因此,必須在拆分并行和計(jì)算效率之間進(jìn)行平衡,在保證足夠計(jì)算效率的同時(shí)提供足夠的并行度.另一方面,神經(jīng)網(wǎng)絡(luò)模型可以看做是一個(gè)由通常數(shù)以百計(jì)甚至千計(jì)的算子所構(gòu)成的復(fù)雜計(jì)算圖.不同種類的算子內(nèi)的算法邏輯各不相同,這就導(dǎo)致對(duì)這些算子進(jìn)行拆分的方法也不一樣.每個(gè)算子的拆分,除了平衡自身的計(jì)算效率和并行度,還要考慮和前后算子的搭配,甚至于對(duì)全局的影響.深度學(xué)習(xí)的快速發(fā)展帶來(lái)的是越來(lái)越多的大規(guī)模復(fù)雜網(wǎng)絡(luò),通過(guò)手動(dòng)方式尋找一種好的并行方法是不現(xiàn)實(shí)的,因此需要一種自動(dòng)化的方法來(lái)保證對(duì)于不同的網(wǎng)絡(luò)都能夠給出一種較好的拆分并行策略.此外,還需要考慮的是對(duì)于底層處理器的可移植性.當(dāng)我們把算子的計(jì)算任務(wù)均攤到多個(gè)核上時(shí),通常來(lái)說(shuō),我們需要重新實(shí)現(xiàn)一個(gè)在多個(gè)核上執(zhí)行的算子核函數(shù),由單核擴(kuò)展到多核,并且實(shí)現(xiàn)算子內(nèi)部的拆分并行所帶來(lái)的修改軟件棧的工作量是非常大的.傳統(tǒng)的數(shù)據(jù)并行和模型并行的實(shí)現(xiàn)仍然是基于一個(gè)處理核完成一個(gè)算子的計(jì)算任務(wù),所以并不會(huì)帶來(lái)很多額外的工作,而單個(gè)算子的跨核并行需要對(duì)算子本身的實(shí)現(xiàn)進(jìn)行修改,這種修改的難易程度依賴于處理器的可編程性和原有算子實(shí)現(xiàn)邏輯的復(fù)雜程度.因此,如何減小在多核架構(gòu)上實(shí)現(xiàn)低時(shí)延推理過(guò)程中的額外開(kāi)銷,使得方法能夠在未來(lái)對(duì)于不同的多核處理器都有一定的通用性,也是一個(gè)需要考慮的問(wèn)題.

      針對(duì)上述問(wèn)題,本文提出了一套完整的面向多核處理器低時(shí)延推理的框架設(shè)計(jì),能夠結(jié)合處理器自身的特點(diǎn),針對(duì)不同網(wǎng)絡(luò)自動(dòng)生成一套較優(yōu)的并行方案.

      1) 針對(duì)多核處理器執(zhí)行推理任務(wù),提出了一種基于算子拆分的并行框架.框架定義了一套描述不同算子拆分的統(tǒng)一表述.通過(guò)描述神經(jīng)網(wǎng)絡(luò)計(jì)算圖中數(shù)據(jù)的拆分方式,確定各種不同算子的拆分方案.

      2) 把神經(jīng)網(wǎng)絡(luò)算子間的上下文銜接部分進(jìn)行抽象并歸納成若干輔助算子.通過(guò)引入輔助算子的方式,銜接算子的單核實(shí)現(xiàn)與框架的多核拆分,減小了框架在處理器上的移植難度,使其在設(shè)計(jì)上能更好地支持未來(lái)更多的眾核處理器.

      3) 設(shè)計(jì)并實(shí)現(xiàn)了一套自動(dòng)化方法,能夠針對(duì)不同神經(jīng)網(wǎng)絡(luò)給出一套完整的端到端的拆分方案.在分析過(guò)程中,考慮了算子之間的銜接以及對(duì)于整個(gè)網(wǎng)絡(luò)時(shí)延所造成的影響.

      1 相關(guān)工作

      1.1 數(shù)據(jù)并行

      數(shù)據(jù)并行是目前大規(guī)模神經(jīng)網(wǎng)絡(luò)并行訓(xùn)練中最常使用的方法,最早可以追溯到2012年Google的DistBelief項(xiàng)目[12].DistBelief是Google大腦團(tuán)隊(duì)建立的第一代專用學(xué)習(xí)系統(tǒng),它使用大規(guī)模的CPU集群進(jìn)行神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練.數(shù)據(jù)并行的核心是使用多個(gè)處理器同時(shí)進(jìn)行對(duì)于同一個(gè)神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練.在訓(xùn)練的每一輪迭代中,每個(gè)處理器從數(shù)據(jù)集中獲取本輪迭代使用的數(shù)據(jù),在處理器上完成一輪整個(gè)網(wǎng)絡(luò)的推理及訓(xùn)練計(jì)算,并返回本輪計(jì)算得到的梯度數(shù)據(jù)來(lái)進(jìn)行模型的更新.維護(hù)權(quán)值的服務(wù)器在收到所有處理器的梯度后,使用這些梯度進(jìn)行模型數(shù)據(jù)的更新.顯然,由于多個(gè)處理器會(huì)并行地執(zhí)行訓(xùn)練任務(wù),其等價(jià)于在每輪迭代中一個(gè)更大批量的數(shù)據(jù)能夠被處理,也就加快了系統(tǒng)完成整個(gè)訓(xùn)練任務(wù)所需要的時(shí)間.所以,數(shù)據(jù)并行的關(guān)鍵在于每一輪迭代中待處理數(shù)據(jù)的批量大小,批量越大,就可以劃分到越多的處理器上來(lái)并行處理.Facebook在2017年的工作[13]以及騰訊2018年的工作[14]通過(guò)多GPU數(shù)據(jù)并行的方式,實(shí)現(xiàn)了在短時(shí)間內(nèi)使用海量圖像數(shù)據(jù)集完成大規(guī)模神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)的訓(xùn)練.

      1.2 多核處理器

      當(dāng)前多核處理器采用的最普遍的結(jié)構(gòu)是基于存儲(chǔ)共享的多核結(jié)構(gòu),處理器中包含了多個(gè)計(jì)算核,每個(gè)計(jì)算核上有獨(dú)立的緩存、寄存器堆、計(jì)算單元以及指令控制單元,所有的計(jì)算核共享同一全局存儲(chǔ),如圖1所示.單個(gè)核已經(jīng)足夠完成任何復(fù)雜邏輯的計(jì)算任務(wù),但其性能受限于摩爾定律和芯片工藝.為了進(jìn)一步提升處理器的性能,多個(gè)計(jì)算核被引入處理器中,它們可以被用于處理那些有著較高并行度的計(jì)算任務(wù).這種共享存儲(chǔ)多核結(jié)構(gòu)是一種經(jīng)典的多核結(jié)構(gòu),并且非常適合數(shù)據(jù)并行的神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法.每個(gè)核可以作為數(shù)據(jù)并行中的一個(gè)處理器,分別讀取不同的數(shù)據(jù)然后并行完成網(wǎng)絡(luò)模型的正反向計(jì)算.每個(gè)核在計(jì)算階段仍能夠保持其在之前單核架構(gòu)下良好的性能功耗比,與此同時(shí)整個(gè)系統(tǒng)的吞吐量也可以隨著核數(shù)的擴(kuò)展而增加.數(shù)據(jù)并行的問(wèn)題在于,其擴(kuò)展性依賴于處理的數(shù)據(jù)批量的大小.盡管在訓(xùn)練階段這通常不會(huì)是一個(gè)問(wèn)題,但是對(duì)于推理階段這個(gè)前提則難以保證.一般來(lái)說(shuō),用于實(shí)時(shí)服務(wù)領(lǐng)域(包括視頻監(jiān)控、自動(dòng)駕駛等)的神經(jīng)網(wǎng)絡(luò)模型,處理的數(shù)據(jù)通常是以流的方式串行輸入,導(dǎo)致了每次處理的數(shù)據(jù)規(guī)模很小甚至往往是單張圖片.在這種情況下,數(shù)據(jù)并行不能提供任何并行度,所有的工作任務(wù)會(huì)集中在單個(gè)核上,這使得多核帶來(lái)的計(jì)算資源不能轉(zhuǎn)化成處理任務(wù)的速度.

      Fig. 1 Multi-core shared memory architecture圖1 共享存儲(chǔ)的多核結(jié)構(gòu)

      1.3 基于模型拆分的多核并行

      Zlateski在2015年提出了一套在內(nèi)存共享多核機(jī)器上進(jìn)行卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的框架ZNN[15].該方法的主要過(guò)程是把卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算任務(wù)拆分,通過(guò)在多個(gè)核上調(diào)度執(zhí)行拆分后的子任務(wù),實(shí)現(xiàn)在多核結(jié)構(gòu)上加速卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算.對(duì)卷積計(jì)算來(lái)說(shuō),輸入數(shù)據(jù)和輸出數(shù)據(jù)可以分別看作是一個(gè)三維甚至更高維度的張量,其中C維度表示特征圖像的數(shù)量. ZNN在拆分網(wǎng)絡(luò)中的卷積算子時(shí),把計(jì)算任務(wù)在輸入數(shù)據(jù)的特征圖像維度和輸出數(shù)據(jù)的C維度上進(jìn)行拆分,拆分成粒度為1的子任務(wù).如圖2所示,每個(gè)節(jié)點(diǎn)表示所處的張量在C維度上粒度為1的一份子數(shù)據(jù),實(shí)線箭頭表示卷積計(jì)算,虛線箭頭表示池化計(jì)算.可以看到,如果模型本身在C維度上足夠?qū)?,就可以獲得足夠數(shù)量的子任務(wù)進(jìn)行并行計(jì)算.

      Fig. 2 Strategy in ZNN to split convolution networks圖2 ZNN拆分卷積神經(jīng)網(wǎng)絡(luò)的方法

      盡管如此,ZNN在任務(wù)拆分階段的實(shí)現(xiàn)過(guò)于簡(jiǎn)單,更多地考慮如何對(duì)拆分后的子任務(wù)進(jìn)行調(diào)度和同步.這種把卷積和其他算子在C維度上拆分到1的細(xì)粒度的拆分適合于處理器上沒(méi)有經(jīng)過(guò)任何優(yōu)化的簡(jiǎn)單實(shí)現(xiàn),但是對(duì)于利用向量計(jì)算能力并且經(jīng)過(guò)高度優(yōu)化的計(jì)算任務(wù)來(lái)說(shuō)并不可行.正如1.1節(jié)所述,處理器需要足夠的計(jì)算規(guī)模來(lái)保證計(jì)算效率,這種特征圖像尺度為1的計(jì)算任務(wù)在處理器上執(zhí)行時(shí)很難達(dá)到較好的計(jì)算效率.此外ZNN主要用來(lái)加速卷積神經(jīng)網(wǎng)絡(luò)模型,其能夠處理的算子主要有卷積,池化和通用的對(duì)位計(jì)算算子.雖然這3種算子是卷積神經(jīng)網(wǎng)絡(luò)中最常用的算子,但用來(lái)處理其他包含更多特殊算子且結(jié)構(gòu)更加復(fù)雜的網(wǎng)絡(luò)時(shí)卻遠(yuǎn)遠(yuǎn)不夠,這限制了ZNN本身的泛用性.

      2 算子拆分及其表達(dá)方式

      本節(jié)將介紹如何在多核處理器上對(duì)算子進(jìn)行拆分,以及使用一套統(tǒng)一的表達(dá)方式來(lái)表示對(duì)整個(gè)網(wǎng)絡(luò)的拆分策略,此外將說(shuō)明框架為了可移植性所引入的輔助算子.

      2.1 算子拆分

      我們的出發(fā)點(diǎn)是希望把一個(gè)算子拆分成多個(gè)規(guī)模更小的子算子,這樣可以直接調(diào)用單核架構(gòu)下的計(jì)算庫(kù),避免了重新實(shí)現(xiàn)的額外工作量.比如,一個(gè)激活算子在經(jīng)過(guò)拆分后可以得到許多更小的激活算子,這意味著我們只需要在多個(gè)核上調(diào)用原有的單核版本的激活算子完成每個(gè)子任務(wù),而不需要修改或者重新實(shí)現(xiàn)一個(gè)多核版本的激活算子.

      卷積算子是一個(gè)最值得關(guān)注的算子.在ZNN中,作者在卷積層的輸入輸出數(shù)據(jù)的C維度上進(jìn)行拆分, 而處理器往往需要一定規(guī)模的數(shù)據(jù)才能保證得到較高的計(jì)算效率.當(dāng)前處理器普遍提供了向量處理指令來(lái)處理器長(zhǎng)位寬的向量計(jì)算.如果計(jì)算的維度過(guò)小以致于無(wú)法填滿向量計(jì)算的位寬,就會(huì)導(dǎo)致計(jì)算單元被浪費(fèi),對(duì)核上的計(jì)算效率造成很大的影響.在同樣的拆分?jǐn)?shù)情況下,同時(shí)在輸入和輸出C維度上均衡拆分的加速比優(yōu)于在單個(gè)C維度上過(guò)度拆分的加速比.顯然,應(yīng)該盡量避免C維度上的過(guò)度拆分來(lái)保證計(jì)算效率,但同時(shí)又需要足夠的拆分?jǐn)?shù)量來(lái)保證多核上的計(jì)算資源可以被充分利用.我們使用N和C來(lái)表示卷積算子輸入輸出張量的前2個(gè)維度,維度的數(shù)值分別代表批量的大小、特征圖像的個(gè)數(shù),則框架對(duì)于卷積算子的不同方式的拆分可以描述成以下3種,3種情況可以相互交叉、同時(shí)存在,保證了足夠的拆分度:

      1) 當(dāng)卷積算子輸入數(shù)據(jù)的N維度超過(guò)1時(shí),對(duì)N維度上進(jìn)行拆分;

      2) 在卷積算子的輸入數(shù)據(jù)的C維度上進(jìn)行拆分;

      3) 在卷積算子的輸出數(shù)據(jù)的C維度上進(jìn)行拆分.

      如圖3所示,3種拆分都是把原始的卷積算子拆分成更小的卷積.其中,圖3(a)是把1個(gè)數(shù)據(jù)批量為2的卷積算子拆分為2個(gè)輸入批量為1的卷積算子;圖3(b)是把1個(gè)輸入數(shù)據(jù)特征圖像個(gè)數(shù)為4的卷積算子拆分為2個(gè)輸入數(shù)據(jù)特征圖像為2的卷積算子;圖3(c)是把1個(gè)輸出數(shù)據(jù)特征圖像個(gè)數(shù)為4的卷積算子拆分為2個(gè)輸出數(shù)據(jù)特征圖像為2的卷積算子.此外,雖然圖3(a)中對(duì)N維度的拆分在小批量輸入甚至單張圖像的推理任務(wù)中似乎沒(méi)有必要性,但實(shí)際上目前深度學(xué)習(xí)領(lǐng)域新出現(xiàn)的網(wǎng)絡(luò)結(jié)構(gòu)和算法已經(jīng)逐漸模糊各個(gè)數(shù)據(jù)維度的物理意義和彼此之間的界限.例如,何凱明等人于2017年提出的目標(biāo)實(shí)例分割網(wǎng)絡(luò)Mask R-CNN[16]中,即使在處理單張圖片的情況下,網(wǎng)絡(luò)中的部分卷積算子和全連接算子在N維度上會(huì)擴(kuò)展到1 000的規(guī)模.因此,支持算子在N維度下的拆分有利于框架去更好地處理未來(lái)新的網(wǎng)絡(luò)結(jié)構(gòu).

      Fig. 3 Different splitting strategies on convolution operation圖3 卷積算子的不同拆分策略

      根據(jù)卷積算子的特性,我們引入了3種拆分策略,而對(duì)于其他種類的算子,根據(jù)其計(jì)算特性的不同,同樣有不同的拆分策略.為了能夠統(tǒng)一地表達(dá)所有這些算子的拆分策略,我們使用算子的輸入輸出數(shù)據(jù)的拆分來(lái)表示算子本身計(jì)算邏輯的拆分,即通過(guò)描述與算子相關(guān)聯(lián)的輸入輸出數(shù)據(jù)被劃分成怎樣的子塊來(lái)說(shuō)明該算子在計(jì)算上是如何分成更小的子算子的.例如,當(dāng)全連接算子的輸入數(shù)據(jù)在C維度上被分成了更小的子塊,則說(shuō)明該全連接算子本身的計(jì)算在輸入C維度上被分成了多個(gè)輸入C維度更小的全連接算子.同樣地,輸出數(shù)據(jù)如果在C維度進(jìn)行到了拆分,則說(shuō)明算子在輸出神經(jīng)元的維度上被拆成了更小的全連接算子.

      更加具體地說(shuō),當(dāng)一個(gè)激活算子的輸入數(shù)據(jù)被分成了若干個(gè)子塊(從一致性的角度來(lái)考慮,輸出輸入也會(huì)進(jìn)行同樣的劃分),不妨表示為input0,input1,…,inputm-1和output0,output1,…,outputm-1,則在計(jì)算階段,整個(gè)激活算子實(shí)際上被拆分成了m個(gè)更小的激活算子,這些激活算子彼此之間沒(méi)有依賴關(guān)系,可以運(yùn)行在多個(gè)核上.而如果激活算子的輸入數(shù)據(jù)沒(méi)有做任何拆分,這代表該算子不會(huì)被劃分成更小的子算子,那么在執(zhí)行階段只會(huì)在單個(gè)核上進(jìn)行計(jì)算.這種方法可以簡(jiǎn)單明確地說(shuō)明算子本身是如何被進(jìn)一步拆解的,根據(jù)我們的實(shí)踐經(jīng)驗(yàn),目前為止所有算子都可以用這種方式來(lái)表示其拆分方式.

      2.2 調(diào)整數(shù)據(jù)的拆分形式

      對(duì)于單個(gè)算子來(lái)說(shuō),我們可以通過(guò)實(shí)驗(yàn)來(lái)得到其最佳的并行策略,拆分策略的枚舉空間包括:

      1) 并行度.即該算子將被拆分成多少個(gè)子算子.這一變量通常受限于多核架構(gòu)的核數(shù),在不超過(guò)核數(shù)上限的前提下可以采用2的冪次.

      2) 拆分維度.即算子應(yīng)該采用怎樣的方式來(lái)劃分子算子.這一點(diǎn)對(duì)于那些對(duì)拆分方式性能非常敏感的算子是有意義的.

      3) 拆分維度大小.即在決定了拆分維度之后,還需要確定每個(gè)維度上拆分的數(shù)量.一般來(lái)說(shuō),各個(gè)維度上拆分?jǐn)?shù)量的乘積即是該算子的并行度.

      以上3點(diǎn)在一起表示單個(gè)算子拆分策略的搜索空間,對(duì)每一個(gè)算子的每一種特定規(guī)模,我們采用枚舉的方式遍歷該搜索空間中的每一種拆分策略得到其實(shí)際的性能,從中我們可以得到一個(gè)性能最優(yōu)的拆分策略,它代表了在該計(jì)算規(guī)模下的算子在該底層處理器上所能得到的最好性能.

      我們使用數(shù)據(jù)的拆分來(lái)表示算子本身的拆分,這使得算子本身的拆分會(huì)影響與其相關(guān)聯(lián)的數(shù)據(jù),而不同算子對(duì)同一數(shù)據(jù)的影響在整個(gè)網(wǎng)絡(luò)中應(yīng)當(dāng)是一致的.舉例來(lái)說(shuō),上下相鄰的2個(gè)算子op1和op2,op1的輸出數(shù)據(jù)即是op2的輸入數(shù)據(jù),當(dāng)op1采用某種拆分策略stg1時(shí),對(duì)應(yīng)的其輸出數(shù)據(jù)有拆分格式l1,與此同時(shí),op2采用拆分策略stg2時(shí)會(huì)導(dǎo)致其輸入數(shù)據(jù)有l(wèi)2.l1和l2實(shí)際上是對(duì)同一數(shù)據(jù)的拆分格式的描述,兩者應(yīng)該保持一致.因此,當(dāng)op1已經(jīng)給定了其輸出數(shù)據(jù)的拆分l1時(shí),op2的拆分方式在某種程度上也同樣被決定了.這是一種非常糟糕的限制,因?yàn)樯窠?jīng)網(wǎng)絡(luò)每一層的算子的類型和規(guī)模通常都是不一樣的,這意味著對(duì)不同的算子來(lái)說(shuō),其最佳的拆分方式也是不同的.另一方面,目前網(wǎng)絡(luò)中算子的種類繁多,不同種類的算子支持的拆分策略也是不同的.部分算子可能只支持在有限維度上進(jìn)行拆分,甚至由于計(jì)算邏輯過(guò)于復(fù)雜而完全不支持拆分,這使得網(wǎng)絡(luò)中每個(gè)算子的拆分方式取決于所有這些算子所允許的拆分方式的交集.在最糟糕的情況下,倘若網(wǎng)絡(luò)中含有不支持任何形式拆分的算子,網(wǎng)絡(luò)中的其他所有算子為了在數(shù)據(jù)的拆分格式上保證一致性,都需要采用不拆分的策略.

      為了解決這個(gè)問(wèn)題,框架引入了調(diào)整算子,來(lái)保證網(wǎng)絡(luò)中的每一個(gè)算子都可以自由地選擇適合自身的拆分策略.調(diào)整算子用來(lái)把數(shù)據(jù)張量按照某種方式拆分得到的子數(shù)據(jù)塊調(diào)整成按照另一種拆分方式得到的子數(shù)據(jù)塊.通過(guò)在每個(gè)算子和其輸入數(shù)據(jù)之間插入調(diào)整算子,讓網(wǎng)絡(luò)中的每個(gè)算子都可以不受外界約束地選擇恰當(dāng)?shù)牟鸱植呗?具體來(lái)說(shuō),對(duì)于由前后相鄰的算子op1和op2所構(gòu)成的序列,在op1的輸出(也即op2的輸入)和op2之間插入調(diào)整算子,這樣op1的輸出可以經(jīng)由調(diào)整算子轉(zhuǎn)換成另一種拆分格式,因而op2的拆分策略的選擇將不會(huì)再受到op1的限制.

      2.3 補(bǔ)償算子

      根據(jù)算子計(jì)算輸出數(shù)據(jù)塊C維度上的一個(gè)值所需要的在輸入數(shù)據(jù)塊C維度上數(shù)據(jù)的范圍,可以把算子歸納為3類:1)點(diǎn)對(duì)點(diǎn)的算子.即計(jì)算輸出張量的一個(gè)點(diǎn)只需要輸入張量上與之對(duì)應(yīng)的一個(gè)點(diǎn)的值,這一類算子包括激活算子(Relu,pRelu)、批標(biāo)準(zhǔn)化算子(BatchNorm)以及對(duì)位加減乘除的基本算子(Add,Sub,Mult,Div).2)全依賴類型的算子.即計(jì)算輸出張量的一個(gè)點(diǎn)只需要輸入張量上在對(duì)應(yīng)C維度上的所有數(shù)據(jù),例如歸一化指數(shù)回歸算子(Softmax),其計(jì)算邏輯使得我們很難在歸一化的維度上對(duì)計(jì)算進(jìn)行拆分.3)區(qū)域依賴類型的算子.即計(jì)算輸出張量上的一個(gè)點(diǎn)需要輸入張量在對(duì)應(yīng)位置附近C維度上的數(shù)據(jù),例如LRN算子的C維度.

      對(duì)于屬于第1種情況的算子,我們可以在C維度上進(jìn)行任意拆分.對(duì)于屬于第2種情況的算子,在相應(yīng)維度上基本不能拆分.而對(duì)于屬于第3種情況的算子,我們通過(guò)引入補(bǔ)償算子來(lái)保證C維度上的可拆分性.補(bǔ)償算子用來(lái)把一個(gè)子數(shù)據(jù)塊之外的相鄰數(shù)據(jù)從其他數(shù)據(jù)塊的存儲(chǔ)位置讀取過(guò)來(lái),和原本的數(shù)據(jù)合并在一起形成新的數(shù)據(jù)塊,這樣可以保證每個(gè)子算子所需要的數(shù)據(jù)一定位于其所對(duì)應(yīng)的輸入數(shù)據(jù)塊中.

      3 基于整個(gè)網(wǎng)絡(luò)的拆分決策

      本節(jié)將具體說(shuō)明怎樣基于網(wǎng)絡(luò)本身的特點(diǎn)和底層處理器的計(jì)算規(guī)律,針對(duì)大規(guī)模的神經(jīng)網(wǎng)絡(luò)模型自動(dòng)給出一套端到端的拆分方案,在這個(gè)過(guò)程中,既需要兼顧每個(gè)算子本身拆分后的計(jì)算效率和并行度,也要考慮上下文算子彼此之間在拆分上的相互配合.最終目標(biāo)是得到一個(gè)能夠有效降低整個(gè)神經(jīng)網(wǎng)絡(luò)模型端到端的推理時(shí)延的拆分并行方案.

      3.1 張量數(shù)據(jù)的狀態(tài)空間

      神經(jīng)網(wǎng)絡(luò)模型通??梢钥醋魇且粋€(gè)由算子和多維張量數(shù)據(jù)所構(gòu)成的有向無(wú)環(huán)圖,算子和數(shù)據(jù)彼此之間通過(guò)有向邊相互連接,有向邊的指向表明了數(shù)據(jù)是算子的輸入或者是輸出.使用op表示算子,tensor表示張量數(shù)據(jù).同時(shí),第2節(jié)已經(jīng)說(shuō)明,為了統(tǒng)一不同算子的拆分方式的表達(dá),框架統(tǒng)一選擇使用與算子相關(guān)聯(lián)的張量數(shù)據(jù)的拆分方式來(lái)說(shuō)明算子本身的拆分方式.不妨假設(shè)網(wǎng)絡(luò)中所有張量數(shù)據(jù)都是4維的,對(duì)于實(shí)際維度不到4的數(shù)據(jù)(例如圖像分類網(wǎng)絡(luò)最后的全連接層和歸一化指數(shù)回歸層的輸入輸出),可以將其表示為低緯度為1的4維張量.對(duì)于框架本身來(lái)說(shuō),可以支持含有任意維度數(shù)量的張量數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)模型的處理,盡管如此,4維對(duì)于相當(dāng)大一部分的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)都足夠使用.

      把張量數(shù)據(jù)的任意一種拆分稱為該張量數(shù)據(jù)的一種狀態(tài)s,所有可能的拆分{s0,s1,s2,…}組成了該張量數(shù)據(jù)的狀態(tài)集合S.一般來(lái)說(shuō),這是一個(gè)非常大的狀態(tài)空間,意味著由張量的狀態(tài)所表示的算子的可能拆分方式的空間同樣也非常巨大.通過(guò)一些合理的假設(shè),可以對(duì)張量數(shù)據(jù)的狀態(tài)空間進(jìn)行剪枝.首先,多核處理器完成一個(gè)算子的計(jì)算時(shí)延取決于執(zhí)行子任務(wù)耗時(shí)最長(zhǎng)的那個(gè)核的時(shí)間,而多核架構(gòu)中各個(gè)核在硬件結(jié)構(gòu)上彼此是相互對(duì)等的,因此每個(gè)核的時(shí)間耗費(fèi)的長(zhǎng)短取決于分配給該核的任務(wù)負(fù)載的多少.所以一個(gè)合理的假設(shè)是應(yīng)該保證拆分后的子算子的規(guī)模大致均衡,為此,可以從張量的狀態(tài)空間S中省去那些拆分上不均衡的狀態(tài).此外,多核架構(gòu)中核數(shù)通常是2的整數(shù)次冪,如1,2,4,8,16等,一個(gè)并行度不是2的整數(shù)次冪的任務(wù)往往會(huì)導(dǎo)致在核的調(diào)度過(guò)程中產(chǎn)生“碎片”,因此拆分后的子算子數(shù)量應(yīng)當(dāng)保證是2的整數(shù)次冪.通過(guò)這2個(gè)假設(shè),可以極大地縮小算子拆分策略的搜索空間.

      3.2 基本原理

      把一個(gè)包含n個(gè)算子的串行神經(jīng)網(wǎng)絡(luò)模型描述成一個(gè)算子序列(op1,op2,…,opn),假設(shè)每個(gè)算子只有一個(gè)輸入和一個(gè)輸出,前一個(gè)算子的輸入是后一個(gè)算子的輸出,那么包括整個(gè)網(wǎng)絡(luò)的輸入數(shù)據(jù)張量和輸出數(shù)據(jù)張量以及算子之間的中間結(jié)果張量在內(nèi),所有的張量構(gòu)成集合{tensor0,tensor1,…,tensorn},opi的輸入是tensori-1,輸出是tensori.對(duì)每個(gè)數(shù)據(jù)張量tensori,有與之對(duì)應(yīng)的狀態(tài)集合Si,搜索策略的目標(biāo)是尋找一種張量本身和其狀態(tài)集合的某個(gè)狀態(tài)之間的映射關(guān)系tensori→si,通過(guò)給神經(jīng)網(wǎng)絡(luò)模型中每個(gè)張量確定一個(gè)具體的狀態(tài),從而可以確定所有算子的拆分方式,因此,把一個(gè)神經(jīng)網(wǎng)絡(luò)中所有數(shù)據(jù)到其狀態(tài)的一種映射關(guān)系稱為該網(wǎng)絡(luò)的一種拆分方案P.在計(jì)算階段,第i個(gè)算子opi以處于拆分狀態(tài)s的輸入數(shù)據(jù)計(jì)算出處于拆分狀態(tài)r的輸出數(shù)據(jù),具體的并行計(jì)算方式由輸入數(shù)據(jù)和輸出數(shù)據(jù)的狀態(tài)所決定,同時(shí),該算子的計(jì)算時(shí)間記為ts→r,其值的大小取決于相應(yīng)的拆分方式和底層處理器的硬件特性,則整個(gè)網(wǎng)絡(luò)的時(shí)延T計(jì)算為

      (1)

      其中si∈Si.

      整個(gè)網(wǎng)絡(luò)的拆分方案P可以看作是由每個(gè)算子的輸入張量的狀態(tài)集合中的一種狀態(tài)向輸出張量中的一種狀態(tài)的跳轉(zhuǎn).前一個(gè)算子的輸出張量的拆分狀態(tài)即是后一個(gè)算子輸入張量的拆分狀態(tài).不同的數(shù)據(jù)張量的狀態(tài)集合是不同的,同時(shí)跳轉(zhuǎn)前后的2種狀態(tài)也可能不同.經(jīng)過(guò)算子的每一種可能的跳轉(zhuǎn)對(duì)應(yīng)了在該算子上的一種有效的拆分方式,同樣與之對(duì)應(yīng)的還有使用該拆分方式在多核處理器上并行執(zhí)行該算子所使用的時(shí)間ti,因此ti可以被看作是由算子的輸入張量的狀態(tài)指向輸出張量的狀態(tài)的有向邊的權(quán)重.同時(shí),作為整個(gè)網(wǎng)絡(luò)的輸入張量和輸出張量,它們對(duì)應(yīng)的狀態(tài)空間中只有唯一一種不拆分的狀態(tài),這使得神經(jīng)網(wǎng)絡(luò)的拆分方案P由完整的輸入數(shù)據(jù)開(kāi)始到完成的輸出數(shù)據(jù)結(jié)束,外部的用戶始終看到一個(gè)完整的輸入和輸出.此時(shí),對(duì)于給定的神經(jīng)網(wǎng)絡(luò)模型搜索一個(gè)好的拆分方案P,即是尋找一條由輸入張量的不拆分狀態(tài)到輸出張量的不拆分狀態(tài)的最短路徑,該路徑在每個(gè)中間結(jié)果張量的有效狀態(tài)空間中都要選擇一個(gè)狀態(tài)經(jīng)過(guò).這種抽象的公式表示為

      P={s0,s1,…,sn}=arg min(T(s0,s1,…,sn)),

      (2)

      (3)

      在單個(gè)算子的性能優(yōu)化階段,我們可以采用枚舉的方式遍歷來(lái)獲得單個(gè)算子所有可能的拆分策略對(duì)應(yīng)的性能,從中得到其在處理器上最優(yōu)的策略,但對(duì)于整個(gè)網(wǎng)絡(luò)來(lái)說(shuō),采用枚舉遍歷的方式來(lái)求解最優(yōu)的拆分策略是非常不合適的,因?yàn)闈撛诘乃阉骺臻g非常巨大.不妨假設(shè)整個(gè)網(wǎng)絡(luò)中算子數(shù)量為N,而每個(gè)算子可選擇的拆分策略的個(gè)數(shù)為P,則整個(gè)網(wǎng)絡(luò)可供搜索的拆分策略的數(shù)量是PN,考慮到目前的大規(guī)模神經(jīng)網(wǎng)絡(luò)往往有數(shù)以百計(jì)甚至千計(jì)的算子,而P通常會(huì)在十幾到幾十之間,窮舉所有待選擇的方案從時(shí)間和資源上來(lái)說(shuō)都是不現(xiàn)實(shí)的.為此,我們采用一種機(jī)器學(xué)習(xí)的方法來(lái)幫助系統(tǒng)進(jìn)行決策.

      Fig. 4 Architecture of decision-making system for networks partition圖4 算子拆分決策系統(tǒng)的結(jié)構(gòu)

      從問(wèn)題的本質(zhì)上來(lái)看,對(duì)于網(wǎng)絡(luò)中的每一個(gè)數(shù)據(jù),都要求給出該數(shù)據(jù)的一種拆分狀態(tài),所有這些拆分狀態(tài)組合在一起就構(gòu)成了整個(gè)網(wǎng)絡(luò)的一種拆分方案P.數(shù)據(jù)之間通過(guò)算子相互關(guān)聯(lián)起來(lái),每個(gè)數(shù)據(jù)的拆分都受限于其上和其下的算子,因此問(wèn)題的本質(zhì)是基于數(shù)據(jù)的前后上下文信息對(duì)數(shù)據(jù)本身的拆分方式進(jìn)行決策.考慮到問(wèn)題本身的特性,我們采用基于注意力機(jī)制的循環(huán)神經(jīng)網(wǎng)絡(luò)來(lái)處理這個(gè)問(wèn)題.網(wǎng)絡(luò)的輸入是包含所有數(shù)據(jù)及其相關(guān)信息的特征向量組,輸出是每個(gè)算子的拆分選擇.從隨機(jī)生成的拆分策略開(kāi)始,每一輪根據(jù)上一輪生成的拆分策略在設(shè)備上實(shí)際執(zhí)行的時(shí)間來(lái)更新模型,使用更新后的模型進(jìn)入下一輪,整個(gè)過(guò)程由一輪一輪的“更新-測(cè)試”過(guò)程組成,直至得到一個(gè)針對(duì)當(dāng)前模型較好的拆分策略.如圖4所示,網(wǎng)絡(luò)被視作是一個(gè)由數(shù)據(jù)通過(guò)算子連接所構(gòu)成的圖結(jié)構(gòu),信息嵌入模塊(embedding module)把圖4中的每個(gè)數(shù)據(jù)抽象成對(duì)應(yīng)的特征向量,里面既包括了數(shù)據(jù)本身的形狀大小,也包括了該數(shù)據(jù)前后的算子的類型以及其他相關(guān)信息.數(shù)據(jù)之間的連接關(guān)系,也就是網(wǎng)絡(luò)的圖結(jié)構(gòu)同樣被嵌入每個(gè)數(shù)據(jù)塊的特征向量中,通過(guò)在特征向量中引入與當(dāng)前數(shù)據(jù)有直接連接關(guān)系的其他數(shù)據(jù)的標(biāo)號(hào),從而描述了整個(gè)網(wǎng)絡(luò)的圖結(jié)構(gòu)信息.網(wǎng)絡(luò)中所有數(shù)據(jù)塊的特征向量被作為輸入信息,而輸出則是每個(gè)數(shù)據(jù)塊對(duì)應(yīng)的拆分方式,即數(shù)據(jù)在每個(gè)維度上拆分的段數(shù).圖4中循環(huán)神經(jīng)網(wǎng)絡(luò)中每一個(gè)輸出單元輸出的是對(duì)應(yīng)的數(shù)據(jù)選擇不同拆分策略的概率大小,我們依據(jù)該概率分布,使用采樣的方法從中得到一種拆分策略并執(zhí)行每一輪中進(jìn)行n次采樣,每次采樣可以得到一套包含所有數(shù)據(jù)拆分方式的完整的全網(wǎng)絡(luò)拆分方案,我們使用n個(gè)方案的執(zhí)行時(shí)間來(lái)更新決策模型,即循環(huán)神經(jīng)網(wǎng)絡(luò)中的參數(shù).

      在使用循環(huán)神經(jīng)網(wǎng)絡(luò)的決策模型得到待拆分網(wǎng)絡(luò)的拆分方案后,并不能直接執(zhí)行該方案來(lái)得到相應(yīng)的執(zhí)行時(shí)間.如3.1節(jié)中所述,網(wǎng)絡(luò)的拆分方案由網(wǎng)絡(luò)中每個(gè)數(shù)據(jù)塊的拆分方式來(lái)決定,而每個(gè)數(shù)據(jù)塊的拆分方式,不單單需要明確數(shù)據(jù)塊在各個(gè)維度上的拆分份數(shù),同樣也需要明確每個(gè)維度上每一子段的起點(diǎn)和終點(diǎn).例如對(duì)形如(0,n),(0,c),…的數(shù)據(jù)塊,在明確其會(huì)在C維度上拆分成2份后,還需要明確每一份的起止點(diǎn)分別是什么,即給出這樣的形式(0,n),((0,c1),(c1,c)),….因此,圖4在循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)束后,使用推理模塊(inference module)對(duì)網(wǎng)絡(luò)中所有數(shù)據(jù)塊的具體拆分形式進(jìn)行推理.對(duì)于整個(gè)網(wǎng)絡(luò)的輸入數(shù)據(jù),按照循環(huán)神經(jīng)網(wǎng)絡(luò)的輸出所提供的策略,對(duì)輸入數(shù)據(jù)進(jìn)行盡可能均等的拆分,而對(duì)于網(wǎng)絡(luò)中的其他數(shù)據(jù)塊,則依照循環(huán)神經(jīng)網(wǎng)絡(luò)的輸出所提供的策略,同時(shí)按照網(wǎng)絡(luò)中算子的計(jì)算邏輯,由輸入數(shù)據(jù)的具體拆分形式推導(dǎo)出輸出數(shù)據(jù)的具體拆分形式.

      3.3 減小決策空間

      Fig. 5 Speed up of different networks with different core limits圖5 不同網(wǎng)絡(luò)在不同核數(shù)上限下的加速比

      算子融合(kernel fusion)是當(dāng)前神經(jīng)網(wǎng)絡(luò)優(yōu)化中常用到的一種技術(shù).傳統(tǒng)的GPU或者CPU上的神經(jīng)網(wǎng)絡(luò)優(yōu)化往往針對(duì)每個(gè)算子內(nèi)部的計(jì)算邏輯,通過(guò)增加向量化,提高片上存儲(chǔ)的利用率來(lái)提高單個(gè)算子的執(zhí)行性能.這些優(yōu)化受限于算子本身所能提供的優(yōu)化空間,會(huì)有一定的局限性,而算子融合則是通過(guò)把神經(jīng)網(wǎng)絡(luò)中的多個(gè)算子融合成一個(gè)新的算子,這種融合打破了算子與算子之間的隔閡,一方面可以減少每個(gè)算子啟動(dòng)(kernel launch)的開(kāi)銷,另一方面可以省去一些不必要的算子之間中間結(jié)果的訪存開(kāi)銷.最常用的算子融合的情況是把卷積、池化或者其他別的常用算子與其之后的若干個(gè)連續(xù)對(duì)位計(jì)算算子合并成一個(gè)新的算子.對(duì)位計(jì)算算子泛指一類神經(jīng)網(wǎng)絡(luò)中常見(jiàn)的算子,其特點(diǎn)是輸入數(shù)據(jù)和輸出數(shù)據(jù)有著相同的形狀,且計(jì)算輸出數(shù)據(jù)中一個(gè)數(shù)值只需要輸入數(shù)據(jù)中與其相對(duì)應(yīng)的位置上的數(shù)值,這樣的算子包括Relu和其他激活算子Scale,BatchNorm等.通過(guò)把對(duì)位計(jì)算算子和其前面的任意算子進(jìn)行融合,可以避免中間結(jié)果的訪存開(kāi)銷.序列最前端的非對(duì)位計(jì)算算子在計(jì)算過(guò)程中,每計(jì)算出一個(gè)點(diǎn)的數(shù)值,可以立即對(duì)該數(shù)值進(jìn)行后續(xù)的對(duì)位計(jì)算,從而得到整個(gè)算子序列的最終結(jié)果,而不是把當(dāng)前的輸出存至存儲(chǔ)中,再由后續(xù)的對(duì)位計(jì)算算子重新從存儲(chǔ)中讀回再進(jìn)行計(jì)算.

      為了減少網(wǎng)絡(luò)中數(shù)據(jù)塊的數(shù)量,從而減少待決策空間的大小,加快每個(gè)網(wǎng)絡(luò)的訓(xùn)練決策速度,在這個(gè)決策過(guò)程開(kāi)始前,會(huì)對(duì)待拆分的神經(jīng)網(wǎng)絡(luò)模型進(jìn)行預(yù)處理.在預(yù)處理過(guò)程中,對(duì)位計(jì)算算子將會(huì)被合入其前面的算子中,相應(yīng)地,算子之間的中間結(jié)果也會(huì)從計(jì)算圖中被移除,因?yàn)榇藭r(shí)這些數(shù)據(jù)已經(jīng)成為了算子內(nèi)部的臨時(shí)數(shù)據(jù).這種合并可以有效減少整個(gè)網(wǎng)絡(luò)中數(shù)據(jù)塊的數(shù)量,縮小待決策空間.另一方面,這種方法保證了在最終得到的拆分方案中,對(duì)位計(jì)算算子的拆分方式始終與其輸入數(shù)據(jù)保持一致,從而確保在拆分后得到的計(jì)算圖中這些子對(duì)位計(jì)算算子同樣可以使用算子融合的方式進(jìn)行優(yōu)化.

      4 實(shí)驗(yàn)與結(jié)果

      本節(jié)將檢驗(yàn)基于算子拆分的多核并行框架對(duì)于小批量數(shù)據(jù)推理任務(wù)的時(shí)延的提升效果.實(shí)驗(yàn)平臺(tái)是Intel Xeon E5-2666 v3處理器,有18個(gè)核,主頻2.9 GHz.由于框架中拆分?jǐn)?shù)量采用2的整數(shù)次冪,因此最高的有效核上限為16.算子實(shí)現(xiàn)上采用Intel的深度學(xué)習(xí)高性能計(jì)算庫(kù)MKL-DNN.我們選擇圖像分類網(wǎng)絡(luò)AlexNet[4],VGG-16[17],VGG-19[17],ResNet-50[18],ResNet-152[18]以及物體檢測(cè)網(wǎng)絡(luò)yolo-v2[19]作為測(cè)試集,測(cè)試這些網(wǎng)絡(luò)給定不同最大核數(shù)上限的條件下的單張圖片推理時(shí)延的相對(duì)加速比,測(cè)試集中的網(wǎng)絡(luò)被廣泛應(yīng)用于計(jì)算機(jī)視覺(jué)領(lǐng)域中.圖5中的測(cè)試結(jié)果顯示,不同的神經(jīng)網(wǎng)絡(luò)模型在經(jīng)過(guò)框架的拆分并行處理后,可以得到3x~6x不等的性能提升,其中VGG網(wǎng)絡(luò)和yolo-v2分別達(dá)到 5.6x和6.7x的性能提升.由于底層多核處理器的帶寬限制,大部分網(wǎng)絡(luò)在核數(shù)上限由8變成16的階段的性能提升已經(jīng)趨于平緩.考慮到在真實(shí)應(yīng)用場(chǎng)景下,網(wǎng)絡(luò)處理的通常是1 920×1 080的高分辨率圖像,圖6給出了處理大尺寸圖像時(shí)網(wǎng)絡(luò)在不同核數(shù)上限下的加速比.可以發(fā)現(xiàn),不同類型的網(wǎng)絡(luò)此時(shí)的相對(duì)比相比于小尺寸圖像做輸入時(shí)明顯提升,由3x~6x不等變成5x~8x不等.這是因?yàn)檩斎雸D像尺寸規(guī)模的增大使得網(wǎng)絡(luò)中所有算子的計(jì)算規(guī)模增大,有助于減緩每個(gè)核計(jì)算效率隨著拆分?jǐn)?shù)量增大的衰減速率,因此在同樣拆分模式下,每個(gè)子算子在計(jì)算階段可以獲得相比于處理小尺寸圖像時(shí)更高的計(jì)算效率.

      Fig. 6 Speed up of different networks with different core limits when processing 1 920×1 080 input image圖6 不同網(wǎng)絡(luò)處理1 920×1 080的輸入在不同核數(shù)上限下的加速比

      5 總 結(jié)

      在本文中,我們?cè)O(shè)計(jì)并實(shí)現(xiàn)了一套面向多核處理器的低時(shí)延機(jī)器學(xué)習(xí)推理框架.框架通過(guò)把神經(jīng)網(wǎng)絡(luò)中的每個(gè)算子拆分成更小的子任務(wù)分配到多個(gè)核上并行執(zhí)行來(lái)充分利用多核系統(tǒng)的硬件資源.通過(guò)引入少量的輔助算子,保證了網(wǎng)絡(luò)在拆分后的計(jì)算圖仍然可以使用單核上的算子核函數(shù)來(lái)實(shí)現(xiàn),避免了框架在移植過(guò)程中需要修改或者重新設(shè)計(jì)大量算子的軟件實(shí)現(xiàn),使框架在不同的處理器架構(gòu)上更加易于移植.框架能夠自動(dòng)生成一套對(duì)于給定神經(jīng)網(wǎng)絡(luò)和多核處理器的高效拆分方案,在方案的生成過(guò)程中,能夠根據(jù)單個(gè)算子的類型和規(guī)模結(jié)合底層硬件的計(jì)算吞吐速率和訪存帶寬合理調(diào)整單個(gè)算子的拆分方式,在硬件核的計(jì)算效率和算子的拆分度之間取得較好的平衡,同時(shí)也會(huì)兼顧上下文算子之間在拆分上的相互配合,統(tǒng)籌規(guī)劃多個(gè)算子的拆分選擇.實(shí)驗(yàn)結(jié)果表明,在該框架下,不同類型的神經(jīng)網(wǎng)絡(luò)處理小尺寸小批量數(shù)據(jù)時(shí),其端到端時(shí)延性能可以提升3x~6x,而在處理高分辨率圖像時(shí),端到端時(shí)延性能可以提升5x~8x,這使得多核處理器能夠更好地勝任小批量低延遲的神經(jīng)網(wǎng)絡(luò)推理工作,有利于其在云端更好地推廣和使用.

      同時(shí)也要指出,本文的方法建立在對(duì)每一個(gè)待拆分網(wǎng)絡(luò)都需要離線訓(xùn)練拆分策略模型的基礎(chǔ)上.雖然從結(jié)果上看最終得到了不錯(cuò)的拆分策略,但是離線且單獨(dú)訓(xùn)練的方式只能適用于那些事先已知結(jié)構(gòu)從而可以事先處理的網(wǎng)絡(luò)模型.而對(duì)于從未見(jiàn)過(guò)的網(wǎng)絡(luò),必須重新訓(xùn)練相應(yīng)的決策模型,所以不能立即給出網(wǎng)絡(luò)的拆分方案.在未來(lái)的工作中,我們將把重點(diǎn)放在研究如何對(duì)事先未知的網(wǎng)絡(luò)模型也能實(shí)時(shí)快速地給出拆分方案.實(shí)時(shí)地拆分各種結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)模型將有助于我們將該方法嵌入當(dāng)下主流的深度學(xué)習(xí)框架中,優(yōu)化其對(duì)于多核處理器的使用.

      猜你喜歡
      張量時(shí)延算子
      擬微分算子在Hp(ω)上的有界性
      偶數(shù)階張量core逆的性質(zhì)和應(yīng)用
      四元數(shù)張量方程A*NX=B 的通解
      各向異性次Laplace算子和擬p-次Laplace算子的Picone恒等式及其應(yīng)用
      基于GCC-nearest時(shí)延估計(jì)的室內(nèi)聲源定位
      電子制作(2019年23期)2019-02-23 13:21:12
      一類Markov模算子半群與相應(yīng)的算子值Dirichlet型刻畫
      基于改進(jìn)二次相關(guān)算法的TDOA時(shí)延估計(jì)
      擴(kuò)散張量成像MRI 在CO中毒后遲發(fā)腦病中的應(yīng)用
      Roper-Suffridge延拓算子與Loewner鏈
      FRFT在水聲信道時(shí)延頻移聯(lián)合估計(jì)中的應(yīng)用
      平乐县| 娄底市| 西乡县| 咸宁市| 万州区| 蕲春县| 岳普湖县| 阜南县| 天台县| 枞阳县| 梁山县| 合江县| 酒泉市| 石泉县| 临泽县| 阿克| 久治县| 鄯善县| 比如县| 会东县| 合江县| 辽中县| 双流县| 临澧县| 靖江市| 读书| 昭平县| 海阳市| 高碑店市| 白水县| 靖西县| 上林县| 江都市| 渭南市| 化隆| 左权县| 五大连池市| 涿鹿县| 治县。| 务川| 涟源市|