在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MLPerf世界紀錄技術分享:優化卷積合并算法提升Resnet50推理性能

浪潮AIHPC ? 來源:浪潮AIHPC ? 作者:浪潮AIHPC ? 2022-11-10 14:43 ? 次閱讀

MLPerf是一套衡量機器學習系統性能的權威標準,將在標準目標下訓練或推理機器學習模型的時間,作為一套系統性能的測量標準。MLPerf推理任務包括圖像識別(ResNet50)、醫學影像分割(3D-UNet)、目標物體檢測(SSD-ResNet34)、語音識別(RNN-T)、自然語言理解(BERT)以及智能推薦(DLRM)。在MLPerf V2.0推理競賽中,浪潮AI服務器基于ImageNet數據集在離線場景中運行Resnet50,達到了449,856 samples/s的計算性能,位居世界第一。

本文將介紹浪潮在MLPerf推理競賽中使用的卷積合并計算算法

Resnet是殘差網絡(Residual Network)的縮寫,該系列網絡廣泛用于目標分類等領域以及作為計算機視覺任務主干經典神經網絡的一部分,典型的網絡有Resnet50、Resnet101等。在Resnet神經網絡中,主要計算算子是卷積計算層。Resnet50神經網絡具有4組殘差結構,這4組殘差結構包含48個卷積算子,通過設計卷積算子的計算算法,提高卷積算子的計算性能,可以減少Resnet50推理過程中的延遲。基于最新GPU單卡的性能測試顯示,在BatchSize=2048的情況下,優化后的卷積合并優化算法相比原算法可帶來14.6%的性能提升。

MLPerf Resnet50推理流程

在MLPerf V2.0推理測試中,Resnet50模型需要在ImageNet2012測試集上達到FP32精度(76.46%)的99%以上。數據中心賽道設置了離線(Offline)與在線(Server)兩種模式,其中離線模式會產生一次推理時間大于10分鐘的samples請求,可直接反映機器和算法的推理性能。

Resnet50推理流程如下。首先在ImageNet2012測試集中讀取數據,并進行數據預處理,隨后數據會加載到TensorRT中進行實際的推理測試。測試分為兩方面,一是測試模型的精度;二是產生一次推理請求,TensorRT會將請求中的圖片全部推理完成得到總時間,根據計算時間得到每秒推理的樣本數量,即為最終的成績。

a4946a02-5b6a-11ed-a3b6-dac502259ad0.jpg

圖1 MLPerf Resnet50推理流程▲

卷積合并計算算法

▏2.1 算法優化思路

在GPU上運行Resnet50圖像推理模型時,需要將每一個算子(卷積、池化、全連接等)放在GPU的Kernel中進行算子計算,由于GPU上運行Kernel時共享內存以及寄存器的資源有限,不可能將所有的計算過程數據放到Kernel中,而GPU的全局內存一般都很大,所以會將比較大的過程數據放在全局內存中。在進行推理時,根據Kernel的計算將數據按需從全局內存讀取到Kernel中進行計算,每個算子在計算時會不可避免地產生Kernel與全局內存的數據交換,由于全局內存的讀寫訪問延遲較大,會使算子計算性能下降。

對于每個算子的Kernel計算,會產生兩部分的全局內存訪問,一部分是最開始的全局內存讀取,另一部分是Kernel計算完成后的全局內存寫回。為了降低全局內存訪問帶來的性能影響,有如下兩種辦法:

一是采用算子合并的方式。默認的程序會將每個算子都放在單獨的Kernel中進行計算,每個算子都會產生全局內存讀和寫兩次訪問。如果將兩個算子放在一個Kernel中進行計算,對于連續的兩個卷積計算,可以減少第一個卷積算子的寫回以及第二個算子的讀取;對于卷積與Shortcut的合并,可以減少一次全局內存的寫回操作,通過減少全局內存的訪問可以提高程序的計算性能;

二是根據GPU不同架構的計算特性對Kernel的內部計算進行合理的優化設計。當不可避免地需要對全局內存進行訪問時,做到全局內存進行連續線程的融合讀取,充分利用向量化讀取等加速對全局內存的訪問,同時優化計算流程,通過Double buffer用計算來隱藏內存的訪問延遲,對于需求較晚的全局內存數據,也可以通過GPU的新特性-全局內存的異步復制來隱藏數據讀取過程。

本文主要針對MLPerf推理中Resnet50卷積神經網絡的第二組殘差結構中的部分算子進行計算合并,在充分考慮GPU計算特性前提下,進行合理的算法設計,提高Resnet50卷積神經網絡的性能。

▏2.2 Resnet50合并計算算法

