訂閱電子報∣ 友善列印字體大小 文章分享-Facebook 文章分享-Plurk 文章分享-Twitter
TPU架構引發熱議,究竟說了什麼?
獲取產業訊息零時差!立即訂閱電電公會電子報。
Google公佈TPU
深度學習在這兩年如日中天,使用深度學習來做自動駕駛、金融服務、安全防衛等等業務的公司如雨後春筍般紛紛冒出。Google一向是深度學習的領軍者,在四年前就已經意識到了深度學習演算法的重要性,早早就把深度學習應用在搜索、廣告、垃圾郵件識別、圖片人臉識別的業務上,還推出了TensorFlow的機器學習架構,去年更是率AlphaGO戰勝世界圍棋第一人李世石,成為深度學習人工智慧的標誌性事件。

除了軟體演算法領先之外,Google在深度學習的硬體研發上也占了先機。去年年中,Google推出了第一款得到大規模使用的專用深度學習加速晶片Tensor Processing Unit (TPU),據稱比GPU領先許多。TPU推出後很久,內部架構一直不為人知,直到昨天Google正式公佈了介紹TPU的論文,讓我們得以一窺究竟。

深度學習的硬體執行瓶頸
大約五年前,人們在跑機器學習演算法時用的主要還是CPU,因為CPU通用性好,程式設計模型很成熟,對於程式師來說非常友好。然而,當機器學習演算法的運算量越來越大時,人們發現CPU執行機器學習的效率並不高。CPU為了滿足通用性,晶片面積有很大一部分都用於複雜的控制流,留給運算單元的面積並不多。而且,機器學習演算法(尤其是機器視覺卷積神經網路演算法)中運算量最大的運算是一種張量(Tensor)運算,而CPU對於向量運算也只能說是部分支援,更不用說張量運算。這時候,GPU進入了機器學習研究者的視野。GPU原本的目的是圖像渲染,因此使用完美支援向量運算的SIMD(單指令流多資料流程,single instruction multiple data)架構,而這個架構正好能用在機器學習演算法上。另外,GPU中控制比較簡單,絕大部分晶片面積都用在了計算單元上,因此計算能力也比CPU要強一到兩個數量級。

GPU運行機器學習演算法比CPU快很多,但是畢竟不是為機器學習而設計的。主要問題就是,GPU使用多執行緒(SIMT)的架構去遮蓋記憶體訪問延遲,因此片上記憶體容量不大。一方面,深度學習加速硬體的主要能量消耗其實就在於記憶體訪問,因此GPU的SIMT架構雖然能遮蓋記憶體訪問實現高輸送量,但是能效比(即執行完單位元運算需要的能量)並不好。但是,目前能效比正在成為越來越重要的指標。對於移動應用,能效比不好意味著電池很快就會被用完,影響人工智慧的普及;對於雲端資料中心應用,能效比不好則意味著資料中心需要在散熱投入許多錢,而目前散熱已經成為資料中心最大的開銷之一。另一方面,GPU關注的是輸送量,而非處理延遲,然而在許多應用中,尤其是人工網路做推斷運算時,處理延遲事實上比輸送量更重要。例如,在自動駕駛應用中,幾十毫秒的處理延遲就可能意味著是否會出事故。在此類應用中,GPU並非最佳選擇。
 
顯然,為深度學習專門開發電路能實現最佳的效率。然而,一般公司很難承擔為深度學習開發專門處理器ASIC晶片的成本和風險。首先為了性能必須使用最好的半導體製造工藝,而現在用最新的工藝製造晶片一次性成本就要幾百萬美元,非常貴。就算有錢,還需要拉一支隊伍從頭開始設計,設計階段往往要到一年以上,time to market時間太長,風險很大。

大多數公司,例如Amazon,Microsoft等等選擇了更靈活的FPGA方案,在FPGA可以快速實現為機器學習演算法開發的處理器架構,而且成本較低(一塊FPGA開發板大約售價1000美金,比真的製造晶片便宜太多)。但是FPGA為了可配置性,其性能比起ASIC來說要弱不少,所以在架構設計接近的情況下,FPGA的性能會比ASIC差5-10倍。就在大家還在要不要上ASIC的時候,Google悶聲不響開始了深度學習加速器晶片的開發,並於去年發佈了TPU。昨天,Google更是公開了關於TPU架構設計的論文《In-Datacenter Performance Analysis of a Tensor Processing Unit》。下面讓我們具體分析一下論文中到底講了什麼。
TPU的創新性
 
