天天看點

基于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,這個是最近我看到的一個很快的實作速度了。整個網絡采用了多精度實作,而且是軟硬體結合的方式。整個實作流程如圖所示。

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

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

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

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

圖2: 網絡的實作過程

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

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

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

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

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

圖4:BN層的量化過程

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

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

圖5:流水現實過程

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

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

繼續閱讀