RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

針對LSTM實(shí)現(xiàn)硬件加速的稀疏化案例分析

電子設(shè)計(jì) ? 來源:AI加速 ? 作者:AI加速 ? 2020-11-29 11:24 ? 次閱讀

本文介紹稀疏LSTM的硬件架構(gòu),一種是細(xì)粒度稀疏化,權(quán)重參數(shù)分布隨機(jī),另外一種是bank-balance稀疏化。

1. 文章結(jié)構(gòu)

Long-short term memory,簡稱LSTM,被廣泛的應(yīng)用于語音識別、機(jī)器翻譯、手寫識別等。LSTM涉及到大量的矩陣乘法和向量乘法運(yùn)算,會消耗大量的FPGA計(jì)算資源和帶寬。為了實(shí)現(xiàn)硬件加速,提出了稀疏LSTM。核心是通過剪枝算法去除影響較小的權(quán)重,不斷迭代訓(xùn)練以達(dá)到目標(biāo)函數(shù)收斂。參與實(shí)際運(yùn)算的權(quán)重?cái)?shù)量大大縮減,這可以有效降低FPGA計(jì)算資源和緩解帶寬以及存儲。本博文結(jié)構(gòu)如下:

1) Fine-grained稀疏壓縮的硬件架構(gòu)。權(quán)重稀疏化后,數(shù)據(jù)被大大壓縮,但是也增加了有效數(shù)據(jù)分布不規(guī)律性,這些增加了硬件實(shí)現(xiàn)復(fù)雜性。

2) Bank-balanced稀疏化方法以及硬件架構(gòu)。為了能夠提高權(quán)重?cái)?shù)據(jù)規(guī)律性,提出了bank-balanced稀疏化方式。

2. fine-grained稀疏化

首先要講的是細(xì)粒度壓縮架構(gòu)。當(dāng)對一個(gè)已經(jīng)訓(xùn)練好的網(wǎng)絡(luò)進(jìn)行剪枝后,你會發(fā)現(xiàn)權(quán)重分布會變得十分隨機(jī)。這不利于硬件加速的實(shí)現(xiàn),因?yàn)镕PGA更喜歡整齊劃一的結(jié)構(gòu),這樣便于并行化處理。比如對于下邊左圖,每一行有效權(quán)重?cái)?shù)據(jù)個(gè)數(shù)不同,而我們在硬件中按照行(這是最容易的并行化方式)并行運(yùn)算的時(shí)候,每一行計(jì)算的時(shí)間就不會相等,用時(shí)少的會等待用時(shí)長的,最終用時(shí)長的決定了計(jì)算的總時(shí)間。這樣就產(chǎn)生了計(jì)算間歇,降低了計(jì)算利用率。左圖的計(jì)算效率就只有60%((5+2+4+1)/20=60%)。、

為了提升計(jì)算效率,降低等待時(shí)間,最理想情況是每行的有效權(quán)重?cái)?shù)據(jù)相同,這樣就不需要進(jìn)行等待了。如右圖,僅僅每行計(jì)算都需要三個(gè)時(shí)鐘周期。計(jì)算效率100%。在進(jìn)行訓(xùn)練的時(shí)候,就需要添加約束條件使得每行具有相同的有效權(quán)重?cái)?shù)。從結(jié)果看出,這樣處理在能夠加速硬件的同時(shí),還可以保持不變的精度。

模型數(shù)據(jù)訓(xùn)練是基于浮點(diǎn)數(shù)的,浮點(diǎn)運(yùn)算非常消耗硬件資源,最好的辦法就是進(jìn)行量化,即將浮點(diǎn)轉(zhuǎn)化為定點(diǎn)。量化基本觀點(diǎn)就是將相互接近的數(shù)用一個(gè)數(shù)來表示,可以看做是一種聚類。假設(shè)參數(shù)集W,將其分成h類C。使用k-means聚類,就是最小化:

量化之后不僅減小了權(quán)重?cái)?shù)據(jù)量,這對FPGA上緩存需求以及帶寬都能有效緩解,而且還會降低浮點(diǎn)運(yùn)算帶來的巨大邏輯資源消耗。

