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

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

3天內不再提示

NPU加速器建模設計(完整版)

sakobpqhz ? 來源:算力基建 ? 2023-06-19 15:37 ? 次閱讀

對NPU進行建模的主要目的是快速評估不同算法、硬件、數據流下的延時、功耗開銷,因此在架構的設計初期,可以評估性能瓶頸,方便優化架構。在架構和數據流確定后,建??梢钥焖僭u估網絡在加速器上的執行效率。對其建??梢詮膹乃惴ňS度和硬件維度進行。

算法維度:以一定的方式表示需要加速的網絡,如一些中間件描述,主要包括算子的類型、網絡的層數以及操作數精度等信息,這一部分可以由自定義的網絡描述文件表示,也可以由編譯器解析網絡文件生成,目的在于定量的描述工作負載。

硬件維度,包括計算資源和存儲資源兩部分,不同的NPU具有不同數量的計算資源,加速不同算子的并行度也會有所區別。不同NPU的存儲層次結構也有很大區別,權重、特征是否共用同一片緩存或者有各自獨立的緩存,每一級存儲的容量、帶寬以及相互之間的連接關系,都是設計空間的一部分。

建模分析的主要問題是功耗、延時以及訪存。

對功耗而言,通常具有統一的分析方法,通過每個操作的功耗,比如一次乘法,加載一個數據等需要的功耗,以及總的操作次數相乘后累加,就可以估算出整體的功耗。延時可以通過RTL/FPGA等精確的仿真得到,適用于架構與數據流確定的情況。另外有一些基于數學方法分析的建模方法,并不會實際執行網絡,而是根據網絡參數、硬件參數進行數學推導,估算延時。對訪存的估計與需求有關,有些建模方法只關注于對DRAM的訪問,有些則會同時考慮到片上不同存儲單元間的數據移動。

建模越精確其越貼近特定的架構,更有利于評估算法在特定硬件上的計算效率。

建模越模糊越具有普適性,有利于在加速器設計初期進行設計空間探索。

以下以最近的一篇論文為例,來分析加速器架構的設計空間探索,DeFiNES: EnablingFast Exploration of the Depth-first Scheduling Space for DNN Acceleratorsthrough Analytical Modeling,考慮了PE利用和內存層級結構,對于PE的利用,其主要是PE間的數據交互,排列和連接方式,并沒有太大的探索空間,即計算和數據搬移的共同代價,在一些架構分析的時候,對內存層級關注較低,多集中on-off chip,這里深度優先的搜索加速器架構空間,配合cost model找到最優架構模型,從幾個層面,逐次計算tile大?。〞绊懙絙etween layer input/output位于那個內存層級上,以及weight復用的問題,即weight訪問的頻次),數據復用模式(即cache已計算的的數據,還是完全重新數據)以及層間融合(將層間存儲在告訴存儲區內完成上一層的output送入到下一層的input)減少高層存儲訪問三個方面來探討搜索空間,需要一定的trade off,對于cost model,文章并沒有作詳細的介紹,cost model一般考慮lateny 和power兩部分,尚未解決的問題:文章主要針對convolution進行的分析,以transform為代表的大模型,計算模式則完成不同,convolution計算中,weight復用,featuremap的滑動,以及感受野計算區域變化等和transform差距較大。優點:詳細的內存層級分布的探討和不同容量層級的內存分布,值得借鑒。缺點:cost model并未真正提及,對于convolution并沒有關注到depthwise和point兩種常見版本,對于transform新的計算模式并未涉及 文章中提及了fuselayer和cascade excute,前者很好理解,對于后者,給一個簡單的介紹,所謂的cascade excute

3cb05704-0e73-11ee-962d-dac502259ad0.png

3cbd1d2c-0e73-11ee-962d-dac502259ad0.png

3cc96078-0e73-11ee-962d-dac502259ad0.png

