想起寫這篇矽說的起源是一個(gè)月前的AI界大新聞——知名AI硬件公司深鑒被FPGA巨頭Xilinx收購,,傳說中的交易金額在n億美金不等,,大家紛紛感概創(chuàng)始人的財(cái)富自由與高尚情懷(給清華大學(xué)捐了500萬,,簡直是國內(nèi)由學(xué)、研至產(chǎn)再回饋學(xué)的典范),,一時(shí)佳話,。與此同時(shí),各種危言聳聽也開始流傳,,如AI領(lǐng)域的垂直整合大幕即將開啟,,泡沫破滅已經(jīng)不遠(yuǎn)矣的恐懼也落在雨后春筍般崛起的AI硬件公司中。
我并不想去評(píng)斷那個(gè)商業(yè)行為背后的動(dòng)機(jī),,只是想以此為契機(jī)從技術(shù)的角度,,略略討論下這次收購背后的關(guān)鍵因素——FPGA和ASIC的在AI計(jì)算中銜接關(guān)系。因?yàn)椴⒉皇菍<?,所以如有錯(cuò)誤理解請指出,。
從FPGA到ASIC,異曲同工還是南轅北轍,?
在國產(chǎn)AI硬件三強(qiáng)“寒地深”中,,deephi最強(qiáng)的當(dāng)屬其面向AI的專用design kit —— DNNDK以及其FPGA的實(shí)現(xiàn),其中涵蓋了其大殺四方的必殺技——稀疏化網(wǎng)絡(luò),。做AI硬件的如果沒有看過剪枝(prunning)就可以放棄科研了。
與此同時(shí),,deephi也有其ASIC產(chǎn)品線——聽濤系列SoC,。
我們假設(shè)聽濤的亞里士多德結(jié)構(gòu)傳承自深鑒在Zynq 7020上的Aristotle架構(gòu)(Aristotle是亞里士多德的英文),即下圖: (注:這里是姑妄言之隨便臆測,,這個(gè)假設(shè)很有可能是不對(duì)的)
那么,,問題來了 AI硬件的架構(gòu)最優(yōu)解是否從FPGA 到 ASIC是一以貫之呢?
這個(gè)問題還需要回到FPGA和ASIC的設(shè)計(jì)的價(jià)值觀,。隨著FPGA芯片的發(fā)展不斷深化,,在一個(gè)FPGA fabric中,,核心基礎(chǔ)模塊早已不僅僅是查找表(Look Up Table, LUT)。在以算力為主要矛盾的FPGA設(shè)計(jì)中,,(典型例子是神經(jīng)網(wǎng)絡(luò)),,F(xiàn)PGA中的DSP和BRAM IP的高效率決定了該設(shè)計(jì)的最終性能。
讓我們來看看目前應(yīng)用廣泛的Xilinx 7系列的dsp48 macro IP,,其基本架構(gòu)如下圖,,基本可以理解為一個(gè)可配置乘加模塊,值得注意的是其輸入位寬,,25位和18位,,輸出位寬可以達(dá)到48位。
這時(shí)候,,尷尬的故事發(fā)生了,,DNN,特別是端測DNN的大部分應(yīng)用僅僅需要8位精度,,如果用牛逼的dsp48就是大炮打蚊子,,如果用LUT綜邏輯時(shí)序又無法滿足。這個(gè)時(shí)候,,Xilinx官宣了一份白皮書WP487,,給出了一種在NN場景下一個(gè)dsp48怎樣實(shí)現(xiàn)并行實(shí)現(xiàn)兩個(gè)8-bit精度的方法。簡而言之就是把兩個(gè)8-比特?cái)?shù)拼成一個(gè)27位的數(shù),,當(dāng)中隔了10位然后和第三個(gè)數(shù)相乘,,乘法的結(jié)果的MSB和 LSB分別是兩個(gè)乘法的結(jié)果??傊?,尷尬癌還是有那么點(diǎn)的。
在這個(gè)場景下,,每次MAC需要3個(gè)周期才能完成,,復(fù)雜的流水線實(shí)現(xiàn)會(huì)給帶來很多debug的空間。然而在ASIC實(shí)現(xiàn)中,,8-bit MAC僅僅需要一個(gè)周期,,跑到500MHz是分分鐘的事情。由此,,如果照搬FGPA的RTL到ASIC,,那將帶來許多平白無故的性能損失。該問題可能在時(shí)下越來越流行的低精度神經(jīng)網(wǎng)絡(luò)中越來越顯著,,比如在ISSCC 2018中韓國KAIST提出的新形復(fù)用MAC,,在乘加內(nèi)部做了新邏輯,完全超出了FPGA的mapping范圍,,但是其在功耗性能上的優(yōu)勢顯著,。
同樣的問題還發(fā)生在片上RAM的使用,。筆者認(rèn)為,CNN專用處理器和經(jīng)典SIMD計(jì)算/矩陣乘加速器 最大的差別,,就是在于利用CNN的數(shù)據(jù)復(fù)用實(shí)現(xiàn)多樣化的data flow上,。而實(shí)現(xiàn)各種data flow的切實(shí)需求就在于有一個(gè)不大不小的scratchpad用于實(shí)現(xiàn)存儲(chǔ)partial sum。目前主流的設(shè)計(jì),,每個(gè)MAC對(duì)應(yīng)scratchpad大小在0.5kb-2kb左右,。而FPGA片上macro IP(RAMB18E1)提供的BRAM/FIFO 的單位尺寸為18kb,顯著地大于scratchpad的需求,。于是這個(gè)scratchpad在FPGA上的實(shí)現(xiàn)又陷于兩難,,直接綜合將消耗大量的LUT中DFF的資源,如果用片上macro,,又有一定程度的浪費(fèi),,并且擠壓了用于存儲(chǔ)feature/weight的空間。由于這個(gè)scratchpad大小的尷尬處境,,很多FPGA的DNN實(shí)現(xiàn)專注在矩陣乘法(Matrix product)的實(shí)現(xiàn)上,,而放棄了在CNN/DNN中復(fù)雜data flow的支持。同樣地,,這個(gè)問題在以RAM compiler為基礎(chǔ)的ASIC實(shí)現(xiàn)上毫無問題,,畢竟ASIC設(shè)計(jì)中可以自由配置scratchpad的大小。
綜上所述,,F(xiàn)PGA和 ASIC在面向AI的專用設(shè)計(jì)中,,雖然表面都是寫RTL,但是在具體架構(gòu)和思想上已經(jīng)有了較大的差異,。FPGA設(shè)計(jì)的最優(yōu)解是最大化底層marco IP的拼積木設(shè)計(jì),,而ASIC卻完全沒有這樣的限制,以放飛自我的方式尋找可能,。由此,,照搬FPGA而來的ASIC很有可能在某種程度上受這些限制的影響,也無法達(dá)到存在的ASIC最優(yōu)解,。這或許也是為什么深鑒在FPGA原型開發(fā)完成之后,,還付出了大量努力才能完成真正ASIC設(shè)計(jì)的原因。
FPGA原型驗(yàn)證:食之無味,,棄之可惜,?
傳統(tǒng)意義上,F(xiàn)PGA出現(xiàn)的一個(gè)重要因素是為了給ASIC做原型驗(yàn)證(Prototyping)的,。不可否認(rèn),原型驗(yàn)證仍然是FPGA的一個(gè)重大市場,。
在AI應(yīng)用中,,除了對(duì)RTL code的功能驗(yàn)證和高速仿真外,,F(xiàn)PGA Prototyping對(duì)于產(chǎn)品的更重要優(yōu)勢在于,更早地讓嵌入式軟件設(shè)計(jì)(Embedded Software Development)進(jìn)入整體設(shè)計(jì)流程,。軟件領(lǐng)域的bug和靈活度的數(shù)量級(jí)往往都遠(yuǎn)高于硬件,,如果等ASIC流片完了再對(duì)軟件和系統(tǒng)接口著手,那也是白白浪費(fèi)時(shí)間,。原型驗(yàn)證的一大優(yōu)勢就是盡早地從系統(tǒng)和集成的角度,,以硬件原型著手進(jìn)行軟件與嵌入式的開發(fā)。而于此同時(shí)后端以及流片的ASIC研發(fā)時(shí)間可以同步進(jìn)行,。
但和RTL simulation相比,,Prototype的debug性差也是路人皆知的。常見的FPGA Prototype的debug方法是人為的在RTL中設(shè)置觀測點(diǎn)(probe),,調(diào)用片上BRAM存儲(chǔ),,然后用類似JTAG的串口方式讀取存儲(chǔ)信號(hào),再現(xiàn)波形,。顯然地,,這種觀測方法方法是在和有實(shí)際功用的RTL競爭片上BRAM資源,特別是在存儲(chǔ)深度大,,位寬寬的情況下,。更嚴(yán)重的問題是如果發(fā)生了新一輪規(guī)模性的修改probe,而導(dǎo)致的重新綜合與實(shí)現(xiàn)可能會(huì)耗去大量時(shí)間,,可能還不如simulation的效率高,。目前主流的FPGA的debug方案基本都是如上思路,如下圖中的ChipScope+ILA模式,。
不僅如此,,F(xiàn)PGA prototyping在復(fù)雜時(shí)鐘設(shè)計(jì)中的表現(xiàn)也令人堪憂。對(duì)于FPGA的初學(xué)者,,門控時(shí)鐘(clock gating,,CG)幾乎是完全不推薦的。而作為最主流的ASIC降功耗手段,,CG幾乎存在AI芯片的每一角落,,特別是在具有稀疏性的網(wǎng)絡(luò)中,門控時(shí)鐘是最簡單易行的降低功耗的做法,。FPGA對(duì)這一特點(diǎn)的弱支持將導(dǎo)致原型驗(yàn)證可能存在不完整性問題,。除此之外,多時(shí)鐘域的問題在FPGA的原型驗(yàn)證也是一個(gè)問題,,由于FPGA片上的PLL資源受限,,在原型設(shè)計(jì)中也將收到諸多限制。
上述種種原因的情況下,F(xiàn)PGA作為AI芯片的原型驗(yàn)證重要平臺(tái),,雖然仍是不少產(chǎn)品的重要選項(xiàng),,但是目前的受到的挑戰(zhàn)令他越來越后繼乏力。
Hardware Emulator,,領(lǐng)域?qū)S玫腇PGA
隨著集成電路EDA工具的發(fā)展,,一個(gè)兼具良好debug性能,又可接近原型功能提供軟件開發(fā)的便利的新型SoC系統(tǒng)開發(fā)工具正在崛起——hardware emulator(硬件模擬器),??梢哉f它兼具了simulation和prototype的優(yōu)點(diǎn),又在很大程度上彌補(bǔ)了缺點(diǎn),。目前主流的EDA工具開發(fā)商均提供emulator平臺(tái),,并且期望在不遠(yuǎn)的將來,實(shí)現(xiàn)以emulator為中心的SoC開發(fā)流程,。Synopsys 家的Zebu,,Cadence家的Palladium和Mentor家的Veloce。其中Zebu就是以Xilinx的高端FPGA為基本元件搭建的,。
從技術(shù)角度上,,F(xiàn)PGA emulation 和 prototype的差別在于——emulator的RTL mapping是將原本的RTL分解映射(partition)到多塊FPGA上,每塊FPGA本身還集成了用于debug的觀測硬件部分的代碼,。在Partition同時(shí),,設(shè)計(jì)EDA軟件還關(guān)注模塊間的通信行為,通過FPGA集成的高速傳輸(high speed link)和路由(router)特性完成實(shí)現(xiàn)SoC partition,,避免了在單一FPGA中硬件資源受限制的問題,。
下圖從性能的角度比較了以FPGA為核心的原型驗(yàn)證平臺(tái)與模擬器平臺(tái)的上的區(qū)別??梢园l(fā)現(xiàn),,emulator雖然在速度上并不具有優(yōu)勢,但是,,其在內(nèi)部數(shù)據(jù)的可觀測性,,以及由此帶來的debug的可實(shí)現(xiàn)性能,均具有明顯的優(yōu)勢,??梢哉f,基于FPGA的模擬器正在并非對(duì)AISC 設(shè)計(jì)原代碼的直接映射,,反之是在源代碼基礎(chǔ)上通過Partition, Interconnection,,Probe-serialization等一系列RTL的再生成后,產(chǎn)生的新RTL的映射,。拿時(shí)髦的話來講,,emulator是領(lǐng)域?qū)S玫腇PGA Prototyping。
當(dāng)然,F(xiàn)PGA emulator有一個(gè)明顯的劣勢,,那就是貴,!對(duì)于剛過門檻的AI 硬件startup們,購買一臺(tái)emulator是真的在流血,。但即使如此,隨著AI ASIC對(duì)于系統(tǒng)和應(yīng)用的要求越來越高,,未來基于FPGA的Emulator取代基于FPGA的Prototyping是否將成為一種潮流,?讓我們拭目以待。
FPGA AI:是否需要走ASIC的老路,?
如前所述,,F(xiàn)PGA設(shè)計(jì)很難直接照搬到ASIC。事實(shí)上,,F(xiàn)PGA上的AI應(yīng)用是否真的要走傳統(tǒng)ASIC的老路,,即“發(fā)現(xiàn)需求——定義產(chǎn)品規(guī)格——上量大規(guī)模出貨——以年為時(shí)間單位更新?lián)Q代”?我們認(rèn)為,,F(xiàn)PGA的可重配置特點(diǎn)讓它完全沒有必要走這條路,,而是可以走更接近于軟件開發(fā)模式的道路。一個(gè)例子就是最近流行的云端FPGA instance(AWS,,阿里云等),,用戶可以根據(jù)其自身的需求在云端FPGA instance上燒入相應(yīng)的bit-stream,從而讓FPGA能成為針對(duì)你應(yīng)用的專用加速器,。另一個(gè)云FPGA的好處在于潛在地統(tǒng)一了FPGA的選型,,令開源工作的移植減少了很多不必要的配置bug。著名的NVDLA的FPGA版本就以支持AWS的FPGA平臺(tái)為主要方案,。
至此,,F(xiàn)PGA AI這樣一來設(shè)計(jì)迭代速度(尤其是配合了Chisel,HLS等敏捷開發(fā)流程之后)可以遠(yuǎn)遠(yuǎn)快于傳統(tǒng)ASIC流程,,同時(shí)硬件的能效比則遠(yuǎn)高于傳統(tǒng)的CPU/GPU,。這一招在異構(gòu)計(jì)算得到越來越多重視的今天可謂是迎合了潮流(關(guān)于異構(gòu)計(jì)算詳見RISC-V與DSA! 計(jì)算機(jī)架構(gòu)宗師Patterson與Hennessy 演講實(shí)錄),。這也是為什么我們看到微軟,,亞馬遜都紛紛在云端數(shù)據(jù)中心部署FPGA,而Intel則也在往高端CPU里加入Altera FPGA,。未來,,這種新的模式可望成為FPGA市場的一個(gè)新成長點(diǎn),值得我們關(guān)注,。
最后做個(gè)小總結(jié),,
(1)對(duì)于AI硬件的實(shí)現(xiàn)而言,F(xiàn)PGA和ASIC的 優(yōu)化路徑有很大區(qū)別,從FPGA到ASIC的直接移植并不是一種高效的做法,。
(2)強(qiáng)調(diào)一下這里并不是說基于FPGA的AI實(shí)現(xiàn)就沒有未來,,(相反我覺得還潛力無限),本文只是對(duì)于從FPGA到ASIC的直接移植提出了一點(diǎn)小想法,。我們預(yù)計(jì)FPGA將會(huì)配合敏捷設(shè)計(jì)擁有自己的新生態(tài),。
(3)FPGA對(duì)SoC設(shè)計(jì)流程的影響正在從原型驗(yàn)證往硬件模擬的角度發(fā)展,你的產(chǎn)品有沒有掉隊(duì)呢,?