基於FPGA實現的MobileNet V1,FPGA深度學習加速器設計 CNN Accelerators based on FPGAs

Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs

最近arXiv上掛出來一篇文章,採用FPGA實現MobileNet V1,並且完全是不借助片外資源,用的是on-chip memory,沒有利用off-chip RAM。整個模型在FPGA的內部有限資源上實現的。能夠使得幀率在3000 FPS,這個是最近我看到的一個很快的實現速度了。整個網絡採用了多精度實現,而且是軟硬件結合的方式。整個實現流程如圖所示。

圖1: 基於FPGA實現的MobileNet V1加速器設計流程

 

文中也提到了常規算法,在FPGA上實現所採用的方式,即將計算展開,叫做roll-unroll, flatten。本文采用的flattened streaming cores來進行計算。整個卷積的計算採用的寄存器實現,能夠高效的進行操作。這個工程量還是非常大的。下圖展示了常規卷積的實現過程,一個週期cycle計算每一層output的c'個通道上的每一個點的值。採用移位或者乘法器的方式實現。第二個分圖展示的是depthwise convolution的計算過程,對每一層單獨使用一層filter。這個表示也是standard convolution和depthwise convolution的原理解釋。

圖2: 網絡的實現過程

 

對於多精度,多bit數的執行,將activation的值,設置爲8 bit 定點數,只是說定點量化的整數和小數,是可以varying from convolution layer。每一層各有不同,是 一個貪心搜索算法來搜索得到的。 

圖3:N-bit定點數的表示,p代表小數的位數

同時,作者也單獨把BN層來進行量化,這裏是16位 定點數。

圖4:BN層的量化過程

整體實現難度很大,需要仔細的去看實現細節。在真實實現過程中,問題還是很多。各種配置文件。c++寫一些比較上層難以優化和實現的算法和代碼。下端verilog寫卷積的模板文件,以及可分離卷積,這些規則極強,大量for循環計算的模塊,Verilog效率高。混合精度的實現,需要利用寄存器來發揮優勢,而浮點數據的操作,就要消耗更多資源,這時候需要用上層一點的類似於HLS來實現。整個流水的設計,需要緊密的在每一層上做好時鐘計算和設計,上一層的網絡輸出結果,以如何的方式,直接接入下一層的計算。整個流水排開之後,才能達到所敘述的3000fps。單獨處理一張圖片,應該是不能達到的。

圖5:流水現實過程

 具體實現過程還有很多細節,作者的最優權重搜索算法,如何對應不同的input size,模型大小,做擴展,而且是可配置的,這些在FPGA實現上,算是一個優點。因爲其他的FPGA實現的方法,都是寫完一個,就定死,不方便在重新改寫模型的大小,因爲裏面涉及時序,涉及流水的對齊。這個軟件定義模型,然後在硬件綜合生成電路,再轉換爲bit流的方式,可以加快各種模型原型實現的速度。總體不錯。如果想更仔細的看裏面的各種細節,查看原文吧。

 

論文鏈接:Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs https://arxiv.org/pdf/1910.10075v1.pdf 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章