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