FPGA:AI ASIC的必經之路?

矽說發表於2018-08-20

想起寫這篇矽說的起源是一個月前的AI界大新聞——知名AI硬體公司深鑑被FPGA巨頭Xilinx收購,傳說中的交易金額在n億美金不等,大家紛紛感概創始人的財富自由與高尚情懷(給清華大學捐了500萬,簡直是國內由學、研至產再回饋學的典範),一時佳話。與此同時,各種危言聳聽也開始流傳,如AI領域的垂直整合大幕即將開啟,泡沫破滅已經不遠矣的恐懼也落在雨後春筍般崛起的AI硬體公司中。

我並不想去評斷那個商業行為背後的動機,只是想以此為契機從技術的角度,略略討論下這次收購背後的關鍵因素——FPGA和ASIC的在AI計算中銜接關係。因為並不是專家,所以如有錯誤理解請指出。

從FPGA到ASIC,

異曲同工還是南轅北轍?

在國產AI硬體三強“寒地深”中,deephi最強的當屬其面向AI的專用design kit —— DNNDK以及其FPGA的實現,其中涵蓋了其大殺四方的必殺技——稀疏化網路。做AI硬體的如果沒有看過剪枝(prunning)就可以放棄科研了。

與此同時,deephi也有其ASIC產品線——聽濤系列SoC。

FPGA:AI ASIC的必經之路?

我們假設聽濤的亞里士多德結構傳承自深鑑在Zynq 7020上的Aristotle架構(Aristotle是亞里士多德的英文),即下圖: (注:這裡是姑妄言之隨便臆測,這個假設很有可能是不對的)

FPGA:AI ASIC的必經之路?

那麼,問題來了 AI硬體的架構最優解是否從FPGA 到 ASIC是一以貫之呢?

這個問題還需要回到FPGA和ASIC的設計的價值觀。隨著FPGA晶片的發展不斷深化,在一個FPGA fabric中,核心基礎模組早已不僅僅是查詢表(Look Up Table, LUT)。在以算力為主要矛盾的FPGA設計中,(典型例子是神經網路),FPGA中的DSP和BRAM IP的高效率決定了該設計的最終效能。

讓我們來看看目前應用廣泛的Xilinx 7系列的dsp48 macro IP,其基本架構如下圖,基本可以理解為一個可配置乘加模組,值得注意的是其輸入位寬,25位和18位,輸出位寬可以達到48位。

FPGA:AI ASIC的必經之路?

這時候,尷尬的故事發生了,DNN,特別是端測DNN的大部分應用僅僅需要8位精度,如果用牛逼的dsp48就是大炮打蚊子,如果用LUT綜邏輯時序又無法滿足。這個時候,Xilinx官宣了一份白皮書WP487,給出了一種在NN場景下一個dsp48怎樣實現並行實現兩個8-bit精度的方法。簡而言之就是把兩個8-位元數拼成一個27位的數,當中隔了10位然後和第三個數相乘,乘法的結果的MSB和 LSB分別是兩個乘法的結果。總之,尷尬癌還是有那麼點的。

FPGA:AI ASIC的必經之路?

在這個場景下,每次MAC需要3個週期才能完成,複雜的流水線實現會給帶來很多debug的空間。然而在ASIC實現中,8-bit MAC僅僅需要一個週期,跑到500MHz是分分鐘的事情。由此,如果照搬FGPA的RTL到ASIC,那將帶來許多平白無故的效能損失。該問題可能在時下越來越流行的低精度神經網路中越來越顯著,比如在ISSCC 2018中韓國KAIST提出的新形複用MAC,在乘加內部做了新邏輯,完全超出了FPGA的mapping範圍,但是其在功耗效能上的優勢顯著。

