基於FPGA的CNN算法移植(一)概述


        做了半年的CNN算法移植,有時候需要回避一些東西,所以寫的東西不能太多。簡單提一下自己的總結,既是筆記,又是與網友們交流討論。

        CNN興起,深圳這個躁動的城市很多人就想趁着這個機會撈一筆風投。於是各種基於CNN的在GPU上的demo出現后立馬就成立公司,招FPGA工程師或者ARM 等嵌入式工程師,希望通過他們進行產品落地。畢竟GPU功耗高,散熱不好,價格不便宜。於是有些公司招聘FPGA工程師,就問:你會做算法優化嗎?

         基於FPGA的CNN算法移植誤區一:FPGA工程師做算法優化。

        嗯,已經很不錯了,知道將CNN移植到嵌入式平台需要做優化。可是百度一下CNN優化策略,那些基於tensorflow,caffe的東西是FPGA干的活兒嗎(為啥不是算法工程師要懂FPGA呢,為難一下算法工程師)?  當然有人說作為FPGA工程師對算法一無所知沒有核心競爭力,我想說CNN的算法壓縮是在它原有的開發平台上進行的,不是在FPGA上進行的,願意學CNN的算法開發平台的同學當然好,只是難度很大。還有一點,作為FPGA工程師目前形勢很嚴峻,我們自身有太多東西要學,因為現在FPGA都往SOC發展了,xilinx推出的一大堆工具等待着我們去熟悉。還有一種思維那就是覺得xilinx很可能也走不遠,所以趁早轉行了的。

        基於FPGA的CNN算法移植誤區二:FPGA工程師先做demo再慢慢優化。

        有些公司稍微好點,最后明白了算法優化是算法工程師干的事情。后面要求FPGA工程師按照目前這個樣子做一款Demo出來,性能不好沒關系,后面再慢慢優化。姑且不論HLS ,SDsoc的實現方法對於不同的算法差異有多大,因為這兩個工具我才剛玩,可是基於HDL設計的硬件架構,算法改動一點點可能導致整個FPGA項目推倒重來。所以對於FPGA的工程,要不就是目前這個樣子出結果。要不就是推倒重來。—— 或許HLS,SDsoc不是,你可以不斷的選擇優化策略。

         基於FPGA的CNN算法移植誤區三:性能不好怪FPGA工程師硬件架構不好?

        這個我只能說或許,可是一般的FPGA工程師能去定制架構水平也不會太差,不至於胡拼亂湊一個工程出來,特別對於龐大的CNN想胡拼亂湊都難。你必須思路清晰,結構清晰。還有一個主要的,對於CNN算法移植FPGA硬件上真的開不出花兒,這個觀點知乎上也有大牛提到了。所以深鑒公開DPU 架構,google公開TPU 架構,為何?因為硬件就是這么玩的,沒啥新意。

         

         這個是深鑒科技的 笛卡爾架構。對於FPGA工程師是不是很熟悉,就是典型的zynq架構,誰都會這么去設計。深鑒還有一款 亞里士多德 架構,把AXI4換成更高速的,外面再加一個處理器,和英偉達的GPU 架構類似。總結起來就是input buffer,處理,outputbuffer。只是inputbuffer和outputbuffer的數據怎么來怎么去,處理的時候有多少資源可以充分利用。例如google推出TPU的“脈動”結構,FPGA工程師一板子甩他臉上:你脈動個XX,不就是我們經常掛嘴邊的流水線處理嘛。

        基於FPGA的CNN算法移植誤區四:算法實現了,剩下FPGA去實現就行

        唉,真的好傷心,為啥這個鍋要FPGA工程師背。前面說了,做算法移植是要優化后才能移植,不能直接移植,除非很小的算法(CNN 有小的嗎?)可是算法工程師不懂硬件啊(是啊,為何要求我們硬件工程師懂算法呢),他優化的方法不一定正確,還有就是這里優化了,那里問題又出來了。所以算法demo出來后要不斷的溝通如何去優化,FPGA工程師不斷的去評估性能得出移植瓶頸反饋給算法工程師。如此反反復復。        

 

        誤會解除了,與算法工程師溝通好了那么就要做FPGA架構了(我這個是純HDL的方式)。查主芯片有多少資源可以用,可以並行加速多少路,如何實現數據交互。這些定制下來了你就可以列一個表格,去算你的項目latency了,這就是你的性能。性能達不到就去看看DSP 是不是充分利用了,盡量不要閑置。性能還達不到,就要反饋給算法算法移植瓶頸了,對於CNN通常是中間結果太大,就是緩存太大。FPGA工程師可以並行N路進行加速,可是DDR送數速率只夠N/3路並行計算 —— 對,這就是典型的CNN算法移植瓶頸。

        補充一點:做FPGA架構當然要去看軟件的架構了。很多純算法工程師不懂硬件,看下表。他們由下表就認為選擇SqueezeNet網絡作為項目算法網絡結構,因為運算量MACC最小,參數也小,精度過的去。可是這個SqueezeNet目前沒有找到一個效果不錯的項目。這個表格是一個碩士他在做分類網絡的時候給出的,他不懂FPGA,最后他選擇了SqueezeNet,並且把MACC從8.6億次優化到了5.3億次。可是最終他的項目性能是 0.51幀(best)的速度

       

         這里給大家看兩個案例,看MACC ,案例2的MACC巨大,可是在7045上卻可以實現17.53幀。因為SqueezeNet和YOLO網絡的相差太大了,稱之為  架構的魅力 (記住我說的是軟件)

        圖1 是YOLO的軟件算法架構,很簡潔。HLS 也喜歡

       圖 2 是SqueezeNet 結構

                   

          

                                       圖 1   

 

 

   

 

                                          圖 2 

 

 

         個人水平有限,以上言論拋磚引玉,有什么總結不當的地方歡迎及時指出來一起討論。

 

 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 作者:清霜一夢

歡迎加入: FPGA廣東交流群:162664354

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM