丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開(kāi)發(fā)者 正文
發(fā)私信給汪思穎
發(fā)送

1

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

本文作者: 汪思穎 2017-09-08 15:40
導(dǎo)語(yǔ):怎么做,看過(guò)來(lái)。

雷鋒網(wǎng) AI科技評(píng)論按,本文來(lái)源于王天祺在知乎問(wèn)題【如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?】下的回答,雷鋒網(wǎng) AI科技評(píng)論獲其授權(quán)轉(zhuǎn)發(fā)。

以下主要引用自西安郵電大學(xué)李濤老師關(guān)于連接智能和符號(hào)智能的報(bào)告,以及fpl2016上ASU的 Yufei Ma的文章和slide,推薦大家去讀下原文。

Scalable and Modularized RTL Compilation of Convolutional Neural Network onto FPGA

地址:http://fpl2016.org/slides/S5b_1.pdf

我做過(guò)一些計(jì)算加速的工作,個(gè)人感覺(jué)要入手先要想好幾個(gè)問(wèn)題: 要加速的是什么應(yīng)用,應(yīng)用的瓶頸是什么,再針對(duì)這個(gè)瓶頸,參考前人工作選擇合適的方案。

過(guò)早地執(zhí)著于fpga的技術(shù)細(xì)節(jié)(用hdl還是hls,用啥芯片,用啥接口)容易只見(jiàn)樹(shù)木不見(jiàn)森林?,F(xiàn)在software define network/flash/xxx,已然大勢(shì)所趨。之前開(kāi)組會(huì)時(shí)跟同志們聊過(guò),算法是綱,綱舉目張;軟件是媽?zhuān)浖堑浖然鹞加H。所以推薦先把cnn的算法看一下,拿一些開(kāi)源代碼跑一下經(jīng)典的例子(lenet, alexnet, etc)看好輸入輸出,摸清算法。

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

比如以下是一個(gè)lenet的cpp和opencl的實(shí)現(xiàn):

nachiket/papaa-opencl

地址:https://github.com/nachiket/papaa-opencl

以下圖片源自Yufei Ma的Slide。

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

可以看到cnn算法主要由conv ,pooling,norm等幾個(gè)部分組成。工作時(shí)將image跟weight灌進(jìn)去,最終得到預(yù)測(cè)結(jié)果。

接下來(lái)拿profiler(比如perf)去分析下軟件算法,找找熱點(diǎn)和性能瓶頸。在cnn里面主要耗時(shí)的就是conv二維卷積了。性能瓶頸也主要在于卷積時(shí)需要大量乘加運(yùn)算,參與計(jì)算的大量weight參數(shù)會(huì)帶來(lái)的很多訪(fǎng)存請(qǐng)求。

接下來(lái)考察下前人的工作和當(dāng)前的灌水熱點(diǎn)。按理說(shuō)這種大量的乘加運(yùn)算用dsp應(yīng)該不錯(cuò),但是在cnn中大家并不需要這么大的位寬,有時(shí)候8位就夠了。dsp動(dòng)輒32/64位的乘加器實(shí)在是浪費(fèi)。于是乎大家就開(kāi)始減位寬,多堆幾個(gè)運(yùn)算單元。面對(duì)大量的訪(fǎng)存請(qǐng)求,大家就開(kāi)始設(shè)計(jì)各種tricky的緩存了。

以下是大家的一些灌水方向:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

于是就有了以下各路硬件設(shè)計(jì):

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

有人照著dsp風(fēng)格去設(shè)計(jì)加速器:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

ceva也出了一系列面向CNN的IP:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

有人用了脈動(dòng)陣列或者Dataflow的風(fēng)格:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

有人設(shè)計(jì)了專(zhuān)用的芯片比如計(jì)算所的Cambricon:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

還有的就是你提到的fpga。

所有的事情到了硬件層面實(shí)際上能用的手段也就有限了。不外乎堆資源和切流水兩招。再不然就是做一些bit level的小技巧,比如乘法器變查表之類(lèi)的,這些技巧在很多二十年前的dsp教材里面都描述得很細(xì)致了,拿來(lái)用就好。比如這本書(shū)親測(cè)有效。

VLSI Digital Signal Processing System--Design and Implementation by Keshab

典型的fpga實(shí)現(xiàn)可以參考Yufei Ma的文章,不論是conv,還是pooling,依葫蘆畫(huà)瓢設(shè)計(jì)data path,切好流水,再想好狀態(tài)機(jī)加上控制信號(hào)。這些就看大家擼rtl的基本功了。

比如Conv模塊如下圖,主要拿一堆乘法器以及加法器樹(shù)搭好data path,切好流水,接著加上控制信號(hào)。

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

Pooling也是大同小異:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

還有Norm:

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

最后把這些模塊通過(guò)router連接,外面再套一層控制模塊,封成ip就好了。

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

剩下的就是集成進(jìn)你的系統(tǒng)(microblaze, nios還是arm,配好dma,寫(xiě)好灌數(shù)據(jù)的驅(qū)動(dòng),這些就是各有各的道兒了)。推薦動(dòng)手碼rtl前先寫(xiě)好文檔,約定好端口,寄存器和軟件api,否則邊寫(xiě)邊改容易亂。

整體來(lái)說(shuō),cnn這種應(yīng)用流水線(xiàn)控制相對(duì)cpu簡(jiǎn)單,沒(méi)有寫(xiě)cpu的那一堆hazard讓人煩心,也不用寫(xiě)匯編器啥的。太大的cnn放在fpga里挺費(fèi)勁,做出創(chuàng)新很難,但是fpga上寫(xiě)個(gè)能用的lenet這種級(jí)別的cnn還是挺容易的。最后還可以依照慣例跟cpu比性能,跟gpu比功耗。

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。

如何用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)(CNN)?

分享:
相關(guān)文章

編輯

關(guān)注AI學(xué)術(shù),例如論文
當(dāng)月熱門(mén)文章
最新文章
請(qǐng)?zhí)顚?xiě)申請(qǐng)人資料
姓名
電話(huà)
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶(hù)安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)