TPU的架構如上圖所示。TPU的架構看上去很簡單,主要模組包括片上記憶體,256x256個矩陣乘法單元,非線性神經元計算單元(activation),以及用於歸一化和池化的計算單元。

事實上,TPU的微架構確實也並不複雜。TPU的主旨是讓它的256x256個矩陣乘法單元盡可能處於工作狀態,減少運算閒置。基於這個簡潔的設計哲學,TPU就能實現相當高的計算效率。TPU甚至沒有取命令的動作,而是主處理器提供給它當前的指令,而TPU根據目前的指令做相應操作(這與CPU,GPU都完全不同)。從論文裡披露的細節來看,TPU的主要創新在於三點,即大規模片上記憶體,脈動式記憶體訪問以及8位元低精度運算。
 
TPU在晶片上使用了高達24MB的局部記憶體,6MB的累加器記憶體以及用於與主控處理器進行對接的記憶體,總共占晶片面積的37%(圖中藍色部分)。這表示Google充分意識到片外記憶體訪問是GPU能效比低的罪魁禍首,因此不惜成本在晶片上放了巨大的記憶體。相比之下,Nvidia同時期的K80只有8MB的片上記憶體,因此需要不斷地去訪問片外DRAM。
 
第二個創新是Systolic(脈動式)資料流程。在矩陣乘法和卷積運算中,許多資料是可以複用的,同一個資料需要和許多不同的權重相乘並累加以獲得最後結果。因此,在不同的時刻,資料登錄中往往只有一兩個新資料需要從外面取,其他的資料只是上一個時刻資料的移位元。在這種情況下,把片上記憶體的資料全部Flush再去去新的資料無疑是非常低效的。根據這個計算特性,TPU加入了脈動式資料流程的支援,每個時鐘週期資料移位元,並取回一個新資料。這樣做可以最大化資料複用,並減小記憶體訪問次數,在降低記憶體頻寬壓力的同時也減小了記憶體訪問的能量消耗。

第三個創新是低精度(8-bit)計算。使用低精度而非32位全精度浮點數做計算已經成為深度學習界的共識,研究結果表明低精度運算帶來的演算法準確率損失很小,但是在硬體實現上卻可以帶來巨大的便利,包括功耗更低速度更快占晶片面積更小的運算單元,更小的記憶體頻寬需求等。在今年ISSCC的深度學習處理器session中,幾乎所有的論文都使用了低精度運算(8-bit甚至4-bit),可見未來硬體使用低精度運算已成趨勢,這次Google公佈TPU也使用了8-bit也在意料之中。
 
TPU顯示出了非常強的深度學習加速能力。TPU的平均性能可以達到CPU和GPU的15到30倍,能效比則有30到80倍的提升。如果使用GPU的DDR5而不是目前的DDR3記憶體介面,TPU的性能甚至還可以再提升數倍。

深度學習硬體市場預測
在Google公佈的TPU設計可謂是給深度學習ASIC打了一針雞血,之後預計會有眾多挑戰TPU的ASIC出現,各大公司和初創團隊都會把TPU當作自己挑戰的目標,深度學習加速硬體也會得到更多關注。Nvidia仍然會堅持GPU架構,但是預計會在GPU中借鑒和融合深度學習加速器的部分設計,以加速深度學習運算。Intel的Xeon+FPGA架構會使用收購得到的Nervana的設計IP,預計也會在深度學習上獲得不少加速。這些都是主要針對伺服器端的深度學習加速硬體,而在移動端如何設計深度學習加速硬體仍然還沒有太多線索,也有許多工程師在探索這個問題。另一個不可小覷的是FPGA,因為在雲端服務中心可快速重配置的FPGA可以實現快速服務切換,從而實現雲計算中許多實際的服務問題。
訂閱電子報 友善列印 字體大小:
獲取產業訊息零時差!立即訂閱電電公會電子報。