從圖2這里可以看到,convolution的計算特點,weight在輸入空間滑動帶來的三個結果:1.支持逐個模塊的計算,即這里延申的cross layer的tile計算塊 2,數據的生產者消費者模式,即stride和kernel size差異引起的數據復用,和層間連接的數據交付 3.計算模式導致的存儲結構,weight在層內的復用,而tile大小影響了計算時,weight的訪問頻次?;诖宋覀兛吹绞崭惺芤暗挠绊懀碿onvolution的計算結構)看到在fuse-layer的時候,較大的tile-size帶來了較好的計算效率,對比圖中可以看到tile_size=4*4,最上層的輸入為10*10,tile_size為1*1,輸入為7*7

3cd80a4c-0e73-11ee-962d-dac502259ad0.png

紫色的表示計算已經生成的數據,對于圖a為完全每次都從第一層開始重新計算的模式,表示最后一層生成一個1*1*c綠色的數據,倒數第二層需要提供3*3*c綠色數據,第一層需要提供綠色5*5*c綠色數據,因為其屬于fullyrecompute,即沒有數據復用,可以看到底層的c個數據需求,前兩層分別需要用到9c個和25c個。對于圖b, 屬于H-cached,V-recompute,即水平方向緩存,垂直方向計算,最后一行中,生成一個1*1*c綠色數據,對應上面一層需要3*3*c的數據塊產于運算,這其中需要復用cached的紅色2*3*c的數據,和新加入了綠的1*3*c的數據,這其中新加入的1*3的綠色數據會設置成new to-cache 1*3*c的數據為下一次的領域計算作為cache,如圖種藍色框對應,中圖種新讀入的1*3*c的數據,則對應最上層需要new to-cache 1*5*c的數據,圖c同理

3ce68d24-0e73-11ee-962d-dac502259ad0.png

對于a,當一層一個stack的時候,每一層的weight比較小,則將其放置在LB中,因為其stack很淺,每層的between stack的I/O都會寫到最慢的DRAM中,而其per stack的I/O(上一層的輸出傳遞到下一層的輸入)也只能在低級別存儲中傳遞。

B vs C 相同之處,都進行了fuse, 對比a來說,因為fuse layer了,stack變深,多層間累計的weight變大,weight從原來圖a中位于LB, 被迫放在了GB中,對于b vs c,看到tile粒度變細后,其相應的執行次數變多,則weight訪問頻次變高,c的 weight reuse變少。對于和a比較,因為fuse了,per stack的I/O(上一層的輸出傳遞到下一層的輸入)從a中的DRAM(因為a為single layer執行,即每次結果需要放回到DRAM,則between-stack的I/O放在DRAM,因為只有一層,其輸出perI/O和between stack是一樣的)移動到了GB中(b)或者LB中(c),因為tile粒度變小,所以c的per-stack位于LB中,而b 的per-stack位于GB中,對于between stack是位于stack之間的,無論b還是c都還是寫入到最外層DRAM中,對于b和c而言fuse 層比較淺,對比可以看出tile 越細,即tile finer,則每一層的featuremap變小,per-stack的I/O越容易放到高速緩存中,看到在圖C中 Per-Stack 的Input Feature Map & OutputFeatureMap集中在最底層的LB上,而圖B中,則在放在GB中,即所謂tile finer--》less per-stackactivation. 但是同時也帶來的缺點,多個tile則意味著更多次的訪問weight,即所謂的tile finer-》lesslocal-memory weight reuse,再C中可以看到關于W為less reuse B vs D,對比可以看到,融合層數越多,即 fuse deeper,即每個stack包含的層數多,一個stack包含了多層的weight也就多,因此Moreper-stack weight, 對應圖b中,weight可以在GB中,在圖d,圖e中,weight數據量較多,則都集中在了DRAM上,fusedeeper好處是這些stack中逐層之間的activation在高速存儲中完成了交換(即上一層的輸出是下一層的輸入),圖d中DRAM中沒有 between-stack I/O ,I/O集中在下面的高速層,即lessbetween -stack activation

3cf52316-0e73-11ee-962d-dac502259ad0.png

因為第一行/列中的塊還沒有可用的緩存數據——同樣,最后一列/行中的塊也不必為它們的鄰居存儲重疊,因此不是所有的tile都是相同的。

3d05a09c-0e73-11ee-962d-dac502259ad0.png

