人工智能方興未艾,無數(shù)初創(chuàng)公司和老牌公司都在積極開發(fā)以人工智能應(yīng)用為賣點的智能硬件。目前,強大的云端人工智能服務(wù)(如谷歌的 Alpha Go)已經(jīng)初現(xiàn)端倪,同時,人們也希望能把人工智能也帶到移動終端,尤其是能夠結(jié)合未來的物聯(lián)網(wǎng)應(yīng)用。
傳統(tǒng)實現(xiàn)移動終端人工智能的方法是通過網(wǎng)絡(luò)把終端數(shù)據(jù)全部傳送到云端,之后在云端計算后再把結(jié)果發(fā)回移動端,例如蘋果的 Siri 服務(wù)。
然而,這樣的方式會遇到幾個問題。第一,使用網(wǎng)絡(luò)傳輸數(shù)據(jù)會產(chǎn)生延遲,很可能數(shù)據(jù)計算的結(jié)果會需要等待數(shù)秒甚至數(shù)十秒才能傳送回終端(使用過 Prisma app 處理過照片的朋友們應(yīng)該深有體會)。這樣一來,那些需要立刻得到計算結(jié)果的應(yīng)用就不能用這種方式。例如無人機上使用的深度學(xué)習(xí)躲避障礙物算法,如果它全部在云端執(zhí)行恐怕計算結(jié)果還沒送回來無人機已經(jīng)掉下來了。
第二,一旦使用網(wǎng)絡(luò)傳送數(shù)據(jù),那么數(shù)據(jù)就有被劫持的風(fēng)險。因此,那些要求低計算延遲以及對于數(shù)據(jù)安全性非常敏感的應(yīng)用就需要把人工智能算法全部在終端實現(xiàn),或者至少在終端完成一些預(yù)處理運算然后再把少量運算結(jié)果(而不是大量的原始數(shù)據(jù))傳送到云端完成最終計算,這就需要移動終端硬件能夠快速完成這些運算。另一方面,移動端硬件完成這些運算需要的能量又不能太多,否則電池一下就沒電了(想在手機上配功耗 200W+的 Nvidia Pascal 顯卡肯定不行!)。
目前,許多公司正在積極開發(fā)能實現(xiàn)移動端人工智能的硬件。對于移動端人工智能硬件的實現(xiàn)方法,有兩大流派,即 FPGA 派和 ASIC 派。FPGA 流派的代表公司如 Xilinx 主推的 Zynq 平臺,而 ASIC 流派的代表公司有 Movidius。兩大流派各有長短,下面讓我來細(xì)細(xì)分說。
FPGA vs. ASIC
首先講講 FPGA 和 ASIC 的區(qū)別。FPGA 全稱「可編輯門陣列」(Field Programmable Gate Array),其基本原理是在 FPGA 芯片內(nèi)集成大量的數(shù)字電路基本門電路以及存儲器,而用戶可以通過燒入 FPGA 配置文件來來定義這些門電路以及存儲器之間的連線。這種燒入不是一次性的,即用戶今天可以把 FPGA 配置成一個微控制器 MCU,明天可以編輯配置文件把同一個 FPGA 配置成一個音頻編解碼器。ASIC 則是專用集成電路 (Application-Specific Integrated Circuit),一旦設(shè)計制造完成后電路就固定了,無法再改變。
用于深度學(xué)習(xí)加速器的 FPGA(Xilinx Kintex 7 Ultrascle, 上) 和 ASIC(Movidius Myriad 2, 下)
比較 FPGA 和 ASIC 就像比較樂高積木和模型。舉例來說,如果你發(fā)現(xiàn)最近星球大戰(zhàn)里面 Yoda 大師很火,想要做一個 Yoda 大師的玩具賣,你要怎么辦呢?
有兩種辦法,一種是用樂高積木搭,還有一種是找工廠開模定制。用樂高積木搭的話,只要設(shè)計完玩具外形后去買一套樂高積木即可。而找工廠開模的話在設(shè)計完玩具外形外你還需要做很多事情,比如玩具的材質(zhì)是否會散發(fā)氣味,玩具在高溫下是否會融化等等,所以用樂高積木來做玩具需要的前期工作比起找工廠開模制作來說要少得多,從設(shè)計完成到能夠上市所需要的時間用樂高也要快很多。
FPGA 和 ASIC 也是一樣,使用 FPGA 只要寫完 Verilog 代碼就可以用 FPGA 廠商提供的工具實現(xiàn)硬件加速器了,而要設(shè)計 ASIC 則還需要做很多驗證和物理設(shè)計 (ESD,Package 等等),需要更多的時間。如果要針對特殊場合(如軍事和工業(yè)等對于可靠性要求很高的應(yīng)用),ASIC 則需要更多時間進(jìn)行特別設(shè)計以滿足需求,但是用 FPGA 的話可以直接買軍工級的高穩(wěn)定性 FPGA 完全不影響開發(fā)時間。但是,雖然設(shè)計時間比較短,但是樂高積木做出來的玩具比起工廠定制的玩具要粗糙(性能差)許多(下圖),畢竟工廠開模是量身定制。
另外,如果出貨量大的話,工廠大規(guī)模生產(chǎn)玩具的成本會比用樂高積木做便宜許多。FPGA 和 ASIC 也是如此,在同一時間點上用最好的工藝實現(xiàn)的 ASIC 的加速器的速度會比用同樣工藝 FPGA 做的加速器速度快 5-10 倍,而且一旦量產(chǎn)后 ASIC 的成本會遠(yuǎn)遠(yuǎn)低于 FPGA 方案(便宜 10 到 100 倍)。
FPGA vs ASIC :積木 vs 手辦
當(dāng)然,F(xiàn)PGA 還有另一大特點,就是可以隨時重新配置,從而在不同的場合實現(xiàn)不同的功能。但是,當(dāng)把 FPGA 實現(xiàn)的加速器當(dāng)作一個商品賣給用戶時,要讓用戶自己去重新配置卻要花一番功夫。
回到用樂高積木做玩具的例子,玩具廠商可以宣稱這個 Yoda 大師由積木搭起來,所以玩家可以把這些積木重新組合成其他角色(比如天行者路克)。但是一般玩家根本不會拆裝積木,怎么辦?解決方案要么是把目標(biāo)市場定為精通積木的專業(yè)核心玩家,要么是在玩具后面加一個開關(guān),一般玩家只要按一下就可以讓積木自動重新組裝。很顯然,第二個方案需要很高的技術(shù)門檻。
對于 FPGA 加速器來說,如果要把可重配置作為賣點,要么是賣給有能力自己開發(fā) FPGA 的企業(yè)用戶(如百度,微軟等公司確實有在開發(fā)基于 FPGA 的深度學(xué)習(xí)加速器并且在不同的應(yīng)用場合將 FPGA 配置為不同的加速器),要么是開發(fā)一套方便易用能將用戶的深度學(xué)習(xí)網(wǎng)絡(luò)轉(zhuǎn)化為 FPGA 配置文件的編譯器(深鑒等公司正在嘗試)。
從目前來看,即使用高端的服務(wù)器來做 FPGA 編譯都會需要數(shù)分鐘的時間,如果編譯在計算能力較弱的移動終端做需要的時間就更長了。對于移動終端用戶來說,如何說服他們嘗試重新配置 FPGA 并接受長達(dá)數(shù)十分鐘的時間來編譯網(wǎng)絡(luò)并配置 FPGA 仍然是一個問題。
小結(jié)
我把 FPGA 和 ASIC 的比較總結(jié)在下面表格里。FPGA 上市速度快,但性能較低。ASIC 上市速度慢,需要大量時間開發(fā),而且一次性成本(光刻掩模制作成本)遠(yuǎn)高于 FPGA,但是性能遠(yuǎn)高于 FPGA 且量產(chǎn)后平均成本遠(yuǎn)低于 FPGA。FPGA 可以完全重配置,但是 ASIC 也有一定的可配置能力,只要在設(shè)計的時候就把電路做成某些參數(shù)可調(diào)的即可。
目標(biāo)市場方面,F(xiàn)PGA 成本太高,所以適合對價格不是很敏感的地方,比如企業(yè)應(yīng)用,軍事和工業(yè)電子等等(在這些領(lǐng)域可重配置可能真的需要)。而 ASIC 由于低成本則適合消費電子類應(yīng)用,而且在消費電子中可配置是否是一個偽需求還有待商榷。
我們看到的市場現(xiàn)狀也是如此:使用 FPGA 做深度學(xué)習(xí)加速的多是企業(yè)用戶,百度、微軟、IBM 等公司都有專門做 FPGA 的團(tuán)隊為服務(wù)器加速,而做 FPGA 方案的初創(chuàng)公司 Teradeep 的目標(biāo)市場也是服務(wù)器。而 ASIC 則主要瞄準(zhǔn)消費電子,如 Movidius。由于移動終端屬于消費電子領(lǐng)域,所以未來使用的方案應(yīng)當(dāng)是以 ASIC 為主。
SoC+IP 模式
說到這里,不少讀者可能有疑問:現(xiàn)在深度學(xué)習(xí)的網(wǎng)絡(luò)結(jié)構(gòu)日新月異,但是 ASIC 上市速度那么慢而且一旦制作完成(流片)就無法更改,如何能跟上深度學(xué)習(xí)的發(fā)展速度呢?針對這個問題,我想首先需要厘清一個概念,即用于深度學(xué)習(xí)加速的 ASIC 到底要做什么?
有人認(rèn)為神經(jīng)網(wǎng)絡(luò) ASIC 就是真的實現(xiàn)一個神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)在芯片上,因此網(wǎng)絡(luò)結(jié)構(gòu)一改(例如從 12 層變成 15 層,或者權(quán)重參數(shù)變一下)該 ASIC 就不能用了。其實這樣的理解是不對的:ASIC 加速器做的是幫助 CPU 快速完成深度學(xué)習(xí)中的運算(例如卷積),當(dāng) CPU 在執(zhí)行人工智能算法時只要遇到這種運算就交給加速器去做。因此只要神經(jīng)網(wǎng)絡(luò)的主要運算不變,則 ASIC 加速器完全可以使用。網(wǎng)絡(luò)結(jié)構(gòu)會影響 ASIC 加速器的性能,一種 ASIC 加速器可能是針對 GoogleNet 優(yōu)化過的所以執(zhí)行 GoogleNet 會特別快;當(dāng)你換到 VGG Net 的時候這款 ASIC 還是可以用的,只是執(zhí)行效率相比執(zhí)行 GoogleNet 時要打個折扣,不過無論如何都要比 CPU 快得多。
至于 ASIC 上市時間慢的問題,目前也是有辦法可以解決的,就是使用 SoC+IP 的方法。既然設(shè)計 ASIC 一家公司做太花時間,那能不能外包甚至眾籌呢?完全可以!許多 SoC 芯片就是這樣做出來的。
這里首先要向大家介紹 SoC 的概念。SoC 全稱是「片上系統(tǒng) (System-on-chip)」,亦即集成了許多不同模塊的芯片。就拿多媒體應(yīng)用的芯片舉例,早些年每一個多媒體應(yīng)用的模塊(音頻編解碼,MPEG 播放編解碼,3D 加速等等)自己都是一塊 ASIC。
后來電子業(yè)界發(fā)現(xiàn)每個模塊都做 ASIC 成本太高,而且最后電子產(chǎn)品的體積也很難做小,不如把所有的模塊都集成到同一塊芯片上。這塊芯片集成了多個模塊,并由一個中央控制單元通過總線控制每個模塊的運作,就是 SoC。例如,現(xiàn)在高通公司的 Snapdragon 就是一塊典型的 SoC,上面集成了 GPU,視頻/音頻編解碼,相機圖像信號處理單元(ISP),GPS 以及有線/無線連接單元等等。
SoC 上面的每一個模塊都可以稱為 IP,這些 IP 既可以是自己公司設(shè)計的(如 Snapdragon 上面的調(diào)制解調(diào)器就是高通自己設(shè)計的),也可以是購買其他公司的設(shè)計并整合到自己的芯片上,例如蘋果 A 系列處理器里用的 GPU 就使用了 Imagination 的 PowerVR IP。SoC+IP 提供了一種靈活而快速的模式,可以想象如果蘋果不是購買 IP 而是自己組建團(tuán)隊慢慢做 GPU,其 A 系列處理器芯片上市的時間至少要被延遲一年。
高通的 Snapdragon SoC,芯片上集成了眾多 IP
對于深度學(xué)習(xí)加速器而言,做成 IP 也是一個加速上市速度的模式。當(dāng)深度加速器成為 IP 時,它就不再自己做成 ASIC,而是成為 SoC 的一部分,當(dāng) SoC 需要做深度學(xué)習(xí)相關(guān)運算時就交給加速器去做。
而且做成 IP 對于加速器來說能夠更靈活地滿足客戶的需求。例如,某加速器 IP 設(shè)計可以實現(xiàn) 100GFlops 的運算速度并消耗功耗 150 mW,這時 A 客戶說我們需要算得快一點的加速器(150 Gflops),而且不在乎功耗(300 mW 也可以)和芯片面積,那么 IP 公司可以根據(jù)客戶的需求快速微調(diào)自己的設(shè)計并在一兩個月內(nèi)交付(由于并不需要真正生產(chǎn)芯片,只需要交付設(shè)計)。
但是如果加速器已經(jīng)做成 ASIC,那要改動設(shè)計就必須重新做一塊芯片,這個過程牽扯到耗時巨大的物理設(shè)計和驗證,改動完的芯片上市時間可能是一年之后了。在 SoC+IP 的模式下,IP 公司可以專注于加速器的前端設(shè)計并且根據(jù)客戶的需求量體裁衣,大公司則做自己擅長的后端以及芯片/封裝級驗證,可以說是大公司和小公司都可以揚長避短,各取所需,最終實現(xiàn)快速加速器設(shè)計迭代(如半年甚至一個季度一次)并跟上深度學(xué)習(xí)發(fā)展的步伐。
從性能角度來說,深度學(xué)習(xí)加速器如果做成 IP 則和同一芯片上的 CPU 進(jìn)行數(shù)據(jù)通訊時可以使用高帶寬的片上互聯(lián),但是如果做成 ASIC 則必須走帶寬比較低功耗也比較大的芯片外互聯(lián),因此深度學(xué)習(xí)加速器作為 IP 成為 SoC 的一部分對于系統(tǒng)的整體性能也有所提升。
目前,做深度學(xué)習(xí)加速器 IP 的老牌公司有 Ceva,Cadence 等等。這些公司的設(shè)計大多是基于已有的 DSP 架構(gòu),設(shè)計比較保守。當(dāng)然,也有一些初創(chuàng)公司看到了深度學(xué)習(xí)加速器 IP 這塊市場并試圖用全新的加速器架構(gòu)設(shè)計來滿足應(yīng)用的需求,如 Kneron。
對于做 IP 的初創(chuàng)公司我個人持樂觀態(tài)度,因為首先深度學(xué)習(xí)相關(guān)加速器 IP 確實有市場需求,例如微軟在用于 AR 設(shè)備 HoloLens 的處理器 HPU 中,主要運算單元都是使用買來的加速器 IP。其次,做 IP 并不和大的芯片公司(如 NVidia,Intel)構(gòu)成競爭關(guān)系,所以壓力比較小。最后,由于做 IP 需要的資源較少,產(chǎn)品上市時間較快,因此維持運營對資本的壓力比較小,風(fēng)險也比直接做芯片要小,可以說是一個比較穩(wěn)妥的方案。
深度加速器 IP 市場既有沿用傳統(tǒng)架構(gòu)的老牌廠商(Ceva, Cadence)也有使用創(chuàng)新架構(gòu)的初創(chuàng)公司(Kneron)
結(jié)語
FPGA 和 ASIC 在實現(xiàn)深度學(xué)習(xí)加速器方面各有所長,F(xiàn)PGA 的可配置性更適合企業(yè)、軍工等應(yīng)用,而 ASIC 的高性能和低成本則適合消費電子領(lǐng)域(包括移動終端)。為了實現(xiàn)快速迭代,ASIC 可以采用 SoC+IP 的模式,而這種模式也使得沒有資源量產(chǎn)芯片的中小公司可以專注于深度學(xué)習(xí)加速器 IP 的架構(gòu)和前端設(shè)計,并在人工智能市場上占有一席之地。
評論
查看更多