同樣的問題還發生在片上RAM的使用。筆者認為,CNN專用處理器和經典SIMD計算/矩陣乘加速器 最大的差別,就是在於利用CNN的資料複用實現多樣化的data flow上。而實現各種data flow的切實需求就在於有一個不大不小的scratchpad用於實現儲存partial sum。目前主流的設計,每個MAC對應scratchpad大小在0.5kb-2kb左右。而FPGA片上macro IP(RAMB18E1)提供的BRAM/FIFO 的單位尺寸為18kb,顯著地大於scratchpad的需求。於是這個scratchpad在FPGA上的實現又陷於兩難,直接綜合將消耗大量的LUT中DFF的資源,如果用片上macro,又有一定程度的浪費,並且擠壓了用於儲存feature/weight的空間。由於這個scratchpad大小的尷尬處境,很多FPGA的DNN實現專注在矩陣乘法(Matrix product)的實現上,而放棄了在CNN/DNN中複雜data flow的支援。同樣地,這個問題在以RAM compiler為基礎的ASIC實現上毫無問題,畢竟ASIC設計中可以自由配置scratchpad的大小。

綜上所述,FPGA和 ASIC在面向AI的專用設計中,雖然表面都是寫RTL,但是在具體架構和思想上已經有了較大的差異。FPGA設計的最優解是最大化底層marco IP的拼積木設計,而ASIC卻完全沒有這樣的限制,以放飛自我的方式尋找可能。由此,照搬FPGA而來的ASIC很有可能在某種程度上受這些限制的影響,也無法達到存在的ASIC最優解。這或許也是為什麼深鑑在FPGA原型開發完成之後,還付出了大量努力才能完成真正ASIC設計的原因。

FPGA原型驗證:

食之無味,棄之可惜?

傳統意義上,FPGA出現的一個重要因素是為了給ASIC做原型驗證(Prototyping)的。不可否認,原型驗證仍然是FPGA的一個重大市場。

在AI應用中,除了對RTL code的功能驗證和高速模擬外,FPGA Prototyping對於產品的更重要優勢在於,更早地讓嵌入式軟體設計(Embedded Software Development)進入整體設計流程。軟體領域的bug和靈活度的數量級往往都遠高於硬體,如果等ASIC流片完了再對軟體和系統介面著手,那也是白白浪費時間。原型驗證的一大優勢就是儘早地從系統和整合的角度,以硬體原型著手進行軟體與嵌入式的開發。而於此同時後端以及流片的ASIC研發時間可以同步進行。

但和RTL simulation相比,Prototype的debug性差也是路人皆知的。常見的FPGA Prototype的debug方法是人為的在RTL中設定觀測點(probe),呼叫片上BRAM儲存,然後用類似JTAG的串列埠方式讀取儲存訊號,再現波形。顯然地,這種觀測方法方法是在和有實際功用的RTL競爭片上BRAM資源,特別是在儲存深度大,位寬寬的情況下。更嚴重的問題是如果發生了新一輪規模性的修改probe,而導致的重新綜合與實現可能會耗去大量時間,可能還不如simulation的效率高。目前主流的FPGA的debug方案基本都是如上思路,如下圖中的ChipScope+ILA模式。

FPGA:AI ASIC的必經之路?

不僅如此,FPGA prototyping在複雜時鐘設計中的表現也令人堪憂。對於FPGA的初學者,門控時鐘(clock gating,CG)幾乎是完全不推薦的。而作為最主流的ASIC降功耗手段,CG幾乎存在AI晶片的每一角落,特別是在具有稀疏性的網路中,門控時鐘是最簡單易行的降低功耗的做法。FPGA對這一特點的弱支援將導致原型驗證可能存在不完整性問題。除此之外,多時鐘域的問題在FPGA的原型驗證也是一個問題,由於FPGA片上的PLL資源受限,在原型設計中也將收到諸多限制。

上述種種原因的情況下,FPGA作為AI晶片的原型驗證重要平臺,雖然仍是不少產品的重要選項,但是目前的受到的挑戰令他越來越後繼乏力。

Hardware Emulator,

領域專用的FPGA