以下圖來看那些數據可以利用cached data,那些用來cache for neighbors

3d0cf676-0e73-11ee-962d-dac502259ad0.png

5_step3 內存排列分布來看

3d196582-0e73-11ee-962d-dac502259ad0.png

3d227c44-0e73-11ee-962d-dac502259ad0.png

圖9中為例看到,圖像被分割成了3種tile,對于tile1,數目為1個,其weight首次需要從DRAM逐層搬移到進來,看到在tile type1中,其weight位于DRAM中,再其后的type2(15個)和type3(112個),weight是完全復用的,所以一直在LB結構中,對應于5_step3圖中W位于LB中,而I因為有存儲計算時的cache存在,前一層生成的輸出可能部分被緩存起來,或者使用更低的內存級別用來作為下一層的輸入,只會在每種type切換的時候,會從DRAM中讀取一次數據,因此,從DRAM中讀入后,以后的每次使用中,需要的一部分是新數據,一部分是來源于cache的數據,在type2和type3中,則基本都為LB中,而對于O只有在type類型切換,和最終結果則寫出到DRAM中。從圖5中step4可以看到,prev的outputfeautre map在內存層級中更優先于Cached data。

3d2de66a-0e73-11ee-962d-dac502259ad0.png

3d367884-0e73-11ee-962d-dac502259ad0.png

端到端的功耗匹配更具挑戰性,因為它對幾個細粒度設計和布局方面非常敏感,例如:

1)稀疏性,DepFiN使用稀疏性來關閉邏輯活動以節省功率;

2)位置和路由效應,導致數據傳輸比內存讀/寫成本更昂貴,還包括稀疏依賴效應;

3)工藝、電壓和溫度(PVT)變化

3d403d6a-0e73-11ee-962d-dac502259ad0.png

看table1看到對于架構進行like DF 手動改造的時候,對于meta-proto-like DF處理器,local buffer 減少了weight的分配,增大了I&O的數量, 并對 I&O 進行復用,增加I&O有助于融合的層次更深,支持更大一點的tile size,對于tpu-likeDF, 減少了reg for Mac group的數目,增加了Local buffer種I&O. 對于edgetpu-like DFT中,處理方式和meta-proto-like DF類似,都是減少了weight的LB的分配,增大了I&O,即更加關注可以用來在層間I/O傳遞, 給定一個workload和架構,深度優先策略的影響,以上圖中Meta-proto-like DF架構和FSRCNN作為workload

case1:使用FSRCNN and Meta-proto-like DF 分別作為targeted workload 和 HWarchitecture. 對于三個DF影響因子,tile size, overlap storing mode 和fusedepth, 對應該case,其第三個軸fusedepth固定在整個DNN上,因為FSRCNN的總weight很?。?5.6KB),因此所有權值都適合Meta-proto-likeDF架構的weight可以全部放進on-chiplocal buffer(看到該架構的weight使用的local buffer是32K),因此不把整個DNN融合成一個堆棧是沒有好處

3d47f5dc-0e73-11ee-962d-dac502259ad0.png

從圖中,看右下角,不同計算模式下,它們的能量和延遲數(分別為19.1和29)是相同的,因為此時的tile大小為960*540即為全圖,因此不存在tile, 即轉換為了LBL, 因為不同的重疊存儲模式對LBL沒有影響

1.考慮相同重疊存儲模式下,即同一個圖內比較,發現不同的tile尺寸,tile尺寸太小和太大都是次優的。tile尺寸過大,會導致訪問一些非常慢的存儲層級,tile尺寸很小,則導致會大量訪問weight, 太大太小都不是最好的選擇,最好的點總是在中間的某個地方。

2.考慮不同重疊存儲模式下相同的tile大小的情況下,即同一相對坐標下的跨圖進行比較,大多數情況下能耗順序為:full -cached 《 H-cached V-recompute《 full -recompute,這個也易于解釋,適當的存儲結構減少了大量的重復計算 3.不同的tile大小和模式會嚴重影響能量和延遲

4.fully recompute比fully-cached更喜歡更大的tile大小。Fully-cached傾向于小一些的tile.

