對NPU進(jìn)行建模的主要目的是快速評估不同算法、硬件、數(shù)據(jù)流下的延時(shí)、功耗開銷,因此在架構(gòu)的設(shè)計(jì)初期,可以評估性能瓶頸,方便優(yōu)化架構(gòu)。在架構(gòu)和數(shù)據(jù)流確定后,建??梢钥焖僭u估網(wǎng)絡(luò)在加速器上的執(zhí)行效率。對其建??梢詮膹乃惴ňS度和硬件維度進(jìn)行。
算法維度:以一定的方式表示需要加速的網(wǎng)絡(luò),如一些中間件描述,主要包括算子的類型、網(wǎng)絡(luò)的層數(shù)以及操作數(shù)精度等信息,這一部分可以由自定義的網(wǎng)絡(luò)描述文件表示,也可以由編譯器解析網(wǎng)絡(luò)文件生成,目的在于定量的描述工作負(fù)載。
硬件維度,包括計(jì)算資源和存儲(chǔ)資源兩部分,不同的NPU具有不同數(shù)量的計(jì)算資源,加速不同算子的并行度也會(huì)有所區(qū)別。不同NPU的存儲(chǔ)層次結(jié)構(gòu)也有很大區(qū)別,權(quán)重、特征是否共用同一片緩存或者有各自獨(dú)立的緩存,每一級存儲(chǔ)的容量、帶寬以及相互之間的連接關(guān)系,都是設(shè)計(jì)空間的一部分。
建模分析的主要問題是功耗、延時(shí)以及訪存。
對功耗而言,通常具有統(tǒng)一的分析方法,通過每個(gè)操作的功耗,比如一次乘法,加載一個(gè)數(shù)據(jù)等需要的功耗,以及總的操作次數(shù)相乘后累加,就可以估算出整體的功耗。延時(shí)可以通過RTL/FPGA等精確的仿真得到,適用于架構(gòu)與數(shù)據(jù)流確定的情況。另外有一些基于數(shù)學(xué)方法分析的建模方法,并不會(huì)實(shí)際執(zhí)行網(wǎng)絡(luò),而是根據(jù)網(wǎng)絡(luò)參數(shù)、硬件參數(shù)進(jìn)行數(shù)學(xué)推導(dǎo),估算延時(shí)。對訪存的估計(jì)與需求有關(guān),有些建模方法只關(guān)注于對DRAM的訪問,有些則會(huì)同時(shí)考慮到片上不同存儲(chǔ)單元間的數(shù)據(jù)移動(dòng)。
建模越精確其越貼近特定的架構(gòu),更有利于評估算法在特定硬件上的計(jì)算效率。
建模越模糊越具有普適性,有利于在加速器設(shè)計(jì)初期進(jìn)行設(shè)計(jì)空間探索。
以下以最近的一篇論文為例,來分析加速器架構(gòu)的設(shè)計(jì)空間探索,DeFiNES: EnablingFast Exploration of the Depth-first Scheduling Space for DNN Acceleratorsthrough Analytical Modeling,考慮了PE利用和內(nèi)存層級結(jié)構(gòu),對于PE的利用,其主要是PE間的數(shù)據(jù)交互,排列和連接方式,并沒有太大的探索空間,即計(jì)算和數(shù)據(jù)搬移的共同代價(jià),在一些架構(gòu)分析的時(shí)候,對內(nèi)存層級關(guān)注較低,多集中on-off chip,這里深度優(yōu)先的搜索加速器架構(gòu)空間,配合cost model找到最優(yōu)架構(gòu)模型,從幾個(gè)層面,逐次計(jì)算tile大?。〞?huì)影響到between layer input/output位于那個(gè)內(nèi)存層級上,以及weight復(fù)用的問題,即weight訪問的頻次),數(shù)據(jù)復(fù)用模式(即cache已計(jì)算的的數(shù)據(jù),還是完全重新數(shù)據(jù))以及層間融合(將層間存儲(chǔ)在告訴存儲(chǔ)區(qū)內(nèi)完成上一層的output送入到下一層的input)減少高層存儲(chǔ)訪問三個(gè)方面來探討搜索空間,需要一定的trade off,對于cost model,文章并沒有作詳細(xì)的介紹,cost model一般考慮lateny 和power兩部分,尚未解決的問題:文章主要針對convolution進(jìn)行的分析,以transform為代表的大模型,計(jì)算模式則完成不同,convolution計(jì)算中,weight復(fù)用,featuremap的滑動(dòng),以及感受野計(jì)算區(qū)域變化等和transform差距較大。優(yōu)點(diǎn):詳細(xì)的內(nèi)存層級分布的探討和不同容量層級的內(nèi)存分布,值得借鑒。缺點(diǎn):cost model并未真正提及,對于convolution并沒有關(guān)注到depthwise和point兩種常見版本,對于transform新的計(jì)算模式并未涉及 文章中提及了fuselayer和cascade excute,前者很好理解,對于后者,給一個(gè)簡單的介紹,所謂的cascade excute
從圖2這里可以看到,convolution的計(jì)算特點(diǎn),weight在輸入空間滑動(dòng)帶來的三個(gè)結(jié)果:1.支持逐個(gè)模塊的計(jì)算,即這里延申的cross layer的tile計(jì)算塊 2,數(shù)據(jù)的生產(chǎn)者消費(fèi)者模式,即stride和kernel size差異引起的數(shù)據(jù)復(fù)用,和層間連接的數(shù)據(jù)交付 3.計(jì)算模式導(dǎo)致的存儲(chǔ)結(jié)構(gòu),weight在層內(nèi)的復(fù)用,而tile大小影響了計(jì)算時(shí),weight的訪問頻次?;诖宋覀兛吹绞崭惺芤暗挠绊懀碿onvolution的計(jì)算結(jié)構(gòu))看到在fuse-layer的時(shí)候,較大的tile-size帶來了較好的計(jì)算效率,對比圖中可以看到tile_size=4*4,最上層的輸入為10*10,tile_size為1*1,輸入為7*7
紫色的表示計(jì)算已經(jīng)生成的數(shù)據(jù),對于圖a為完全每次都從第一層開始重新計(jì)算的模式,表示最后一層生成一個(gè)1*1*c綠色的數(shù)據(jù),倒數(shù)第二層需要提供3*3*c綠色數(shù)據(jù),第一層需要提供綠色5*5*c綠色數(shù)據(jù),因?yàn)槠鋵儆趂ullyrecompute,即沒有數(shù)據(jù)復(fù)用,可以看到底層的c個(gè)數(shù)據(jù)需求,前兩層分別需要用到9c個(gè)和25c個(gè)。對于圖b, 屬于H-cached,V-recompute,即水平方向緩存,垂直方向計(jì)算,最后一行中,生成一個(gè)1*1*c綠色數(shù)據(jù),對應(yīng)上面一層需要3*3*c的數(shù)據(jù)塊產(chǎn)于運(yùn)算,這其中需要復(fù)用cached的紅色2*3*c的數(shù)據(jù),和新加入了綠的1*3*c的數(shù)據(jù),這其中新加入的1*3的綠色數(shù)據(jù)會(huì)設(shè)置成new to-cache 1*3*c的數(shù)據(jù)為下一次的領(lǐng)域計(jì)算作為cache,如圖種藍(lán)色框?qū)?yīng),中圖種新讀入的1*3*c的數(shù)據(jù),則對應(yīng)最上層需要new to-cache 1*5*c的數(shù)據(jù),圖c同理
對于a,當(dāng)一層一個(gè)stack的時(shí)候,每一層的weight比較小,則將其放置在LB中,因?yàn)槠鋝tack很淺,每層的between stack的I/O都會(huì)寫到最慢的DRAM中,而其per stack的I/O(上一層的輸出傳遞到下一層的輸入)也只能在低級別存儲(chǔ)中傳遞。
B vs C 相同之處,都進(jìn)行了fuse, 對比a來說,因?yàn)閒use layer了,stack變深,多層間累計(jì)的weight變大,weight從原來圖a中位于LB, 被迫放在了GB中,對于b vs c,看到tile粒度變細(xì)后,其相應(yīng)的執(zhí)行次數(shù)變多,則weight訪問頻次變高,c的 weight reuse變少。對于和a比較,因?yàn)閒use了,per stack的I/O(上一層的輸出傳遞到下一層的輸入)從a中的DRAM(因?yàn)閍為single layer執(zhí)行,即每次結(jié)果需要放回到DRAM,則between-stack的I/O放在DRAM,因?yàn)橹挥幸粚?,其輸出perI/O和between stack是一樣的)移動(dòng)到了GB中(b)或者LB中(c),因?yàn)閠ile粒度變小,所以c的per-stack位于LB中,而b 的per-stack位于GB中,對于between stack是位于stack之間的,無論b還是c都還是寫入到最外層DRAM中,對于b和c而言fuse 層比較淺,對比可以看出tile 越細(xì),即tile finer,則每一層的featuremap變小,per-stack的I/O越容易放到高速緩存中,看到在圖C中 Per-Stack 的Input Feature Map & OutputFeatureMap集中在最底層的LB上,而圖B中,則在放在GB中,即所謂tile finer--》less per-stackactivation. 但是同時(shí)也帶來的缺點(diǎn),多個(gè)tile則意味著更多次的訪問weight,即所謂的tile finer-》lesslocal-memory weight reuse,再C中可以看到關(guān)于W為less reuse B vs D,對比可以看到,融合層數(shù)越多,即 fuse deeper,即每個(gè)stack包含的層數(shù)多,一個(gè)stack包含了多層的weight也就多,因此Moreper-stack weight, 對應(yīng)圖b中,weight可以在GB中,在圖d,圖e中,weight數(shù)據(jù)量較多,則都集中在了DRAM上,fusedeeper好處是這些stack中逐層之間的activation在高速存儲(chǔ)中完成了交換(即上一層的輸出是下一層的輸入),圖d中DRAM中沒有 between-stack I/O ,I/O集中在下面的高速層,即lessbetween -stack activation
因?yàn)榈谝恍?列中的塊還沒有可用的緩存數(shù)據(jù)——同樣,最后一列/行中的塊也不必為它們的鄰居存儲(chǔ)重疊,因此不是所有的tile都是相同的。
以下圖來看那些數(shù)據(jù)可以利用cached data,那些用來cache for neighbors
5_step3 內(nèi)存排列分布來看
圖9中為例看到,圖像被分割成了3種tile,對于tile1,數(shù)目為1個(gè),其weight首次需要從DRAM逐層搬移到進(jìn)來,看到在tile type1中,其weight位于DRAM中,再其后的type2(15個(gè))和type3(112個(gè)),weight是完全復(fù)用的,所以一直在LB結(jié)構(gòu)中,對應(yīng)于5_step3圖中W位于LB中,而I因?yàn)橛写鎯?chǔ)計(jì)算時(shí)的cache存在,前一層生成的輸出可能部分被緩存起來,或者使用更低的內(nèi)存級別用來作為下一層的輸入,只會(huì)在每種type切換的時(shí)候,會(huì)從DRAM中讀取一次數(shù)據(jù),因此,從DRAM中讀入后,以后的每次使用中,需要的一部分是新數(shù)據(jù),一部分是來源于cache的數(shù)據(jù),在type2和type3中,則基本都為LB中,而對于O只有在type類型切換,和最終結(jié)果則寫出到DRAM中。從圖5中step4可以看到,prev的outputfeautre map在內(nèi)存層級中更優(yōu)先于Cached data。
端到端的功耗匹配更具挑戰(zhàn)性,因?yàn)樗鼘讉€(gè)細(xì)粒度設(shè)計(jì)和布局方面非常敏感,例如:
1)稀疏性,DepFiN使用稀疏性來關(guān)閉邏輯活動(dòng)以節(jié)省功率;
2)位置和路由效應(yīng),導(dǎo)致數(shù)據(jù)傳輸比內(nèi)存讀/寫成本更昂貴,還包括稀疏依賴效應(yīng);
3)工藝、電壓和溫度(PVT)變化
看table1看到對于架構(gòu)進(jìn)行l(wèi)ike DF 手動(dòng)改造的時(shí)候,對于meta-proto-like DF處理器,local buffer 減少了weight的分配,增大了I&O的數(shù)量, 并對 I&O 進(jìn)行復(fù)用,增加I&O有助于融合的層次更深,支持更大一點(diǎn)的tile size,對于tpu-likeDF, 減少了reg for Mac group的數(shù)目,增加了Local buffer種I&O. 對于edgetpu-like DFT中,處理方式和meta-proto-like DF類似,都是減少了weight的LB的分配,增大了I&O,即更加關(guān)注可以用來在層間I/O傳遞, 給定一個(gè)workload和架構(gòu),深度優(yōu)先策略的影響,以上圖中Meta-proto-like DF架構(gòu)和FSRCNN作為workload
case1:使用FSRCNN and Meta-proto-like DF 分別作為targeted workload 和 HWarchitecture. 對于三個(gè)DF影響因子,tile size, overlap storing mode 和fusedepth, 對應(yīng)該case,其第三個(gè)軸fusedepth固定在整個(gè)DNN上,因?yàn)镕SRCNN的總weight很?。?5.6KB),因此所有權(quán)值都適合Meta-proto-likeDF架構(gòu)的weight可以全部放進(jìn)on-chiplocal buffer(看到該架構(gòu)的weight使用的local buffer是32K),因此不把整個(gè)DNN融合成一個(gè)堆棧是沒有好處
從圖中,看右下角,不同計(jì)算模式下,它們的能量和延遲數(shù)(分別為19.1和29)是相同的,因?yàn)榇藭r(shí)的tile大小為960*540即為全圖,因此不存在tile, 即轉(zhuǎn)換為了LBL, 因?yàn)椴煌闹丿B存儲(chǔ)模式對LBL沒有影響
1.考慮相同重疊存儲(chǔ)模式下,即同一個(gè)圖內(nèi)比較,發(fā)現(xiàn)不同的tile尺寸,tile尺寸太小和太大都是次優(yōu)的。tile尺寸過大,會(huì)導(dǎo)致訪問一些非常慢的存儲(chǔ)層級,tile尺寸很小,則導(dǎo)致會(huì)大量訪問weight, 太大太小都不是最好的選擇,最好的點(diǎn)總是在中間的某個(gè)地方。
2.考慮不同重疊存儲(chǔ)模式下相同的tile大小的情況下,即同一相對坐標(biāo)下的跨圖進(jìn)行比較,大多數(shù)情況下能耗順序?yàn)椋篺ull -cached 《 H-cached V-recompute《 full -recompute,這個(gè)也易于解釋,適當(dāng)?shù)拇鎯?chǔ)結(jié)構(gòu)減少了大量的重復(fù)計(jì)算 3.不同的tile大小和模式會(huì)嚴(yán)重影響能量和延遲
4.fully recompute比fully-cached更喜歡更大的tile大小。Fully-cached傾向于小一些的tile.
對上圖中,分析器對角線對應(yīng)的tile組合,其對應(yīng)的計(jì)算量如下
圖13可以看到tile越小,則計(jì)算量反而越大,因?yàn)閿?shù)據(jù)復(fù)用比例較低,在圖13種可以看到在fully recom對應(yīng)的1*1下,計(jì)算量最多, 以圖2為例子,可以看到,對于tile1*1,則頂層需要的計(jì)算為7*7,而對于tile2*2 則需要的僅僅為8*8,因此可以看到tile size的大小并不是和計(jì)算量成線性關(guān)系,tile長寬增大一倍,計(jì)算量并沒有相應(yīng)的增大,而是小于其增速,則說明,tile越小,計(jì)算量較大,對于三種存儲(chǔ)模式都是滿足這個(gè)規(guī)律,只是full-cache 影響很小,統(tǒng)觀全圖,總的情況下滿足fully-recom》H-cac,V-recom》Fully-cac. 再看到隨著tilesize的增大,因?yàn)閏ache的數(shù)據(jù)(用于減少重復(fù)計(jì)算量)的數(shù)據(jù)通常為kernel width-1列(H-cac,V-recom),或者(kernel width*kernel width-1)個(gè)(對應(yīng)于Fully-cac),但是相對于大的kernel size而言,cache起來的數(shù)據(jù)占的比例在減小,因此cached data的作用在降低,這也是在前面,對于上一層輸出的output featuremap比cached data更優(yōu)先占用較快存儲(chǔ),隨著tile size增大,比如增加到960*540這個(gè)時(shí)候cache的意義也就沒意義了(即轉(zhuǎn)換成了LBL),因此計(jì)算量也就一樣了。
----------------------------------------------------------------- 將深度優(yōu)先應(yīng)用于多個(gè)workload來分析其各自的性能,這里使用了如下的5種策略,和五個(gè)網(wǎng)絡(luò),其中FSRCNN/DMCNN-VD/MCCNN屬于activation占主要的類的workload,而MobileNetV1/Resnet18則屬于weight占主導(dǎo)的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, 這一類的特點(diǎn)weight比較少,適合多層進(jìn)行fuse, 且weight通常多位于local sram中,且適合再進(jìn)行 layer fuse的時(shí)候,stack的層次比較深,看到這三個(gè)網(wǎng)絡(luò)的weight都在幾十到幾百K字節(jié),適合fuse deep and single stack, 因此對于singlelayer是一種比較差的選擇,這一類的另一個(gè)特點(diǎn)是activation占主要,則適合對activation 作 tile處理,因此,對于layer by layer也是一種比較差的選擇,對應(yīng)于圖16 .FSRCNN/DMCNN-VD,MCCNN,使用singlelayer/layer-by-layer的時(shí)候效果都比較差。相應(yīng)的這幾種網(wǎng)絡(luò)更適合選擇fully-cache的tile,其多層融合的single stack, 對應(yīng)于這三種網(wǎng)絡(luò),綠色DF 4x72 fully-cache,紅色DF best single strategy 和紫色的best combination的效果都比較好。
再來看單一策略對不同網(wǎng)絡(luò)的影響,對于Single layer,即每層作為一個(gè)stack, 對應(yīng)于圖中藍(lán)色條,對于Layer-by-layer的黃色條,無論那種網(wǎng)絡(luò),這兩張選擇,其energy和latency都比較高。 因?yàn)槠淝罢咝枰L問最慢的DRAM,后者無法tile,也需要訪問較慢的存儲(chǔ)結(jié)構(gòu),再來看DF best single stategy和best combination的兩種情況下,即紅色和紫色,對前三個(gè)網(wǎng)絡(luò)都選擇用了比較合適的single stack, 即所有的layer總體fuse一個(gè)single stack, ,其tile選取了較為合適的4*72/24*128/47*8, 對于數(shù)據(jù)存儲(chǔ),都選擇了據(jù)存儲(chǔ)性能為Fully-cache》H-cac,V-recom》Fully-cac,可以看到這三個(gè)網(wǎng)絡(luò)都取得了不錯(cuò)的latency和energy,
綠色框DF tile采取相互適配的大小4*72,4*72模式也是在case1中對activation類型占優(yōu)的網(wǎng)絡(luò)找到的最優(yōu)解,數(shù)據(jù)存儲(chǔ) 選取為Fully-cached。在圖中對于FSRCNN/DMCNN-VD/MCCNN,其DF4x72 fully -cached, DF best single strategy,Best combination占優(yōu),而Singlelayer/Layer-by-layer不占優(yōu)
而對于MobileNetV1/Resnet18則屬于weight占主導(dǎo)的workload,這一類的特點(diǎn)activation相對比較少,因此紅色的DF best singlestategy和紫色的best combination中stack采取了不同的方式,以MobileNetV1為例子, DF best single stategy(a single strategy is used for all fusedlayer stacks)中每一個(gè)stack, 選取了7*7的tile大小,數(shù)據(jù)存儲(chǔ)為fully-cached,而對于組合模式(where different stacks can use different DF strategies),則不同層使用不同的模式,前面18層使用一個(gè)固定的tile size,使用fully-cache, 而對于后面的層,以mobilenetV1為例子,whereas MobileNetV1 and ResNet18 are weight-dominant (feature mapsare smaller and gradually decrease across layers),在18層后,featureMap已經(jīng)變得比較小,即不再對featuremap作tile處理。所以使用了layer-by-layer,總的來說更細(xì)粒度調(diào)度策略的紫色的best combination的效果最好。
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601232 -
加速器
+關(guān)注
關(guān)注
2文章
790瀏覽量
37674 -
NPU
+關(guān)注
關(guān)注
2文章
256瀏覽量
18511
原文標(biāo)題:NPU加速器建模設(shè)計(jì)(完整版)
文章出處:【微信號:算力基建,微信公眾號:算力基建】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論