隨著積體電路EDA工具的發展,一個兼具良好debug效能,又可接近原型功能提供軟體開發的便利的新型SoC系統開發工具正在崛起——hardware emulator(硬體模擬器)。可以說它兼具了simulation和prototype的優點,又在很大程度上彌補了缺點。目前主流的EDA工具開發商均提供emulator平臺,並且期望在不遠的將來,實現以emulator為中心的SoC開發流程。Synopsys 家的Zebu,Cadence家的Palladium和Mentor家的Veloce。其中Zebu就是以Xilinx的高階FPGA為基本元件搭建的。

從技術角度上,FPGA emulation 和 prototype的差別在於——emulator的RTL mapping是將原本的RTL分解對映(partition)到多塊FPGA上,每塊FPGA本身還整合了用於debug的觀測硬體部分的程式碼。在Partition同時,設計EDA軟體還關注模組間的通訊行為,透過FPGA整合的高速傳輸(high speed link)和路由(router)特性完成實現SoC partition,避免了在單一FPGA中硬體資源受限制的問題。

FPGA:AI ASIC的必經之路?

下圖從效能的角度比較了以FPGA為核心的原型驗證平臺與模擬器平臺的上的區別。可以發現,emulator雖然在速度上並不具有優勢,但是,其在內部資料的可觀測性,以及由此帶來的debug的可實現效能,均具有明顯的優勢。可以說,基於FPGA的模擬器正在並非對AISC 設計原始碼的直接對映,反之是在原始碼基礎上透過Partition, Interconnection,Probe-serialization等一系列RTL的再生成後,產生的新RTL的對映。拿時髦的話來講,emulator是領域專用的FPGA Prototyping。

FPGA:AI ASIC的必經之路?

當然,FPGA emulator有一個明顯的劣勢,那就是貴!對於剛過門檻的AI 硬體startup們,購買一臺emulator是真的在流血。但即使如此,隨著AI ASIC對於系統和應用的要求越來越高,未來基於FPGA的Emulator取代基於FPGA的Prototyping是否將成為一種潮流?讓我們拭目以待。

FPGA AI:

是否需要走ASIC的老路?

如前所述,FPGA設計很難直接照搬到ASIC。事實上,FPGA上的AI應用是否真的要走傳統ASIC的老路,即“發現需求——定義產品規格——上量大規模出貨——以年為時間單位更新換代”?我們認為,FPGA的可重配置特點讓它完全沒有必要走這條路,而是可以走更接近於軟體開發模式的道路。一個例子就是最近流行的雲端FPGA instance(AWS,阿里雲等),使用者可以根據其自身的需求在雲端FPGA instance上燒入相應的bit-stream,從而讓FPGA能成為針對你應用的專用加速器。另一個雲FPGA的好處在於潛在地統一了FPGA的選型,令開源工作的移植減少了很多不必要的配置bug。著名的NVDLA的FPGA版本就以支援AWS的FPGA平臺為主要方案。

至此,FPGA AI這樣一來設計迭代速度(尤其是配合了Chisel,HLS等敏捷開發流程之後)可以遠遠快於傳統ASIC流程,同時硬體的能效比則遠高於傳統的CPU/GPU。這一招在異構計算得到越來越多重視的今天可謂是迎合了潮流(關於異構計算詳見RISC-V與DSA! 計算機架構宗師Patterson與Hennessy 演講實錄)。這也是為什麼我們看到微軟,亞馬遜都紛紛在雲端資料中心部署FPGA,而Intel則也在往高階CPU里加入Altera FPGA。未來,這種新的模式可望成為FPGA市場的一個新成長點,值得我們關注。

最後做個小總結,

(1)對於AI硬體的實現而言,FPGA和ASIC的 最佳化路徑有很大區別,從FPGA到ASIC的直接移植並不是一種高效的做法。

(2)強調一下這裡並不是說基於FPGA的AI實現就沒有未來,(相反我覺得還潛力無限),本文只是對於從FPGA到ASIC的直接移植提出了一點小想法。我們預計FPGA將會配合敏捷設計擁有自己的新生態。

(3)FPGA對SoC設計流程的影響正在從原型驗證往硬體模擬的角度發展,你的產品有沒有掉隊呢?

相關文章