LSTM中包含了矩陣乘向量,矩陣點(diǎn)乘等操作。進(jìn)行了剪枝和量化后的權(quán)重?cái)?shù)據(jù)大大減少,為了只傳遞有效權(quán)重,需要對權(quán)重?cái)?shù)據(jù)進(jìn)行稀疏編碼。論文中采用這樣的方式:一個(gè)有效數(shù)據(jù)外加兩個(gè)指數(shù),用于標(biāo)識數(shù)據(jù)所在矩陣中的位置。一個(gè)指數(shù)是相對行號,相對行號表示下一個(gè)數(shù)據(jù)相對于前一個(gè)數(shù)據(jù)的行號距離。另外一個(gè)是列號,表示數(shù)據(jù)所在列坐標(biāo)。這樣在FPGA中就可以根據(jù)這兩個(gè)指數(shù)回復(fù)權(quán)重的位置,并且取出向量中對應(yīng)的數(shù)據(jù)??梢栽诰仃囆械幕A(chǔ)上進(jìn)行并行化設(shè)計(jì),比如設(shè)計(jì)N個(gè)并行乘法陣列,每個(gè)陣列有3個(gè)乘法器,乘法器之間可以進(jìn)行累加。假設(shè)矩陣每行3個(gè)有效數(shù)據(jù),這樣每個(gè)陣列就可以進(jìn)行3次并行乘法運(yùn)算,并能前向累加。

再來看整體架構(gòu),F(xiàn)PGA進(jìn)行矩陣乘法,矩陣點(diǎn)乘,激活等加速操作,CPU進(jìn)行指令、權(quán)重、輸入數(shù)據(jù)調(diào)度。CPU通過PCIE和FPGA進(jìn)行通信,將權(quán)重、指令、輸入等數(shù)據(jù)發(fā)送到FPGA端,并且接收來自FPGA的處理結(jié)果。由于權(quán)重等數(shù)據(jù)很大,所以FPGA板卡上也配備了自己的DDR,用于存儲這些數(shù)據(jù)。并且在FPGA芯片中也需要一定緩存用于存儲權(quán)重?cái)?shù)據(jù)(這部分?jǐn)?shù)據(jù)很大,最好是片上可以放得下)、臨時(shí)數(shù)據(jù)、結(jié)果等。通常都是FPGA計(jì)算量很大,而FPGA和DDR的帶寬受到限制,所以一個(gè)有較大片上存儲資源的FPGA更有利于深度學(xué)習(xí)的加速。

FPGA上的結(jié)構(gòu)主要有:和CPU通信的PCIE控制,讀寫DDR的控制接口,輸入輸出緩存,加速計(jì)算單元,指令控制和調(diào)度。其中加速單元是核心模塊,其中包括了稀疏矩陣乘法,累加,激活函數(shù)等操作模塊。

稀疏矩陣乘法和點(diǎn)乘操作是最耗費(fèi)計(jì)算資源和數(shù)據(jù)資源的,為了提高計(jì)算效率。論文中根據(jù)數(shù)據(jù)之間依賴關(guān)系建立了整個(gè)控制流程。設(shè)計(jì)的目標(biāo)是盡量提高并行化,減少等待時(shí)間,使得計(jì)算和加載數(shù)據(jù)時(shí)間可以重疊。比如是相互獨(dú)立的,就可以同時(shí)計(jì)算。而有些雖然相互獨(dú)立,但是存儲相互沖突,就只能順序計(jì)算。比如

即使經(jīng)過了剪枝和量化,權(quán)重參數(shù)也很多,片上有限的資源遠(yuǎn)遠(yuǎn)承受不了,所以這些數(shù)據(jù)都存放在DDR中。在需要的時(shí)候加載到片上,如果能夠做好流水以及有較大帶寬,是能夠有較高計(jì)算效率的。

Activation vector queue:ActQueue包含很多FIFO,每個(gè)FIFO存儲了向量數(shù)據(jù),每個(gè)ActQueue被同一個(gè)通道的PE共享。每個(gè)FIFO對應(yīng)一個(gè)PE。ActQueue用于提供給各個(gè)PE用的數(shù)據(jù),這些數(shù)據(jù)在向量中并不是對齊的。如果某一行中有效權(quán)重?cái)?shù)據(jù)少,那么其就需要等待其他PE完成。