在Resnet50神經網絡中,第二組殘差結構有Res3.1、Res3.2、Res3.3、Res3.4,共四部分的卷積計算,其中Res3.2、Res3.3、Res3.4三部分計算結構一樣,如下圖所示:

a4ad81f4-5b6a-11ed-a3b6-dac502259ad0.jpg

圖2 Resnet50中第二組殘差結構Res3.2示意圖▲

可以看到,Res3.1的輸出(input)作為Res3.2部分的輸入,輸入后會有兩部分分支,在右部分的分支中,會先后計算Conv1,Conv2,Conv3三個卷積,其中Conv1,Conv2兩個卷積后面都包含Bn和Relu過程,Conv3后面會有Bn的計算過程;在右邊分支計算完成后,會與input進行Shortcut操作,主要進行的是與輸入數據Sum和Relu操作,兩部分結果經過Shortcut操作后會得到Res3.2的輸出完成這部分的計算。

本文介紹的合并算法對圖2虛線框中的計算進行合并,主要是對Conv3以及Shortcut的過程進行合并,包含Conv3+Bn+Sum+Relu過程。

卷積合并算法在GPU加速卡上的實現

Res3.2的計算參數主要如下:

a4c75e9e-5b6a-11ed-a3b6-dac502259ad0.jpg

通過上表可以看到,Conv3輸入Data的H*W為28*28,輸入通道Ic為128,輸入的權重Weight的h*w為1*1,輸入通道Ic為128,輸出通道Oc為512;Shortcut的輸入同Conv1,其中H*W為28*28,輸入通道Ic為512;兩部分計算合并之后的輸出Output的H*W為28*28,通道Oc為512。

▏ 3.1 關于data、weight、output的layout變換

本文采用的計算數據類型為int8,因此下文介紹的所有內容都是基于int8開展的優化。

算法對data以及weight進行了提前處理以適應GPU的計算特性,主要處理如下:

對于data,原始layout為[B, H, W, Ic]=[B, 28, 28, 128],算法將Ic=128以32為單位進行拆分為4組,形成[B, 4, H, W, Ic/32]=[B, 4(I1), 28, 28, 32(I2)]的layout,這樣做的目的是32個int8可以組成16B共128位數據的聯合向量化讀寫,提高GPU中全局內存的通信速度。

對于weight,由于h*w=1*1,因此本文后續不再表示h*w,默認的weight的layout為[Ic, Oc]=[128, 512],算法將Ic以32為單位進行拆分為4組,將4放在左數第二維,將32放在左數第四維,這樣做的目的也是為了程序在訪問全局內存時做到16B共128位數據的聯合向量化讀寫;算法將Oc以128為單位進行拆分為4組,將4放在左數第一維,將128放在左數第三維,這樣做的目的是將Oc拆成了4組放在了不同的block中進行計算,這樣在每個block進行計算的時候可以順序的由全局內存加載weight,不會產生數據內存位置的跳躍,這部分會在后面block的劃分中進行介紹,這樣就形成[O1, I1, O2, I2] =[4, 4, 128, 32]的weight的layout。

對于output,原始layout為[B, H, W, Oc]=[B, 28, 28, 512],這部分數據類似于輸入data,將Oc以32為單位進行拆分為16組,形成layout為[B, 16, H, W, Oc/32]=[B, 16(O1), 28, 28, 32(O2)]。

▏ 3.2 關于Grid以及Block的并行劃分

對于Grid的劃分,首先是x維度,由上文可知,對于Conv3的Oc為512,本文將Oc劃分為4組放到Grid.x維度,每組計算的Oc為128;對于y維度,將H*W=28*28=784分為49組放到Grid.y維度,每組計算的HW為16;對于z維度,將B分為B/4組放到Grid.z維度,每組計算B的數量是4。這樣經過劃分,Grid的數量為[Grid.x, Grid.y, Grid.z]=[4, 49, B/4],即共有4*49*B/4組計算同時并行進行。GPU上SM數量有108個,當B≥4時,一個kernel共需要啟動大于4*49*4/4=196個Block,完全滿足Grid維度并行度的要求。

對于Block中的劃分,GPU中一個SM的warp schedule為4個,因此一個block中線程數量至少大于或等于128,為了實現更好的并行度,算法選擇一個Block中設置8個warp共256個線程。

▏ 3.3 關于Block內部計算層次劃分

a4ddec68-5b6a-11ed-a3b6-dac502259ad0.jpg

圖3 Block內部計算層析劃分▲

