“ 除了算法,、數(shù)據(jù)外,,異構(gòu)計(jì)算將會(huì)為AI應(yīng)用帶來(lái)更強(qiáng)大的支持。異構(gòu)計(jì)算,,特別是加速器的發(fā)展和創(chuàng)新,,將會(huì)為業(yè)界,、最終用戶(hù)和創(chuàng)業(yè)公司帶來(lái)更無(wú)限的商機(jī),。”
去廚神主持的餐廳吃飯,,上菜慢,,一定要等。因?yàn)閺N神只有一個(gè),。但是在競(jìng)爭(zhēng)激烈的市場(chǎng)里,,應(yīng)用人工智能AI技術(shù)則不能等,否則可能被顛覆被市場(chǎng)淘汰,。
該怎樣做,?
人工智能(AI)的研究已經(jīng)持續(xù)了60多年。最近AI所呈現(xiàn)出的爆發(fā)趨勢(shì),,不單單是因?yàn)樗惴ǖ母倪M(jìn),、大數(shù)據(jù)的積累,更重要的是計(jì)算能力的大幅提升和變革,。企業(yè)和互聯(lián)網(wǎng)巨頭都有自己的算法和數(shù)據(jù),,但在計(jì)算力的獲取上一直有比較高的門(mén)檻。今天我們重點(diǎn)談AI時(shí)代的計(jì)算能力,。
隨著近年來(lái)硅芯片逼近物理的極限和經(jīng)濟(jì)成本高升,,摩爾定律已趨近失效。使用通用處理器這個(gè)傳統(tǒng)的方法已無(wú)法滿(mǎn)足人工智能的各種應(yīng)用對(duì)爆發(fā)的和高計(jì)算能力的需求,。因此,,具有GPU、ASIC,、FPGA或其它加速器(Accelerator)等高并行、高密集的計(jì)算能力的異構(gòu)計(jì)算持續(xù)火熱,,而異構(gòu)計(jì)算也將成為支撐先進(jìn)和以后更復(fù)雜AI 應(yīng)用的必然的選擇,。
異構(gòu)計(jì)算(Heterogeneous Computing)是指使用不同類(lèi)型指令集和體系架構(gòu)的計(jì)算單元組成的計(jì)算系統(tǒng)。異構(gòu)計(jì)算是性能,、成本和功耗均衡的技術(shù),,同時(shí)也是讓最適合的專(zhuān)用硬件去做最適合的事如密集計(jì)算或外設(shè)管理等,,從而達(dá)到性能和成本的最優(yōu)化。
異構(gòu)計(jì)算大廚房里的CPU
我們熟知的CPU(中央處理器,,Central Processing Unit)作為通用處理器,,是更偏重支持控制流數(shù)據(jù)。CPU每個(gè)物理核中大部分的硬件資源被做成了控制電路和緩存,,用來(lái)提高指令兼容性和效率,,只有小部分是真正用來(lái)做計(jì)算的邏輯運(yùn)算單元(ALU)。在沒(méi)有AI或其它高計(jì)算力要求時(shí),,CPU可以應(yīng)付得綽綽有余,,在AI或高計(jì)算力要求時(shí),從計(jì)算任務(wù)執(zhí)行效率來(lái)看,,盡管CPU能兼容大量指令,,但是實(shí)際的計(jì)算效率并不高,。相反,CPU在異構(gòu)系統(tǒng)當(dāng)中,,可以扮演和發(fā)揮非常重要的指揮統(tǒng)籌,,控制核心的功能,。
做個(gè)比喻吧,CPU可以看成一個(gè)“大廚”,,各大菜系烹飪了如指掌,,可以做出各式各樣不同口味的菜品滿(mǎn)足各類(lèi)人群的需求。但“大廚”由于要負(fù)責(zé)廚房里的方方面面,,對(duì)一些大量而特定的復(fù)雜處理就顯得力不從心,,比如一千位客人要吃各種土豆絲,比如酸辣土豆絲,、青椒土豆絲,、土豆絲炒肉,需要助手在短時(shí)間內(nèi)切出大量長(zhǎng)短薄厚相同的土豆絲,,于是“大廚”需要找個(gè)幫手(GPU,,F(xiàn)PGA或ASIC)來(lái)協(xié)助,,這個(gè)幫手可以同時(shí)處理很多土豆(并行處理),,而且速度很快(低延時(shí)),,最后在與“大廚”的合理分工協(xié)作下,能滿(mǎn)足客戶(hù)對(duì)菜品的需求,。
也許有人會(huì)說(shuō),,可以再雇個(gè)“大廚”,這樣組成一個(gè)同構(gòu)廚房(Homogenous Computing,,同構(gòu)計(jì)算系統(tǒng))不好嗎,?當(dāng)然可以,之前的多CPU就是這么做的,,但是在當(dāng)前基于人工智能應(yīng)用的計(jì)算密集型負(fù)載上,,這種同構(gòu)廚房有明顯的缺點(diǎn)。首先,,“大廚”身價(jià)很高,而且在某些具體的應(yīng)用上也不擅長(zhǎng),,比如快速切土豆絲,;其次,,“大廚”很健忘,需要總是翻看菜譜(訪問(wèn)內(nèi)存),。由此可見(jiàn),,一個(gè)高效的廚房需要“大廚”和一群擅長(zhǎng)各種任務(wù)的“幫廚”高效溝通和協(xié)同合作,。
“大廚”CPU的重要幫手們
我們知道在異構(gòu)計(jì)算大廚房里常見(jiàn)的計(jì)算單元類(lèi)別除了“大廚”CPU之外,還有眾多幫手如GPU,、ASIC、FPGA,、DSP等,。那么,,這么多的計(jì)算單元各自有什么特長(zhǎng)呢?
GPU:適于大范圍,、多任務(wù)的簡(jiǎn)單運(yùn)算
GPU是圖形處理器(Graphics Processing Unit)的縮寫(xiě),。顧名思義就是一種專(zhuān)門(mén)在個(gè)人電腦,、工作站,、游戲機(jī)和一些移動(dòng)設(shè)備(如平板電腦、智能手機(jī)等)上進(jìn)行圖像運(yùn)算工作的微處理器,。近年來(lái),,GPU在深度學(xué)習(xí)方面應(yīng)用廣泛,主要是因?yàn)獒槍?duì)于神經(jīng)網(wǎng)絡(luò)這種大范圍多任務(wù)的簡(jiǎn)單運(yùn)算來(lái)說(shuō),,正好符合GPU這種多核架構(gòu),,就好像幾萬(wàn)個(gè)客人同時(shí)點(diǎn)了酸辣土豆絲,,需要大量的“幫廚”快速切好幾萬(wàn)盤(pán)土豆絲。
不過(guò),,GPU雖然土豆絲切的又快又好,,但如果你要跟他說(shuō),幾個(gè)土豆切絲,,幾個(gè)土豆切塊,,再配上幾個(gè)青椒,然后去冰箱拿些豬肉,,做一盤(pán)復(fù)雜的大菜,,那就力所不及了。這是因?yàn)閺?fù)雜的控制流程會(huì)產(chǎn)生大量的分支,,而GPU中一個(gè)控制單元要負(fù)責(zé)好幾個(gè)計(jì)算單元,。所以,如果要最大程度地使用GPU,,勢(shì)必要求指令簡(jiǎn)單特別是控制分支越少越好,。
另外,GPU也有CPU“大廚”的毛?。航⊥ㄐ枰獜膬?nèi)存讀取指令),。這帶來(lái)了一系列問(wèn)題,如存儲(chǔ)墻,,功耗大,,基于指令系統(tǒng),要譯碼,。
ASIC:全自動(dòng),、定制化
ASIC的全稱(chēng)是特殊應(yīng)用專(zhuān)用集成電路(Application Specific Integrated Circuit)。它是定制的,,也意味著不需要去糾結(jié)CPU和GPU怎樣分配控制資源和計(jì)算資源的問(wèn)題了,,想怎么分配就怎么分配。
編程語(yǔ)言越接近底層硬件,,運(yùn)行速度越快,。ASIC所有的設(shè)計(jì)是直接建筑在物理硬件(門(mén)電路)上的。所以ASIC不需要復(fù)雜的指令系統(tǒng),,每個(gè)時(shí)鐘周期單位都能專(zhuān)注于數(shù)據(jù)處理或者傳輸,,因此大大提高了效能。而且因?yàn)楦叨榷ㄖ苹?,芯片可以在設(shè)計(jì)中進(jìn)行針對(duì)性的PPA優(yōu)化(PPA是性能Performance,,功耗Power和面積Area的簡(jiǎn)稱(chēng))。
這么說(shuō)來(lái),ASIC像一臺(tái)全自動(dòng)定制土豆切絲機(jī),,你只要把土豆扔進(jìn)這個(gè)切絲機(jī)里,,土豆絲很快就切出來(lái)了,而且形狀一致性好,,能耗低,還節(jié)省空間,。
可見(jiàn)這臺(tái)定制機(jī)簡(jiǎn)直是廚房神器,,完勝CPU和GPU。但是定制機(jī)也有缺點(diǎn),,如果客人改變口味,,想吃土豆燒雞,需要把土豆切成塊,。這樣一來(lái)切絲機(jī)就沒(méi)法用了,,并且在市面上還買(mǎi)不到現(xiàn)成的切塊機(jī),需要重新定制,。
FPGA:靈活可編程
FPGA做為異構(gòu)計(jì)算大廚房的重要幫手,,和GPU、ASIC又有什么區(qū)別呢,?
FPGA(Field Programmable Gate Array),,即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL,、GAL,、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。關(guān)鍵字是“可編程”,,這意味著靈活性,。這樣,F(xiàn)PGA可以利用預(yù)建的邏輯塊(LUT,,Look-Up-Table)和可重新編程來(lái)布線資源,,當(dāng)客戶(hù)需要土豆絲的時(shí)候可以定制成是切絲機(jī),在需要土豆塊的時(shí)候可以變成切塊機(jī),。而且,,正是因?yàn)镕PGA里擁有這些大量的可編程邏輯,可以使其做到真正的并行執(zhí)行,,不同的處理操作無(wú)需競(jìng)爭(zhēng)相同的資源,,每個(gè)獨(dú)立的處理任務(wù)都配有專(zhuān)用的電路部分,能在不受其它邏輯塊的影響下自主運(yùn)作,。因此,,添加更多處理任務(wù)時(shí),其它應(yīng)用性能也不會(huì)受到影響。
當(dāng)然FPGA也有缺點(diǎn),,主要問(wèn)題在開(kāi)發(fā),。異構(gòu)算法的開(kāi)發(fā)人員大部分是軟件人員,缺乏對(duì)FPGA結(jié)構(gòu)和數(shù)字電路的了解,,編程語(yǔ)言也不統(tǒng)一(CPU端是C,、C++等;FPGA端是VHDL,、Verilog等底層硬件描述語(yǔ)言),。目前解決這個(gè)問(wèn)題的方法是OpenCL和HLS(High Level Synthesis)技術(shù),支持直接把C,、C++代碼編譯成Verilog,,目前轉(zhuǎn)化效果仍然有待提高,這些技術(shù)的成熟還需要一些時(shí)間,。
綜上所述,,一個(gè)具有高效的AI計(jì)算能力(廚房)的系統(tǒng)是大家必需要的,這個(gè)廚房里需要有經(jīng)驗(yàn)豐富的大廚(CPU)和身懷絕技的各種幫廚(加速器),,在“大廚”的指揮統(tǒng)籌下,,加上幫手們各展所長(zhǎng),并進(jìn)行有效的協(xié)同合作,,從而滿(mǎn)足客戶(hù)對(duì)美味佳肴不斷快速變化的需求,。