在Google I/O 2016的主題演講進入尾聲時,谷歌的CEO皮采提到了一項他們這段時間在AI和機器學習上取得的成果,一款叫做Tensor Processing Unit(張量處理單元)的處理器,簡稱TPU。在這個月看來,第一代的TPU處理器已經過時。
在昨天凌晨舉行的谷歌I/O 2017大會上,谷歌除了宣傳了安卓8.0之外,更為重要的是著重談到了人工智能,于是第二代TPU也就應運而生。TPU是谷歌自主研發的一種轉為AI運算服務的高性能處理器,其第一代產品已經在AlphaGo這樣的人工智能當中使用,主攻運算性能。
第二代TPU相比較于初代主要是加深了人工智能在學習和推理方面的能力,至于性能的話,全新的谷歌TPU可以達到180 TFLOPs的浮點性能,和傳統的GPU相比提升15倍,更是CPU浮點性能的30倍。
另外谷歌還推出了一款叫做TPU pod的運算陣列,最多可以包含64顆二代TPU,也就是說浮點性能可以達到驚人的11.5 PFLOPS。
從名字上我們可以看出,TPU的靈感來源于Google開源深度學習框架Tensor Flow,所以目前TPU還是只在Google內部使用的一種芯片。
TPU 誕生
2011年,Google 意識到他們遇到了問題。他們開始認真考慮使用深度學習網絡了,這些網絡運算需求高,令他們的計算資源變得緊張。Google 做了一筆計算,如果每位用戶每天使用3分鐘他們提供的基于深度學習語音識別模型的語音搜索服務,他們就必須把現有的數據中心擴大兩倍。他們需要更強大、更高效的處理芯片。
他們需要什么樣的芯片呢?中央處理器(CPU)能夠非常高效地處理各種計算任務。但 CPU 的局限是一次只能處理相對來說很少量的任務。另一方面,圖像處理單元(GPU)在執行單個任務時效率較低,而且所能處理的任務范圍更小。不過,GPU 的強大之處在于它們能夠同時執行許多任務。例如,如果你需要乘3個浮點數,CPU 會強過 GPU;但如果你需要做100萬次3個浮點數的乘法,那么 GPU 會碾壓 CPU。
GPU 是理想的深度學習芯片,因為復雜的深度學習網絡需要同時進行數百萬次計算。Google 使用 Nvidia GPU,但這還不夠,他們想要更快的速度。他們需要更高效的芯片。單個 GPU 耗能不會很大,但是如果 Google 的數百萬臺服務器日夜不停地運行,那么耗能會變成一個嚴重問題。
谷歌決定自己造更高效的芯片。
2016年5月,谷歌在I/O大會上首次公布了TPU(張量處理單元),并且稱這款芯片已經在谷歌數據中心使用了一年之久,李世石大戰 AlphaGo 時,TPU 也在應用之中,并且谷歌將 TPU 稱之為 AlphaGo 擊敗李世石的“秘密武器”。
第一代TPU內部架構
該圖顯示了TPU上的內部結構,除了外掛的DDR3內存,左側是主機界面。指令從主機發送到隊列中(沒有循環)。這些激活控制邏輯可以根據指令多次運行相同的指令。
TPU并非一款復雜的硬件,它看起來像是雷達應用的信號處理引擎,而不是標準的X86衍生架構。Jouppi說,盡管它有眾多的矩陣乘法單元,但是它GPU更精于浮點單元的協處理。另外,需要注意的是,TPU沒有任何存儲的程序,它可以直接從主機發送指令。
TPU上的DRAM作為一個單元并行運行,因為需要獲取更多的權重以饋送到矩陣乘法單元(算下來,吞吐量達到了64,000)。Jouppi并沒有提到是他們是如何縮放(systolic)數據流的,但他表示,使用主機軟件加速器都將成為瓶頸。
256×256陣列縮放數據流引擎,經過矩陣乘法積累后實現非線性輸出
從第二張圖片可以看出,TPU有兩個內存單元,以及一個用于模型中參數的外部DDR3 DRAM。參數進來后,可從頂部加載到矩陣乘法單元中。同時,可以從左邊加載激活(或從“神經元”輸出)。那些以收縮的方式進入矩陣單元以產生矩陣乘法,它可以在每個周期中進行64,000次累加。
毋庸置疑,谷歌可能使用了一些新的技巧和技術來加快TPU的性能和效率。例如,使用高帶寬內存或混合3D內存。然而,谷歌的問題在于保持分布式硬件的一致性。