由上文可知,一個Block中劃分的Output的計算shape為[B, H*W, Oc]=[4, 16, 128],由于在1*1卷積計算中B維度與HW維度具有同等地位,因此將BHW合并為一個維度,此時本文用M表示BHW維度,即M=BHW=4*16=64,用N表示Oc維度,即N=Oc=128,此時一個Block中的計算維度變為[M,N]=[64, 128]。

由前述data的layout的變換可知形成[B, 4, H, W, Ic/32]=[B, 4, 28, 28, 32]的layout,由于Grid.y以及Grid.x對B維度以及HW維度進行了劃分,此時一個Block中data的輸入數據為[B, I1, HW, I2]=[4, 4, 16, 32],用上段所述BHW合并為1維用M表示,即M=B*HW=4*16=64,K表示I1*I2維度,即K=I1*I2=128,則此時一個Block中data的計算維度變為[M, K]=[64, 128]。

由前述weight的layout的變換可知,weight的layout為[O1, I1, O2, I2]=[4, 4, 128, 32],由于對Oc按照32為單位劃分4組在Grid.x維度,因此每個Block中計算的Oc為128,此時一個Block中的weight的計算數據為[I1, O2, I2] =[4, 128, 32],用N表示O2維度,即N=O2=128,用K表示I1*I2維度,即K=I1*I2=128,則此時一個Block中weight的計算維度變為[N, K]=[128, 128]。

一個Block中實際要進行的計算就變為一個矩陣乘data[M, K]點乘weight[N, K]等于output[M, N],即[64, 128]﹒[128,128]=[64, 128],共4*49*B/4個Block并行完成所有整個卷積合并的計算,其中data的實際維度為[B, I1, HW, I2]=[4, 4, 16, 32],weight的實際維度為[I1, O, I2]=[4, 128, 32]。

經過前面的劃分,一個Thread Block層次實際計算量為[64, 128]﹒[128,128]=[64, 128]。

為了加速int8矩陣乘的計算,程序采用了CUDA中mma進行加速計算,其中mma的計算形狀為[m ,n ,k]=[16, 8, 32],為了配合共享內存,寄存器以及mma形狀的匹配,程序將內積方向的K維度128拆分為2組64進行計算,每組64進一步拆分為2組32(k)進行計算,這樣最基礎的Thread Block層次進行的計算就變為圖3中左上角虛線框中所示的[M, k]﹒[N, k]=[M ,N]即[64, 32]﹒[128, 32]=[64 ,128],由于一個Block中設置warp的數量為8,8個warp會對Thread Block中的計算任務進行劃分,每個warp計算任務為[32, 32]﹒[32, 32]=[32, 32]的矩陣乘,經過內積方向的4次32的循環,在warp level便可以將內積方向K=128完全計算得[M, N]=[32, 32]的計算結果,則8個warp合并可得[M, N]=[64, 128]的計算結果。

如上文所述,程序將內積方向的K維度128拆分為2組64進行計算,每組64進一步拆分為2組32(k)進行計算。這么做的目的是將data以及weight的全局內存加載變成了Double buffer模式,即首先將第一組的數據由全局內存加載到共享內存,然后在利用第一組的數據進行計算前,便提交第二組數據由全局內存加載到共享內存的過程,這樣可以利用第一組數據的計算過程時間來隱藏第二組數據的全局內存加載到共享內存的過程的時間,整體流程示意圖如下:

a51eb5d6-5b6a-11ed-a3b6-dac502259ad0.jpg

圖4 程序整體流程圖▲

如前所述,每個warp計算任務為[32, 32]﹒[32, 32]=[32, 32]的矩陣乘,因此在warp的計算層次配合[m ,n ,k]=[16, 8, 32]的形狀,需要進行row=2,col=4,共row*col=8次mma的計算才可以得到warp 層次的計算結果,在計算時配合ldmatrix的使用可以進一步提高程序的計算性能。

對于Mma層次的計算,根據mma的形狀,單次計算為[m , k]﹒[n, k]=[16, 32]﹒[8, 32]=[16, 8]。

▏ 3.4 Shoutcut的合并計算

經過以上計算,每個Block程序會得到Conv3的[M, N]=[64, 128]的計算結果,由于程序對Bn+Sum+Relu進行了合并,因此需要對Res3.1輸出的原始數據進行加載。根據Grid[x , y, z]的劃分,可以相應的得到Shortcut的數據偏移,為了隱藏這部分數據在全局內存加載到共享內存時通信延遲,程序利用了GPU異步復制(pipeline_memcpy_async)的新特性,在程序的最開始便提交了這部分數據的加載,這樣可以最大程度上利用計算的時間同時進行數據的加載以隱藏Shortcut的通信延遲,如圖4所示。完成數據的加載后,會以warp為單位對每一個計算結果進行Bn+Sum+Relu的操作,最后將數據由寄存器寫回共享內存,再寫回全局內存完成整個卷積合并算法的計算。

