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