人工智能實(shí)現(xiàn)的流派 FPGA vs. ASIC看好誰?
人工智能方興未艾,無數(shù)初創(chuàng)公司和老牌公司都在積極開發(fā)以人工智能應(yīng)用為賣點(diǎn)的智能硬件。目前,強(qiáng)大的云端人工智能服務(wù)(如谷歌的 Alpha Go)已經(jīng)初現(xiàn)端倪,同時(shí),人們也希望能把人工智能也帶到移動(dòng)終端,尤其是能夠結(jié)合未來的物聯(lián)網(wǎng)應(yīng)用。
傳統(tǒng)實(shí)現(xiàn)移動(dòng)終端人工智能的方法是通過網(wǎng)絡(luò)把終端數(shù)據(jù)全部傳送到云端,之后在云端計(jì)算后再把結(jié)果發(fā)回移動(dòng)端,例如蘋果的 Siri 服務(wù)。
然而,這樣的方式會(huì)遇到幾個(gè)問題。第一,使用網(wǎng)絡(luò)傳輸數(shù)據(jù)會(huì)產(chǎn)生延遲,很可能數(shù)據(jù)計(jì)算的結(jié)果會(huì)需要等待數(shù)秒甚至數(shù)十秒才能傳送回終端(使用過 Prisma app 處理過照片的朋友們應(yīng)該深有體會(huì))。這樣一來,那些需要立刻得到計(jì)算結(jié)果的應(yīng)用就不能用這種方式。例如無人機(jī)上使用的深度學(xué)習(xí)躲避障礙物算法,如果它全部在云端執(zhí)行恐怕計(jì)算結(jié)果還沒送回來無人機(jī)已經(jīng)掉下來了。
第二,一旦使用網(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)算需要的能量又不能太多,否則電池一下就沒電了(想在手機(jī)上配功耗 200W+的 Nvidia Pascal 顯卡肯定不行?。?。
目前,許多公司正在積極開發(fā)能實(shí)現(xiàn)移動(dòng)端人工智能的硬件。對(duì)于移動(dòng)端人工智能硬件的實(shí)現(xiàn)方法,有兩大流派,即 FPGA 派和 ASIC 派。FPGA 流派的代表公司如 Xilinx 主推的 Zynq 平臺(tái),而 ASIC 流派的代表公司有 Movidius。兩大流派各有長(zhǎng)短,下面讓我來細(xì)細(xì)分說。
FPGA vs. ASIC
首先講講 FPGA 和 ASIC 的區(qū)別。FPGA 全稱「可編輯門陣列」(Field Programmable Gate Array),其基本原理是在 FPGA 芯片內(nèi)集成大量的數(shù)字電路基本門電路以及存儲(chǔ)器,而用戶可以通過燒入 FPGA 配置文件來來定義這些門電路以及存儲(chǔ)器之間的連線。這種燒入不是一次性的,即用戶今天可以把 FPGA 配置成一個(gè)微控制器 MCU,明天可以編輯配置文件把同一個(gè) FPGA 配置成一個(gè)音頻編解碼器。ASIC 則是專用集成電路 (ApplicaTIon-Specific Integrated Circuit),一旦設(shè)計(jì)制造完成后電路就固定了,無法再改變。
用于深度學(xué)習(xí)加速器的 FPGA(Xilinx Kintex 7 Ultrascle, 上) 和 ASIC(Movidius Myriad 2, 下)
比較 FPGA 和 ASIC 就像比較樂高積木和模型。舉例來說,如果你發(fā)現(xiàn)最近星球大戰(zhàn)里面 Yoda 大師很火,想要做一個(gè) Yoda 大師的玩具賣,你要怎么辦呢?
有兩種辦法,一種是用樂高積木搭,還有一種是找工廠開模定制。用樂高積木搭的話,只要設(shè)計(jì)完玩具外形后去買一套樂高積木即可。而找工廠開模的話在設(shè)計(jì)完玩具外形外你還需要做很多事情,比如玩具的材質(zhì)是否會(huì)散發(fā)氣味,玩具在高溫下是否會(huì)融化等等,所以用樂高積木來做玩具需要的前期工作比起找工廠開模制作來說要少得多,從設(shè)計(jì)完成到能夠上市所需要的時(shí)間用樂高也要快很多。
FPGA 和 ASIC 也是一樣,使用 FPGA 只要寫完 Verilog 代碼就可以用 FPGA 廠商提供的工具實(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ì)以滿足需求,但是用 FPGA 的話可以直接買軍工級(jí)的高穩(wěn)定性 FPGA 完全不影響開發(fā)時(shí)間。但是,雖然設(shè)計(jì)時(shí)間比較短,但是樂高積木做出來的玩具比起工廠定制的玩具要粗糙(性能差)許多(下圖),畢竟工廠開模是量身定制。
另外,如果出貨量大的話,工廠大規(guī)模生產(chǎn)玩具的成本會(huì)比用樂高積木做便宜許多。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è)商品賣給用戶時(shí),要讓用戶自己去重新配置卻要花一番功夫。
回到用樂高積木做玩具的例子,玩具廠商可以宣稱這個(gè) Yoda 大師由積木搭起來,所以玩家可以把這些積木重新組合成其他角色(比如天行者路克)。但是一般玩家根本不會(huì)拆裝積木,怎么辦?解決方案要么是把目標(biāo)市場(chǎng)定為精通積木的專業(yè)核心玩家,要么是在玩具后面加一個(gè)開關(guān),一般玩家只要按一下就可以讓積木自動(dòng)重新組裝。很顯然,第二個(gè)方案需要很高的技術(shù)門檻。
對(duì)于 FPGA 加速器來說,如果要把可重配置作為賣點(diǎn),要么是賣給有能力自己開發(fā) FPGA 的企業(yè)用戶(如百度,微軟等公司確實(shí)有在開發(fā)基于 FPGA 的深度學(xué)習(xí)加速器并且在不同的應(yīng)用場(chǎng)合將 FPGA 配置為不同的加速器),要么是開發(fā)一套方便易用能將用戶的深度學(xué)習(xí)網(wǎng)絡(luò)轉(zhuǎn)化為 FPGA 配置文件的編譯器(深鑒等公司正在嘗試)。
從目前來看,即使用高端的服務(wù)器來做 FPGA 編譯都會(huì)需要數(shù)分鐘的時(shí)間,如果編譯在計(jì)算能力較弱的移動(dòng)終端做需要的時(shí)間就更長(zhǎng)了。對(duì)于移動(dòng)終端用戶來說,如何說服他們嘗試重新配置 FPGA 并接受長(zhǎng)達(dá)數(shù)十分鐘的時(shí)間來編譯網(wǎng)絡(luò)并配置 FPGA 仍然是一個(gè)問題。