性能提升效果

根據上文介紹的卷積合并優化算法,在TensorRT中增加了關于卷積合并算法的plugin以替代原始算法,在最新GPU單卡進行Conv3+Bn+Sum+Relu性能測試,在BatchSize=2048的情況下,原算法的性能為123TOPS,經過優化后的卷積合并優化算法性能為141TOPS,算子相比較原算法可以帶來14.6%的性能提升。通過合并Res3.2、Res3.3、Res3.4三部分Conv3+Bn+Sum+Relu算子合并,可將Resnet50推理性能提升1%-2%。同樣該算法合并思路可以用到其他殘差結構中,通過合理的算法設計帶來整體的程序性能提升。

在MLPerf V2.0推理競賽中,浪潮通過軟件與硬件優化,基于ImageNet數據集Resnet50模型,在Offline場景中達到了449,856 samples/s的計算性能,位居世界第一。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 浪潮
    +關注

    關注

    1

    文章

    469

    瀏覽量

    23953
  • resnet
    +關注

    關注

    0

    文章

    12

    瀏覽量

    3196
  • MLPerf
    +關注

    關注

    0

    文章

    35

    瀏覽量

    650

原文標題:MLPerf世界紀錄技術分享:優化卷積合并算法提升Resnet50推理性能

文章出處:【微信號:浪潮AIHPC,微信公眾號:浪潮AIHPC】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    NVIDIA擴大AI推理性能領先優勢,首次在Arm服務器上取得佳績

    最新MLPerf基準測試表明,NVIDIA已將其在AI推理性能和能效方面的高標準擴展到Arm以及x86計算機。
    發表于 09-23 14:18 ?2645次閱讀
    NVIDIA擴大AI<b class='flag-5'>推理性能</b>領先優勢,首次在Arm服務器上取得佳績

    NVIDIA打破AI推理性能記錄

     NVIDIA憑借A100進一步擴大了在MLPerf基準測試中的領先優勢,實現了比CPU快237倍的AI推理性能,助力企業將AI研究轉化為生產力。
    發表于 10-22 14:07 ?829次閱讀

    Eshow網絡直播平臺與世界吉尼斯世界紀錄

    Eshow網絡直播平臺與世界吉尼斯世界紀錄-中華瀕危奇技表演藝術團齊手合作,實現最生動、最實時的吉尼斯世界紀錄網絡直播.非物質文化保護遺產,中華瀕危奇技表演藝術團,自創團以來一直為傳承中華文明,拯救
    發表于 08-17 18:37

    軟硬件協同優化,平頭哥玄鐵斬獲MLPerf四項第一

    RISC-V C906處理器提交的軟硬件性能優化結果,在滿足精度要求的同時,刷新了全部4個benchmark指標的紀錄,創造了RISC-V架構在AI基準測試的最好成績。(圖說:權威AI榜單ML
    發表于 04-08 14:47

    Arm Neoverse V1的AWS Graviton3在深度學習推理工作負載方面的作用

    實現的 BERT-Large 實時推理性能。越高越好。結論我們的 MLPerf BERT-large 和 Resnet50-v1.5 基準分析表明,Amazon EC2 c7g實例(使用 Arm
    發表于 08-31 15:03

    求助,為什么將不同的權重應用于模型會影響推理性能

    生成兩個 IR文件(相同的 .xml 文件,但不同的 .bin 文件) 具有不同重量的類似模型,以不同的 fps (27fps 和 6fps) 運行 更多樣化的權重是否會影響 Myriad X 上的推理性能
    發表于 08-15 07:00

    如何提高YOLOv4模型的推理性能

    使用 PyTorch 對具有非方形圖像的 YOLOv4 模型進行了訓練。 將 權重轉換為 ONNX 文件,然后轉換為中間表示 (IR)。 無法確定如何獲得更好的推理性能
    發表于 08-15 06:58

    【KV260視覺入門套件試用體驗】四、學習過程梳理&amp;DPU鏡像&amp;Resnet50

    密碼:root 5.2、ResNet50 系統安裝后可以看文件中有Vitis-AI文件夾 5.3、運行系統自帶算法程序 在此文件目錄下新建images文件夾,在網上找想要識別的圖片放在
    發表于 09-26 15:21

    依圖ReID算法創下新世界紀錄

    近日,依圖科技在行人重識別(ReID)領域全球三大權威數據集創下新的世界紀錄,將排名第一的算法水平提升至新高度。
    的頭像 發表于 04-03 16:47 ?3288次閱讀
    依圖ReID<b class='flag-5'>算法</b>創下新<b class='flag-5'>世界紀錄</b>

    深度學習工程之道|MegEngine推理性能優化技術綜述,CPU上極限加速

    MegEngine「訓練推理一體化」的獨特范式,通過靜態圖優化保證模型精度與訓練時一致,無縫導入推理側,再借助工業驗證的高效卷積優化
    發表于 02-07 10:59 ?0次下載
    深度學習工程之道|MegEngine<b class='flag-5'>推理性能</b><b class='flag-5'>優化</b><b class='flag-5'>技術</b>綜述,CPU上極限加速

    NVIDIA發布最新Orin芯片提升邊緣AI標桿

    在首次參加行業 MLPerf 基準測試時,基于 NVIDIA Ampere 架構的低功耗系統級芯片 NVIDIA Orin 就創造了新的AI推理性能紀錄,并在邊緣提升每個加速器的
    的頭像 發表于 04-08 10:14 ?4708次閱讀
    NVIDIA發布最新Orin芯片<b class='flag-5'>提升</b>邊緣AI標桿

    MLPerf是邊緣AI推理的新行業基準

      最新的 AI 推理基準顯然具有重要意義,因為它是目前可用的最接近真實世界 AI 推理性能的衡量標準。但隨著它的成熟和吸引更多的提交,它也將成為成功部署技術堆棧的晴雨表和新實施的試驗
    的頭像 發表于 07-08 15:37 ?1760次閱讀
    <b class='flag-5'>MLPerf</b>是邊緣AI<b class='flag-5'>推理</b>的新行業基準

    深度解析MLPerf競賽Resnet50訓練單機最佳性能

    標準。MLPerf訓練任務包括圖像分類(ResNet50)、目標物體檢測(SSD)、目標物體檢測(Mask R-CNN)、智能推薦(DLRM)、自然語言處理(BERT)以及強化機器學習(Minigo)等。最新的1.0版本增加了兩項新的測試項目:語音識別(RNN-T)和醫學
    的頭像 發表于 11-09 17:05 ?1509次閱讀

    基于改進ResNet50網絡的自動駕駛場景天氣識別算法

    摘要:為了充分利用自動駕駛汽車路測圖像數據,增加行駛過程中對天氣情況識別的準確性,提出了一種基于改進ResNet50網絡的自動駕駛場景天氣識別算法。該算法將SE模塊與ResNet50
    的頭像 發表于 11-09 11:14 ?996次閱讀
    基于改進<b class='flag-5'>ResNet50</b>網絡的自動駕駛場景天氣識別<b class='flag-5'>算法</b>

    使用NVIDIA推理平臺提高AI推理性能

    NVIDIA推理平臺提高了 AI 推理性能,為零售、電信等行業節省了數百萬美元。
    的頭像 發表于 02-08 09:59 ?196次閱讀
    使用NVIDIA<b class='flag-5'>推理</b>平臺提高AI<b class='flag-5'>推理性能</b>
    主站蜘蛛池模板: 久久精品国产福利国产琪琪 | 天天色狠狠干 | 国产叼嘿视频免费网站 | 天天躁狠狠躁夜夜躁 | 天堂网在线最新版官网 | 狠狠狠狠狠操 | 国产中文字幕一区 | 性色网址 | 亚洲三级小视频 | 中文字幕一区二区三区 精品 | 亚洲欧美日韩另类精品一区二区三区 | 黄色午夜 | 日本aaaaa毛片动漫 | 亚洲色吧 | h小视频在线 | 在线观看免费av网 | 国产精品久线观看视频 | 人人草97| 奇米影视四色7777久久精品 | 亚洲一区二区三区麻豆 | 免费观看四虎精品国产永久 | 四虎4444hu4影视最新地址 | 奇米影视777欧美在线观看 | 国产中日韩一区二区三区 | 狠狠色噜噜狠狠狠狠五月婷 | 四虎免费大片aⅴ入口 | 亚洲第一区精品日韩在线播放 | 国产视频一区二 | 日本xxxxx黄区免费看动漫 | 又粗又长又爽又长黄免费视频 | 97夜夜操| 日韩a毛片 | 四虎国产精品成人永久免费影视 | 国产精品美女www爽爽爽视频 | 第四色视频 | 天天干亚洲| 在线天堂中文www官网 | 六月丁香啪啪六月激情 | 伊人成年综合网 | 欧美一级片免费在线观看 | 日日操夜夜操免费视频 |