對上圖中,分析器對角線對應的tile組合,其對應的計算量如下

3d5513c0-0e73-11ee-962d-dac502259ad0.png

3d60d39a-0e73-11ee-962d-dac502259ad0.png

圖13可以看到tile越小,則計算量反而越大,因為數據復用比例較低,在圖13種可以看到在fully recom對應的1*1下,計算量最多, 以圖2為例子,可以看到,對于tile1*1,則頂層需要的計算為7*7,而對于tile2*2 則需要的僅僅為8*8,因此可以看到tile size的大小并不是和計算量成線性關系,tile長寬增大一倍,計算量并沒有相應的增大,而是小于其增速,則說明,tile越小,計算量較大,對于三種存儲模式都是滿足這個規律,只是full-cache 影響很小,統觀全圖,總的情況下滿足fully-recom》H-cac,V-recom》Fully-cac. 再看到隨著tilesize的增大,因為cache的數據(用于減少重復計算量)的數據通常為kernel width-1列(H-cac,V-recom),或者(kernel width*kernel width-1)個(對應于Fully-cac),但是相對于大的kernel size而言,cache起來的數據占的比例在減小,因此cached data的作用在降低,這也是在前面,對于上一層輸出的output featuremap比cached data更優先占用較快存儲,隨著tile size增大,比如增加到960*540這個時候cache的意義也就沒意義了(即轉換成了LBL),因此計算量也就一樣了。

3d6f5654-0e73-11ee-962d-dac502259ad0.png

3d7c3e28-0e73-11ee-962d-dac502259ad0.png

----------------------------------------------------------------- 將深度優先應用于多個workload來分析其各自的性能,這里使用了如下的5種策略,和五個網絡,其中FSRCNN/DMCNN-VD/MCCNN屬于activation占主要的類的workload,而MobileNetV1/Resnet18則屬于weight占主導的workload。

Single layer: layers are completely evaluated one at a time, feature maps are always stored to and fetched fromDRAM in between layers;

Layer-by-layer: layers are completely evaluated one at a time,thatmeans no tile, intermediate feature maps are passed on to the next layer in thelowest memory level they fit in;

Fully-cached DF with 4*72 tiles, which is the bestfound in case study 1;

The best strategy found when a single strategy is used for all fused layer stacks;

The best combination, where different stacks can use different DFstrategies.

3d859d06-0e73-11ee-962d-dac502259ad0.png

FSRCNN/DMCNN-VD/MCCNN屬于activation占主要的類的workload, 這一類的特點weight比較少,適合多層進行fuse, 且weight通常多位于local sram中,且適合再進行 layer fuse的時候,stack的層次比較深,看到這三個網絡的weight都在幾十到幾百K字節,適合fuse deep and single stack, 因此對于singlelayer是一種比較差的選擇,這一類的另一個特點是activation占主要,則適合對activation 作 tile處理,因此,對于layer by layer也是一種比較差的選擇,對應于圖16 .FSRCNN/DMCNN-VD,MCCNN,使用singlelayer/layer-by-layer的時候效果都比較差。相應的這幾種網絡更適合選擇fully-cache的tile,其多層融合的single stack, 對應于這三種網絡,綠色DF 4x72 fully-cache,紅色DF best single strategy 和紫色的best combination的效果都比較好。

再來看單一策略對不同網絡的影響,對于Single layer,即每層作為一個stack, 對應于圖中藍色條,對于Layer-by-layer的黃色條,無論那種網絡,這兩張選擇,其energy和latency都比較高。 因為其前者需要訪問最慢的DRAM,后者無法tile,也需要訪問較慢的存儲結構,再來看DF best single stategy和best combination的兩種情況下,即紅色和紫色,對前三個網絡都選擇用了比較合適的single stack, 即所有的layer總體fuse一個single stack, ,其tile選取了較為合適的4*72/24*128/47*8, 對于數據存儲,都選擇了據存儲性能為Fully-cache》H-cac,V-recom》Fully-cac,可以看到這三個網絡都取得了不錯的latency和energy,

