DSA
AI推論執行有道 INT4運算全精度優化
因此,4位元啟動參數和4位元權重參數(4-bit Activations and 4-bit Weights, 4A4W)Hardware-friendly型量化解決方案可實現更優異的精度/資源權衡取捨。本文介紹在Zynq UltraScale+MPSoC和Zynq-7000SoC系列上針對CNN 4位元XDPU實現的低精度加速器,其透過高效映射卷積運算,充分發揮其DSP功能。這種解決方案可提供優於XDPU兩倍的性能。而在ADAS系統中執行2D檢測任務時,這種實現方案能夠在MPSoC ZCU102基板上實現230fps的推論速度,與8位元XDPU相比,性能提高了1.52倍。此外,在用於ADAS系統中的不同任務時,該解決方案可實現媲美全精度模型的結果。
網路結構剖析
企業日益重視使用AI的系統在資料中心、汽車、工業和醫療等領域中的產品化。這帶來了兩大挑戰,如AI推論需要完成的運算量規模增加,同時還要保持價格、功耗、延遲和尺寸大小不變;以及AI科學家繼續日復一日地在演算法和模型上開展創新,也需各種不同的硬體架構提供最佳性能。
針對持續創新的強烈需求則需要使用彈性的領域專用架構(DSA)。優化AI推論性能和降低功耗的主要趨勢之一,是使用較低精度和混合精度。為降低硬體設計複雜性,模型量化被當作應用於各類硬體平台的關鍵技術。大量工作被投入用於大幅降低CNN運算量和儲存成本。本文充分地證明,對於大多數電腦視覺任務,在不嚴重犧牲精度的情況下,權重參數和啟動參數可以用INT8表示。然而對於某些邊緣應用而言,硬體資源仍然不足。在針對邊緣應用使用較低的位元寬度(如1或2位元)時,一些常見的硬體設計解決方案使用簡化的乘法器。儘管這些解決方案延遲低、輸送量大,但它們與全精度模型相比,仍然存在較大的精度差距。因此,在模型精度和硬體性能之間尋求平衡變得至關重要。
本文運用幾種常見的網路結構,在ImageNet分類任務上透過使用幾種不同的量化演算法進行實驗。結果顯示精度隨著位元寬度減少而下降。尤其是在位元寬度低於4時,精度下降幅度顯著。此外,也使用Samuel Williams等人提出的Roofline模型,分析不同位元寬度下的硬體性能,如圖1所示。以賽靈思ZCU102評估板為例,隨著MAC的精度降低、硬體成本降低,性能獲得提升。此外,實驗結果還顯示,低位元量化可透過降低記憶體需求提高性能。這在ResNet-50神經網路的卷積運算強度上獲得證實,該網路分別用4和8位元精度進行了運算。因此,INT4在模型精度和硬體性能之間實現了較佳的平衡。
圖1 ZCU102上以不同位元寬度運行Roofline模型
如何量化全流程Hardware-friendly型CNN
為實現整個量化過程的Hardware-friendly化,INT4量化法可分為三個部分:量化機制、Hardware-friendly型量化設計、量化感知訓練。
・量化機制
本文使用經訓練的量化臨界值(TQT)將DNN從單精確度浮點(FP32)轉換為INT4。對於權重和啟動參數,量化函數可正式寫成:
其中n=-2b-1,p=2b-1-1,為有符號資料;n=0,p=2b-1及為無符號資料。
公式1表示輸入值(x)的量化值取決於臨界值(t)、位元寬度(b)和量化比例係數(s)。臨界值t一般初始化為待量化張量的絕對值之最大值。隨後在訓練過程中用log2t的形式進行優化。量化係數是2的冪,具有Hardware-friendly特性。若將上下截斷運算去除部分離群資料,加大權重參數和啟動參數的分布緊密度,更有利於量化。
如上文所述,log2t是一種在訓練過程中可學習的參數,優化它就能確定合適的量化範圍;與之相反,log2t的梯度可透過鏈式法則確定。此外,輸入值的梯度也可透過下方公式運算:
對於(四捨五入)和(正無窮取整數),不可微函數STE被用於確定梯度,定義如下方公式所示。
TQT證明對數表達能確保臨界值和輸入值的標度不變性。採用對數方式訓練臨界值更容易管理,並且已證明是較高效的。
・Hardware-friendly型量化設計
要進行量化訓練,必須從全精度網路中構建低位元網路。以流程化Hardware-friendly型量化為基礎,下文介紹部分常用的網路結構,並針對幾種粗細微性模組的量化解決方案總結。對於這些量化模組,INT4量化方法可用於多種類型的網路結構;部分常用模組的量化解決方案如圖2所示。圖2中的虛線表示能根據實際網路結構增添或者刪除。
圖2 模組量化
首個模組為CBR(Conv+BN+ReLU),其作為CNN中的通用結構,BN層被合併以減少訓練和推論過程中的觸發器數。然而,BN層存在不一致性;大量運算在訓練過程中使用當前批次的平均值和平方差,但在推論過程中移動平均值和平方差。如果量化的是從當前批次的平均值和平方差獲得的合併參數,在推論時就會導致偏差。為消除這種不匹配,應使用下列最佳實踐來量化這種結構。在將BN折疊到ConV後,就對折疊到INT4的參數進行量化。該模組的量化如圖2(b)所示。
再來為BRC(BN+ReLU+Conv)模組,如圖2(c)所示,在緊隨卷積層的BN層被合併後,仍然存在獨立的BN層。然而,在現有的INT4量化方法中,BN層原則上不受重視。為有效部署這個獨立的BN層,有種量化神經網路的簡化方法被用於在訓練過程中保持全精度,並在推論過程中吸收浮點標度和臨界值偏差。這種方法可延伸用於所有線性運算(包括推論中的卷積),同時有助於保持精度。該模組的量化詳見圖2(d)。
而於加法模組中,其占用硬體資源較少。因此該層一般量化為8位元。此外,為了量化所有輸入和輸出,將使用標度共用規則。共用規則的作用是讓硬體繞過標度運算,消除了浮點乘法的需要。如圖2(b)所示,「ShareQuantize」指這些量化層共用相同標度。
至於其他則為確保卷積運算輸入是4位元,加法運算的8位元輸出需要再次被量化為4位元,如圖2中的「再量化」所示。針對第一層和最後一層,仍然進行INT4量化,整個網路的輸出被量化成8位元,且內積層與卷積層保持一致。
・量化感知訓練
量化感知訓練通常被作為關鍵技術,用來降低低位元模型與全精度模型之間的精度差。在本文描述的INT4量化方法中,它仍具備不可或缺的作用。量化感知訓練過程都使用以下所示的逐層量化感知訓練演算法。
於輸入方面,其為全精度輸入、權重和偏差:X、W、Bias;針對輸入和權重的可學習對數域臨界值:ax、aw、abias;位元寬度:針對輸入和權重,b=4;針對偏差,b=8。而輸出:Y,初始化ax=log2max(|x|),aw=log2max(|w|),abias=log2max(|bias|),同時根據公式1運算q(x)、q(w)和q(bias)。而Y=Forward(q(x),q(w),q(bias));運算分類損耗為:Loss,針對所有可學習參數使用正則化方法。可參閱以下公式,並使用Adam更新全精度參數。
於DSP晶片最佳化INT4f
使用DSP硬體資源可實現乘法和加法密集型(Multiply-accumulate, MAC)占用硬體資源較少。經優化後,DSP能夠在16或28nm元件上處理較多的MAC運算。以16nm為例,賽靈思可程式設計元件中UltraScale架構的DSP48E2晶片就屬於專用晶片,其由一個27×18二進位補數乘法器和一個48位累加器構成。如圖3所示,MAC能使用DSP晶片完成。
圖3 MAC模式下的晶片
INT4優化
在低精度MAC運算中,相乘方式是a×b。其中a是4位元無符號啟動參數資料;b則是4位元有符號權重參數資料。該晶片可被配置成4通道乘法運算,如圖4所示。
圖4 4通道封裝晶片的配置模式
該晶片的埠A是27位元寬度、埠B是18位元寬度。iNT4×uiNT4相乘產生的結果至少有8位元寬度。
充分利用DSP資源的前提是在多個相乘被打包在一起時,可確保輸出結果保持正確。為確保這一點,通道之間添加了保護位元。當四個MAC通道被打包在一起時,需要在兩路輸入間布置足夠的保護位元。根據晶片設計,保護位元被設置為3位元:
第一個通道A1×W1被布置在對應埠的4LSB上,下一個通道A2×W1需要移位元至少8位元才能正確運算;第二個通道與第一個通道共用權重參數資料W1。埠B中的A2移位11位。3位元保護位元用於最大化DSP資源的利用;最後一個運算元W2被分配給埠A。最後兩個通道是A1×W2和A2×W2。權重參數是有符號資料。在相乘開始前,使用27位預加法器打包兩個權重參數資料。因為W1需要符號擴展,所以W2不能布置在D埠的四個MSB上。如果W2在MSB中,當W1<0且W2=-8時,預加法器就會溢出。後48位加法器可作為累加器,透過級聯對之前層次的DSP結果進行相加。單個晶片就能在單時序週期內實現四通道MAC。
結果的位元寬度在累加後增大。Hardware-friendly型量化器是一組移位暫存器,它可以透過指令控制移位元的位元數。移位元運算為Hardware-friendly型。在低精度CNN中,卷積能夠使用兩種量化方法之一。一種是逐運算位元輸出8位元;另一種是針對下一卷積輸出4位元。透過優化演算法,兩種量化方法都能量化成2k的步伐長度。差別在於輸出資料的位元寬度以及它們是否是有符號資料。
DSP強化使用
DSP雙數據速率(DDR)技術被用於改進晶片實現的性能。因此需要為DPU提供兩個輸入時序:一個用於通用邏輯,另一個用於DSP晶片。未採用DSPDDR技術的DPU和採用強化使用模式的DPU之間的差異如圖5所示。
圖5 未採用DDR的DSP和DSP強化使用之間的差異
運算圖因應CNN要求
卷積是CNN網路的主要運算要求。卷積的實際運算任務如下:
其中Anf是浮點特徵圖,Wnf是浮點權重。其本質上是MAC運算。根據新量化感知訓練解決方案,浮點的卷積運算按如下方式進行量化:
其中axf、awf和abf是標度。這些浮點參數被轉換成2k×2k。這是一種Hardware-friendly型標度,能夠在FPGA中使用移位運算實現。
DSP模組在一個時序週期中需要兩個權重和兩個特徵,其中彼此都能共用,如圖6所示。
圖6 卷積運算任務和乘法器共用方式
其中Anf是浮點特徵圖,Wnf是浮點權重。其為MAC運算。根據新量化感知訓練解決方案,浮點的卷積運算如以下方式進行量化:
模型量化與性能模擬
下面的篇幅講解量化感知訓練中使用的CV任務。這些任務包括影像分類、姿態估計、2D檢測、3D檢測、語義分割和多工處理。
基準分類模型
在完成ImageNet分類資料叢集上的實驗後,得到以下結果。網路包括ResNet50-V1、ResNet50-V2。在所有實驗中,資料叢集均從浮點模型進行微調。所有偏差參數都量化到8位元,實驗結果如表1所列。
而基準分類模型的結果參見表1。它體現了這種方法的有效性,對ResNet50V1而言,4位元與8位元XDPU解決方案在前1精度上的差距僅有1.4%,在前5精度上的差距則僅有0.9%。
表1 不同位元寬度下類ResNet50的網路精度
即時ADAS模型解析
為進一步驗證量化方法的通用性,也在真實場景下開展了其他CV任務。
・姿態估計
姿態估計任務使用更加複雜的堆疊Hourglass網路。透過在MPII資料叢集上開展姿態估計實驗,評估逐層模式下兩個網路結構的精度。結果參見表2。
在表2中,hg-s2-b1意謂著堆疊數量是2,模組數量是1;hg-s8-b1意謂著堆疊數量是8,模組數量是1,因此證明INT4量化解決方案實現了可相比浮點模型的精度。
表2 不同位元寬度下的Hourglass網路精度
・2D檢測
在ADAS系統中,BDD100K數據叢集用於2D檢測。此外,特徵金字塔網路(FPN)結構被添加到ResNet18-SSD中作為檢測網路,而實驗結果如表3所示。
表3所示的是在經過微調後,8位元量化模型實現了高於浮點模型的mAP。透過逐漸從8位元微調到4位元,最終4位元量化模型的mAP損耗小於2%。
表3 不同位元寬度下的檢測精度
・3D檢測
ADAS系統的3D檢測任務使用KITTI資料叢集,而PointPillars用於開展3D預測任務,實驗結果如表4所示。
如表4所示,採用微調技巧後,4位元量化模型的精度僅比浮點模型低0.16%。
表4 不同位元寬度下的3D檢測結果
・語義分割
在ADAS系統的語義分割任務中,CityScape的資料叢集以理解城市視覺場景為重點。實驗在以ResNet18為基礎的特徵金字塔網路上開展。結果如表5所示。
表5顯示,8位元模型可實現比浮點模型更高的mIoU,4位元模型的mIoU僅比浮點模型低1.7%。語義分割的示意圖參見圖7。
表5 不同位元寬度下的語義分割精度
圖7 語義分割示意圖
・多工學習
為增強模型的歸納功能和精度,在多工模型中使用了多個訓練資料集,包括用於檢測的Waymo和BDD100k,以及用於分割的BDD100k和Cityscapes。這些研究在以ResNet18為基礎的特徵金字塔網路(FPN)上開展。結果如表6所示。
表6顯示,8位元量化模型可實現優於浮點模型的mAP和與浮點模型保持同等水準的mIoU。透過逐步微調,與浮點模型相比,最終的4位元量化模型的mAP降低1.66%,mIoU提高1.79%,仍然劣於8位元模型的表現。
表6 不同位元寬度下的多工精度
競爭分析:8位元/4位元對比
4位元XDPU在下列三種評估板上以300MHz頻率運行:Ultra96、Zynq UltraScale+ MPSoC ZCU104和ZCU102。表7所示為4和8位元XDPU的比較情況。在不同的FPGA上,4位元XDPU實現的性能提升1.5倍到2.0倍之間。例如,ZCU102板使用的硬體資源沒有增加,但性能提高2倍。
表7 4和8位元XDPU的性能比較
對於兩個精度不同的加速器,在啟用池化、逐運算單元逐深度卷積和平均池化等全部功能後,針對資源進行比較。如表8中所示,在相同的性能架構下,DSP和RAM的占用顯著下降。有鑑於資源耗用下降,4位元XDPU架構被擴展到B8192的最大規模。使用B8192架構能以單元件實現更高性能。
表8 4和8位元XDPU的資源消耗比較
若以表3中13.6FLOP的2D檢測模型為例,兩個高精度模型4/4和8/8分別使用4和8位元XDPU進行測試。該網路的運算要求是13.6GOP。2D檢測網路的訊框率如表9所示,測試不包含預處理和後處理。有鑑於效率和網路類型的差異,性能和訊框率之間不存在線性關係。如表9所示,4位元XDPU的訊框率在所有平台上均優於8位元XDPU。
表9 4和8位元DPU之間的訊框率比較
本文介紹了一種運行在Zynq UltraScale+ MPSoC和Zynq-7000 SoC系列元件上的完整流程、Hardware-friendly型量化解決方案,可作為CNN的低精度加速器。此外,本文也介紹如何在DSP晶片上優化INT4,進而在一個時序週期內完成4通道INT4相乘。卷積運算要求可透過打包DSP予以滿足。與INT8 XDPU解決方案相比,使用DSP實現的INT4優化在真實硬體上可將處理峰值GOPS提升最高2倍,並將性能提升至最高1.77倍。
(本文作者皆任職於賽靈思Xilinx)
讓資料動起來 領域專用架構思維不一樣
自從2017年度圖靈獎(Turning Award)得獎人John Hennessy與David Patterson在領獎演說中強調領域專用運算架構(Domain Specific Architecture)與領域專用程式語言(Domain Specific Language)的重要性後,在資訊科學與半導體領域掀起了一股討論熱潮。不同於通用運算架構,領域專用運算架構強調更高的運算效能與更低的功耗,但不像CPU或GPGPU,可以用來執行各種運算任務。目前市場上有哪種處理器比較接近兩位圖靈獎得主所描述的領域專用運算架構呢?答案是現場可編程閘陣列(FPGA)。
賽靈思(Xilinx)技術長Ivo Bolsens表示,電路微縮所能帶來的運算效能提升、功耗改善,在很多年前就已經趨緩(圖1)。為了滿足人工智慧(AI)等運算任務對效能的高度需求,半導體業界必須設法另闢蹊徑。
圖1 過去40年處理器效能演進
這也是Hennessy與Patterson之所以提出領域專用架構最主要的原因。目前業界最常見的CPU,是典型的通用(General Purpose)處理器,這類處理器在執行帶有各種決策樹的複雜演算法時很有效率,而且有各式各樣的函式庫(Library)支援,但CPU的效能成長空間已經很有限了。
至於向量處理器(Vector Processor),例如DSP與GPU,在執行可以高度平行化的特定運算任務時,有著非常高的效率,且歷經多年發展,現在這類處理器能執行的運算任務,也越來越多元。不過,因為DSP、GPU與CPU一樣,還是採用不具彈性的階層式記憶體架構,也就是大家常聽到的L1、L2甚至L3快取,因此在記憶體延遲、存取效能方面有許多瓶頸。
如FPGA這類可編程邏輯元件(PLD),則可按照使用者需求客製化特定的運算功能,擁有極低的延遲性能,特別適合強調即時性的運算任務,且其資料存取結構也跟傳統的處理器不同。但相對的,如果要修改演算法,在FPGA上往往得花好幾個小時,不像純軟體的CPU、GPU,只要花幾分鐘就能把程式重新編譯(Compile)完成。這也是為何FPGA會被視為領域專用處理器的原因--雖然FPGA一樣可以用來執行各種運算任務,但它的轉換過程遠比純軟體搭配通用處理器來得漫長。
不過,在強調運算能力跟效能/功耗比的今日,領域專用架構處理器還是有很大的發展潛力。賽靈思(Xilinx)技術長辦公室研究員Ralph Wittig認為,人工智慧(AI)等對運算效能需求極高的應用,還是需要使用領域專用架構硬體來運算,才能在運算效能、功耗跟整體成本之間取得最佳平衡。
根據賽靈思的觀點,基於FPGA的領域專用架構有三個元素,分別是適應性硬體、近記憶體運算與可支援多樣化資料傳輸模式的晶片內互連。以賽靈思的Versal適應性運算加速平台(ACAP)為例(圖2),該晶片架構內含多顆AI核心、用來直接存取外部記憶體的DMA,同時每個核心都帶有小容量的記憶體,以及扮演晶片內部互聯骨幹的Network on Chip(NOC)。
圖2 ACAP硬體架構
AI核心本身是軟體可編程的處理器,但藉由NOC,不同核心所配備記憶體是可以直接互聯的。這意味著如果使用者需要,可以把每個核心所帶有的記憶體互聯起來,視為一個容量超大的快取。不像現有CPU或GPU採用階層式的快取記憶體,當核心要存取記憶體內的資料時,視資料存放的位置,可能會遇到得等待數十到數百個循環週期(Cycle Time)才能得到資料的情況。除了存取效率外,傳統基於快取記憶體的架構,還會有不必要的資料複製、浪費記憶體容量的問題(圖3)。
圖3 傳統多核心架構的資料存取
也因為FPGA內部的互聯是非常彈性的,使用者可以依照自己的應用需求,實現各種不同的資料搬移模式,從業界最熟悉的管線式(Pipeline)結構,到一對一/一對多串流式(Stream),甚至廣播式(Broadcast)結構都能支援。這使得FPGA的使用者可以針對特定應用需求,使用效率最好的資料搬移模式來處理大量資料。
根據賽靈思的估計,這種架構讓Versal可以用存取L1快取的延遲,存取到10倍的記憶體容量。這不僅提升了運算效能,同時也降低晶片功耗。存取記憶體是非常耗電的,以典型的45奈米、0.9伏特製程來說,處理器要存取8kByte SRAM,就要消耗10pJ能量;但如果是要存取1MByte SRAM,就要消耗100pJ;但如果處理器核心要存取外部DRAM,就至少要消耗1.3~2.6nJ,能量消耗可達2,000倍。
Wittig總結說,如果設計人員非常在意處理器功耗跟運算效能,應該注意以下三個原則:首先,讓資料保持流動,只有在必要的時候才作暫存;其次,如果要做資料暫存,應該盡可能使用容量最小的記憶體;第三,盡可能把資料存放在晶片內的記憶體,不要放到外部DRAM上。
這也是一種思維的翻轉。在通用運算架構裡,是處理器下指令,把資料搬到核心來處理,但在領域專用架構裡,為了追求更好的運算效能跟降低功耗,是處理單元要盡量貼近資料。
ACAP架構因為具有「適應性硬體」、「近記憶體運算」與可支援「多樣化資料傳輸模式的晶片內互連」這三大特性,目前已經是一個相當理想的適應性資料流處理器。接下來,ACAP架構會朝強化平行運算的方向前進,利用ACAP架構的適應性互聯跟低延遲特性,讓眾多AI核心有更大的發揮空間。