3. bank-balance架構(gòu)

提出bank-balanced結(jié)構(gòu)是為了解決fine-grained結(jié)構(gòu)中數(shù)據(jù)隨機(jī)不對齊的問題。將權(quán)重矩陣每行分割成bank單元,讓每個(gè)單元中的有效權(quán)重?cái)?shù)據(jù)數(shù)量相等。對比fine-grained和coarse-grained稀疏化,fine-grained可以將參數(shù)壓縮的很高,但是導(dǎo)致權(quán)重分布不均勻,而coarse-grained能夠獲得均勻的權(quán)重結(jié)構(gòu),但是精度下降很大。Bank-balanced結(jié)構(gòu)既有分布均勻的權(quán)重,同時(shí)又能夠保持精度。


BBS結(jié)構(gòu)有利于硬件加速,以為不僅僅可以增加行間并行度,還可以按照每行相同的bank數(shù)進(jìn)行bank并行計(jì)算。而且每個(gè)bank數(shù)據(jù)量相同,那么計(jì)算的時(shí)候可以同時(shí)進(jìn)行,沒有等待時(shí)間。比如我們有一個(gè)矩陣按行分為4個(gè)bank,那么對應(yīng)的向量也分成4個(gè)bank,bank間是并行計(jì)算的。Bank內(nèi)會依次次取出有效的權(quán)重和對應(yīng)的向量,進(jìn)行乘法之后再累加。這種方式可以避免無規(guī)則的計(jì)算以及訪問存儲。

稀疏化后的矩陣是需要經(jīng)過編碼的,這樣才能確定其在矩陣中位置。編碼方式比較流行的有CSR,COO以及CSC等。但是他們一般都是用兩個(gè)指數(shù)(比如行號和列號)來表示數(shù)據(jù)位置,這會額外增加數(shù)據(jù)負(fù)重。本論文中針對BBS結(jié)構(gòu)設(shè)計(jì)了一種靈活簡潔的編碼:CBS。其由兩行組成。第一行將數(shù)據(jù)重新排列,取出每個(gè)bank中第一個(gè)非零數(shù)據(jù)一次排列,然后再取出第二個(gè)bank中非零數(shù)據(jù)。第二行由數(shù)據(jù)所在的bank內(nèi)位置決定。這個(gè)位置指標(biāo)可以用于后邊取得向量數(shù)據(jù)的bram地址。


整個(gè)硬件架構(gòu)如下圖:主要包括PCIE控制,DDR控制接口,指令控制,PE陣列,矩陣存儲,向量存儲,之后的點(diǎn)乘和累加等。再介紹一下指令類型:

1) load/store: 這兩個(gè)指令用于從DDR中加載數(shù)據(jù)到片上或者從片上存儲數(shù)據(jù)到DDR中。

2) computational指令:根據(jù)LSTM的運(yùn)算模式分成了兩種,一個(gè)是spMx指令,用于計(jì)算矩陣乘法,另外一個(gè)是EWOP,這個(gè)用于點(diǎn)乘,累加,三種激活。

4. 總結(jié)

總結(jié)一下,這篇文章我們主要介紹了針對LSTM實(shí)現(xiàn)硬件加速的方式:稀疏化。稀疏化會大大降低權(quán)重參數(shù),降低計(jì)算量以及存儲空間。同時(shí)比較了兩種稀疏化方式(fine-grained和bank-balanced)的不同。介紹了LSTM硬件實(shí)現(xiàn)的基本架構(gòu)和指令集。

1. Cao, S., et al., Efficient and Effective Sparse LSTM on FPGA with Bank-Balanced Sparsity, in Proceedings of the 2019 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays - FPGA '19. 2019. p. 63-72.

2. Huizi Mao, S.H., Jeff Pool, Wenshuo Li, Xingyu Liu, Yu Wang, William J. Dally, Exploringthe Regularity of Sparse Structurein Convolutional Neural Networks. NIPS, 2017.