綠色框DF tile采取相互適配的大小4*72,4*72模式也是在case1中對activation類型占優的網絡找到的最優解,數據存儲 選取為Fully-cached。在圖中對于FSRCNN/DMCNN-VD/MCCNN,其DF4x72 fully -cached, DF best single strategy,Best combination占優,而Singlelayer/Layer-by-layer不占優

而對于MobileNetV1/Resnet18則屬于weight占主導的workload,這一類的特點activation相對比較少,因此紅色的DF best singlestategy和紫色的best combination中stack采取了不同的方式,以MobileNetV1為例子, DF best single stategy(a single strategy is used for all fusedlayer stacks)中每一個stack, 選取了7*7的tile大小,數據存儲為fully-cached,而對于組合模式(where different stacks can use different DF strategies),則不同層使用不同的模式,前面18層使用一個固定的tile size,使用fully-cache, 而對于后面的層,以mobilenetV1為例子,whereas MobileNetV1 and ResNet18 are weight-dominant (feature mapsare smaller and gradually decrease across layers),在18層后,featureMap已經變得比較小,即不再對featuremap作tile處理。所以使用了layer-by-layer,總的來說更細粒度調度策略的紫色的best combination的效果最好。

3d90d07c-0e73-11ee-962d-dac502259ad0.png

3d9a369e-0e73-11ee-962d-dac502259ad0.png

3da6b75c-0e73-11ee-962d-dac502259ad0.png

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

    關注

    1608

    文章

    21367

    瀏覽量

    594653
  • 加速器
    +關注

    關注

    2

    文章

    766

    瀏覽量

    36714
  • NPU
    NPU
    +關注

    關注

    2

    文章

    223

    瀏覽量

    18178

原文標題:NPU加速器建模設計(完整版)

文章出處:【微信號:算力基建,微信公眾號:算力基建】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    《VHDL實用教程》完整版

    電子發燒友網站提供《《VHDL實用教程》完整版.txt》資料免費下載
    發表于 08-28 16:30 ?0次下載

    AltiumDesignerSummer9完整版安裝

    AltiumDesignerSummer9完整版安裝
    發表于 12-08 21:37 ?0次下載

    鳥哥的Linux私房菜-完整版

    電子發燒友網站提供《鳥哥的Linux私房菜-完整版.txt》資料免費下載
    發表于 08-19 20:46 ?0次下載

    ASCLL碼表(完整版)

    ASCLL碼表(完整版)ASCLL碼表(完整版)ASCLL碼表(完整版)ASCLL碼表(完整版)
    發表于 11-20 11:26 ?0次下載

    超星閱覽器完整版下載

    超星閱覽器完整版下載
    發表于 12-28 15:38 ?0次下載

    開關電源原理與設計-張占松(pdf完整版)

    開關電源原理與設計-張占松(pdf完整版)
    發表于 05-04 11:09 ?0次下載

    STM32固件庫_中文版_最完整版

    STM32固件庫_中文版_最完整版,看好了是最完整版。
    發表于 05-16 11:05 ?0次下載

    ASCII碼表(完整版)

    ASCII碼表(完整版),感興趣的小伙伴可以看看。
    發表于 07-29 14:15 ?0次下載

    Linux命令大全完整版

    Linux命令大全完整版
    發表于 12-16 22:33 ?0次下載

    PCB流程介紹教程(完整版)

    PCB流程介紹教程(完整版)
    發表于 02-14 16:40 ?0次下載

    高頻答案_高瑜翔完整版

    高頻答案_高瑜翔完整版
    發表于 09-11 08:21 ?0次下載

    C51學習的教程完整版

    C51學習的教程完整版
    發表于 10-16 10:52 ?0次下載
    C51學習的教程<b class='flag-5'>完整版</b>

    《IC設計基礎》完整版

    《IC設計基礎》完整版
    發表于 10-18 11:30 ?0次下載

    軟件無線電論文完整版

    軟件無線電論文完整版免費下載。
    發表于 05-28 09:27 ?0次下載

    ASCII碼對照表完整版

    ASCII碼對照表完整版
    發表于 12-22 09:23 ?0次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>