對NPU進行建模的主要目的是快速評估不同算法、硬件、數據流下的延時、功耗開銷,因此在架構的設計初期,可以評估性能瓶頸,方便優化架構。在架構和數據流確定后,建??梢钥焖僭u估網絡在加速器上的執行效率。對其建模可以從從算法維度和硬件維度進行。
算法維度:以一定的方式表示需要加速的網絡,如一些中間件描述,主要包括算子的類型、網絡的層數以及操作數精度等信息,這一部分可以由自定義的網絡描述文件表示,也可以由編譯器解析網絡文件生成,目的在于定量的描述工作負載。
硬件維度,包括計算資源和存儲資源兩部分,不同的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大小(會影響到between 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
從圖2這里可以看到,convolution的計算特點,weight在輸入空間滑動帶來的三個結果:1.支持逐個模塊的計算,即這里延申的cross layer的tile計算塊 2,數據的生產者消費者模式,即stride和kernel size差異引起的數據復用,和層間連接的數據交付 3.計算模式導致的存儲結構,weight在層內的復用,而tile大小影響了計算時,weight的訪問頻次。基于此我們看到收感受野的影響(即convolution的計算結構)看到在fuse-layer的時候,較大的tile-size帶來了較好的計算效率,對比圖中可以看到tile_size=4*4,最上層的輸入為10*10,tile_size為1*1,輸入為7*7
紫色的表示計算已經生成的數據,對于圖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同理
對于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
因為第一行/列中的塊還沒有可用的緩存數據——同樣,最后一列/行中的塊也不必為它們的鄰居存儲重疊,因此不是所有的tile都是相同的。
以下圖來看那些數據可以利用cached data,那些用來cache for neighbors
5_step3 內存排列分布來看
圖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。
端到端的功耗匹配更具挑戰性,因為它對幾個細粒度設計和布局方面非常敏感,例如:
1)稀疏性,DepFiN使用稀疏性來關閉邏輯活動以節省功率;
2)位置和路由效應,導致數據傳輸比內存讀/寫成本更昂貴,還包括稀疏依賴效應;
3)工藝、電壓和溫度(PVT)變化
看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融合成一個堆棧是沒有好處
從圖中,看右下角,不同計算模式下,它們的能量和延遲數(分別為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組合,其對應的計算量如下
圖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),因此計算量也就一樣了。
----------------------------------------------------------------- 將深度優先應用于多個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.
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的效果最好。
-
FPGA
+關注
關注
1630文章
21796瀏覽量
605998 -
加速器
+關注
關注
2文章
807瀏覽量
38087 -
NPU
+關注
關注
2文章
292瀏覽量
18784
原文標題:NPU加速器建模設計(完整版)
文章出處:【微信號:算力基建,微信公眾號:算力基建】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論