3. Song Han , J.K., Huizi Mao, Yiming Hu, Xin Li, Yubin Li, Dongliang Xie, Hong Luo, Song Yao, Yu Wang, Huazhong Yang and William J. Dally, ESE: Efficient Speech Recognition Engine with Sparse LSTM on FPGA, in Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays - FPGA. 2017. p. 75-84.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21729

    瀏覽量

    602977
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    387

    瀏覽量

    43647
  • 硬件加速
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    11126
  • LSTM
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    3748
收藏 人收藏

    評論

    相關(guān)推薦

    PSoC 6 MCUBoot和mbedTLS是否支持加密硬件加速?

    。 使用 MCUBoot 驗(yàn)證兩個(gè)應(yīng)用程序時(shí),運(yùn)行時(shí)間大約需要五秒鐘。 在 README.md 的 \"安全 \"一欄中寫道 與軟件實(shí)現(xiàn)相比,硬件加速加密技術(shù)將啟動(dòng)時(shí)間縮短了四倍多
    發(fā)表于 05-29 08:17

    MCU廠推多樣解決方案 DSP/FPU硬件加速芯片整合

    需求,或是對應(yīng)無線電通 訊需求整合的數(shù)據(jù)分析演算支援,與現(xiàn)有FPU浮點(diǎn)運(yùn)算硬件加速功能區(qū)隔,采取協(xié)同分工的方式加速整體微控制器的應(yīng)用效能?! ∮腥さ氖?,針對 不同的市場與運(yùn)算需求定位,
    發(fā)表于 10-14 17:17

    為什么要進(jìn)入最佳硬件加速板?

    我想進(jìn)入硬件加速。什么板對此有好處,為什么?
    發(fā)表于 10-10 07:00

    H.264解碼器中CABAC硬件加速器怎么實(shí)現(xiàn)?

    H.264解碼器中CABAC硬件加速器怎么實(shí)現(xiàn)
    發(fā)表于 06-07 06:48

    如何讓opencv使用官方的GStreamer-rockchip實(shí)現(xiàn)硬件加速

    opencv編譯和運(yùn)行時(shí),使用的是安裝的GStreamer視頻IO,那么如何讓opencv使用官方的GStreamer-rockchip實(shí)現(xiàn)硬件加速呢?
    發(fā)表于 04-08 15:25

    基于FPGA Nios-Ⅱ的矩陣運(yùn)算硬件加速器設(shè)計(jì)

    針對復(fù)雜算法中矩陣運(yùn)算量大, 計(jì)算復(fù)雜, 耗時(shí)多, 制約算法在線計(jì)算性能的問題, 從硬件實(shí)現(xiàn)角度, 研究基于FPGA/Nios-Ⅱ的矩陣運(yùn)算硬件加速器設(shè)計(jì),
    發(fā)表于 12-06 17:30 ?89次下載
    基于FPGA Nios-Ⅱ的矩陣運(yùn)算<b class='flag-5'>硬件加速</b>器設(shè)計(jì)

    Mentor Graphics硬件加速仿真服務(wù)使用Veloce 硬件加速仿真平臺加速驗(yàn)證

      俄勒岡州威爾遜維爾,2016 年 4 月 20 日 — Mentor Graphics公司(納斯達(dá)克代碼:MENT)今日宣布,Mentor? 硬件加速仿真服務(wù)采用具有專業(yè)服務(wù)和 IP 的 Veloce? 硬件加速仿真平臺 ,借此加速
    發(fā)表于 04-20 11:22 ?2472次閱讀

    實(shí)現(xiàn)重要分析硬件加速的可編程Xilinx zynq-7000平臺推薦

    Xilinx Zynq-7000 全可編程 SoC (AP SoC) 系列集成 ARM處理器的軟件可編程性與 FPGA 的硬件可編程性,不僅可實(shí)現(xiàn)重要分析硬件加速,同時(shí)還在單個(gè)器件上
    的頭像 發(fā)表于 11-07 14:37 ?7633次閱讀
    <b class='flag-5'>實(shí)現(xiàn)</b>重要<b class='flag-5'>分析</b>與<b class='flag-5'>硬件加速</b>的可編程Xilinx zynq-7000平臺推薦

    硬件加速邊緣檢測優(yōu)化處理方案

    針對計(jì)算機(jī)處理高清圖像或視頻的邊緣檢測時(shí)存在延時(shí)長和數(shù)據(jù)存儲帶寬受限的缺點(diǎn),提出了用Vivado HLS將邊緣檢測軟件代碼轉(zhuǎn)換成RTL級硬件電路的硬件加速方法。硬件加速是將運(yùn)算量大的功
    發(fā)表于 11-15 18:02 ?2154次閱讀
    <b class='flag-5'>硬件加速</b>邊緣檢測優(yōu)化處理方案

    MD5算法硬件加速模型

    針對MD5軟件實(shí)現(xiàn)方法存在占用資源大、安全性差等缺點(diǎn),提出了基于NetMagic平臺的MD5硬件加速模型設(shè)計(jì)方案,并基于ModelSim和NetMagic平臺對提出的非流水線與流水線硬件加速
    發(fā)表于 01-12 16:45 ?0次下載
    MD5算法<b class='flag-5'>硬件加速</b>模型

    使用硬件加速仿真的功耗分析

    使用完全脫節(jié)。本白皮書將解釋說明,使用真實(shí)的有效載荷為何對于準(zhǔn)確估算功耗和執(zhí)行優(yōu)化任務(wù)而言至關(guān)重要。之后,我們將會展示Veloce~客戶如何使用硬件加速仿真來實(shí)現(xiàn)可靠性高得多的使用模型,并且利用這一模型,可以更可靠地
    發(fā)表于 03-01 11:42 ?0次下載

    分享硬件加速仿真的 11 個(gè)謬論介紹和說明

    硬件加速仿真可以實(shí)現(xiàn)寄存器傳輸級(RTL)和現(xiàn)代SoC設(shè)計(jì)門級的最佳功耗分析。只有硬件加速仿真才有處理大量邏輯以及產(chǎn)生針對所有元素的切換活動(dòng)
    的頭像 發(fā)表于 10-11 17:54 ?4919次閱讀
    分享<b class='flag-5'>硬件加速</b>仿真的 11 個(gè)謬論介紹和說明

    LSTM硬件加速方式

    Long-short term memory,簡稱LSTM,被廣泛的應(yīng)用于語音識別、機(jī)器翻譯、手寫識別等。LSTM涉及到大量的矩陣乘法和向量乘法運(yùn)算,會消耗大量的FPGA計(jì)算資源和帶寬。為了實(shí)現(xiàn)
    發(fā)表于 08-24 10:32 ?3018次閱讀
    <b class='flag-5'>LSTM</b>的<b class='flag-5'>硬件加速</b>方式

    openEuler Summit 2021-云/虛擬化分論壇:虛擬硬件加速以及vDPA框架案例分析

    openEuler Summit 2021-云/虛擬化分論壇:虛擬硬件加速以及vDPA框架案例分析
    的頭像 發(fā)表于 11-10 16:59 ?2057次閱讀
    openEuler Summit 2021-云/虛擬化分論壇:虛擬<b class='flag-5'>化</b><b class='flag-5'>硬件加速</b>以及vDPA框架案例<b class='flag-5'>分析</b>

    音視頻解碼器硬件加速實(shí)現(xiàn)更流暢的播放效果

    思想是利用專門的硬件資源,如GPU或?qū)S玫慕獯a芯片,來分擔(dān)原本由CPU承擔(dān)的解碼任務(wù)。這種方式不僅可以大幅提高解碼速度,還能降低CPU的負(fù)載,從而實(shí)現(xiàn)更流暢的播放效果。 硬件加速的優(yōu)勢 高效性能 :
    的頭像 發(fā)表于 02-21 14:40 ?953次閱讀
    音視頻解碼器<b class='flag-5'>硬件加速</b>:<b class='flag-5'>實(shí)現(xiàn)</b>更流暢的播放效果
    RM新时代网站-首页