我們找到了一些資料,希望能夠解答為什么 TPU 運算速度比普通的 GPU、CPU 組合快 15-30 倍。同時,我們認為 Google 在 TPU 研發上的這些創新極有可能將成為 Inter、AMD 跟進同類硬件開發的標桿,并最終成為一種趨勢。
一、針對深度學習的定制化研發
TPU 是谷歌專門為加速深層神經網絡運算能力而研發的一款芯片,其實也是一款 ASIC。
ASIC,指依照產品需求不同而定制化的特殊規格集成電路,由特定使用者要求和特定電子系統的需要而設計、制造。一般來說,ASIC 在特定功能上進行了專項強化,可以根據需要進行復雜的設計,但相對來說,實現更高處理速度和更低能耗。相對應的,ASIC 的生產成本也非常高。
一般公司很難承擔為深度學習開發專門處理器 ASIC 芯片的成本和風險。首先為了性能必須使用最好的半導體制造工藝,而現在用最新的工藝制造芯片一次性成本就要幾百萬美元,非常貴。就算有錢,還需要拉一支隊伍從頭開始設計,設計時間往往要到一年以上,time to market 時間太長,風險很大。如果無法實現規模化的應用,就算開發成功也缺少實際使用價值。所以,企業一般傾向于采用通用性的芯片(如 CPU、GPU),或者半定制化芯片(FPGA)。
谷歌之所以敢自己做定制化研發,一方面自然是有錢任性,另一方面也由于谷歌提供的很多服務,包括谷歌圖像搜索(Google ImageSearch)、谷歌照片(Google Photo)、谷歌云視覺 API(Google Cloud Vision API)、谷歌翻譯等產品和服務都需要用到深度神經網絡。基于谷歌自身龐大的體量,開發一種專門的芯片開始具備規模化應用(大量分攤研發成本)的可能。
假如存在這樣一個場景,其中人們在 1 天中使用谷歌語音進行 3 分鐘搜索,并且我們要在正使用的處理器中為語音識別系統運行深度神經網絡,那么我們就不得不翻倍谷歌數據中心的數量。
我們的負載是用高級的 TensorFlow 框架編寫的,并是用了生產級的神經網絡應用(多層感知器、卷積神經網絡和 LSTM),這些應用占到了我們的數據中心的神經網絡推理計算需求的 95%。
表 1:6 種神經網絡應用(每種神經網絡類型各 2 種)占據了 TPU 負載的 95%。表中的列依次是各種神經網絡、代碼的行數、神經網絡中層的類型和數量(FC 是全連接層、Conv 是卷積層,Vector 是向量層,Pool 是池化層)以及 TPU 在 2016 年 7 月的應用普及程度。
相對于 CPU 和 GPU 的隨時間變化的優化方法(高速緩存、無序執行、多線程、多處理、預取……),這種 TPU 的確定性的執行模型(deterministic execution model)能更好地匹配我們的神經網絡應用的 99% 的響應時間需求,因為 CPU 和 GPU 更多的是幫助對吞吐量(throughout)進行平均,而非確保延遲性能。這些特性的缺失有助于解釋為什么盡管 TPU 有極大的 MAC 和大內存,但卻相對小和低功耗。
TPU 各模塊的框圖。主要計算部分是右上方的黃色矩陣乘法單元。其輸入是藍色的「權重 FIFO」和藍色的統一緩存(Unified Buffer(UB));輸出是藍色的累加器(Accumulators(Acc))。黃色的激活(Activation)單元在 Acc 中執行流向 UB 的非線性函數。
二、大規模片上內存
TPU 在芯片上使用了高達 24MB 的局部內存,6MB 的累加器內存以及用于與主控處理器進行對接的內存,總共占芯片面積的 37%(圖中藍色部分)。
這表示 Google 充分意識到片外內存訪問是 GPU 能效比低的罪魁禍首,因此不惜成本在芯片上放了巨大的內存。相比之下,Nvidia 同時期的 K80 只有 8MB 的片上內存,因此需要不斷地去訪問片外 DRAM。
TPU 芯片布局圖。藍色的數據緩存占芯片的 37%。黃色的計算是 30%。綠色的 I/O 是 10%。紅色的控制只有 2%。CPU 或 GPU 中的控制部分則要大很多(并且非常難以設計)。
三、低精度 (8-bit) 計算
TPU 的高性能還來源于對于低運算精度的容忍。
研究結果表明低精度運算帶來的算法準確率損失很小,但是在硬件實現上卻可以帶來巨大的便利,包括功耗更低速度更快占芯片面積更小的運算單元,更小的內存帶寬需求等。
這次公布的信息顯示,TPU 采用了 8-bit 的低精度運算。也就是說每一步操作 TPU 將會需要更少的晶體管。在晶體管總容量不變的情況下,每單位時間可以在這些晶體管上運行更多的操作,這樣就能夠以更快的速度通過使用更加復雜與強大的機器學習算法得到更加智能的結果。
在 Google 的測試中,使用 64 位浮點數學運算器的 18 核心運行在 2.3 GHz 的 Haswell XeonE5-2699 v3 處理器能夠處理每秒 1.3 TOPS 的運算,并提供 51GB / 秒的內存帶寬;Haswell 芯片功耗為 145 瓦,其系統(擁有 256 GB 內存)滿載時消耗 455 瓦特。相比之下,TPU 使用 8 位整數數學運算器,擁有 256GB 的主機內存以及 32GB 的內存,能夠實現 34GB / 秒的內存帶寬,處理速度高達 92 TOPS ,這比 Haswell 提升了 71 倍,此外,TPU 服務器的熱功率只有 384 瓦。
四、脈動式數據流
對于 GPU,從存儲器中取指令與數據將耗費大量的時間。TPU 甚至沒有取命令的動作,而是主處理器提供給它當前的指令,而 TPU 根據目前的指令做相應操作,這使得 TPU 能夠實現更高的計算效率。
在矩陣乘法和卷積運算中,許多數據是可以復用的,同一個數據需要和許多不同的權重相乘并累加以獲得最后結果。因此,在不同的時刻,數據輸入中往往只有一兩個新數據需要從外面取,其他的數據只是上一個時刻數據的移位。
在這種情況下,把片上內存的數據全部 Flush 再去取新的數據無疑是非常低效的。根據這個計算特性,TPU 加入了脈動式數據流的支持,每個時鐘周期數據移位,并取回一個新數據。這樣做可以最大化數據復用,并減小內存訪問次數,在降低內存帶寬壓力的同時也減小了內存訪問的能量消耗。
五、散熱功能強化
對于性能來說,限制處理器速度的最大兩個因素是發熱與邏輯門的延遲,其中發熱是限制速度最主要的因素。現在的處理器大部分使用的是 CMOS 技術,每一個時鐘周期都會產生能量耗散,所以速度越快,熱量就越大。下面是一張 CPU 時鐘頻率與能量消耗的關系,可以看到,芯片能耗隨運算速度變化呈現指數級增長。
TPU 在降低功耗的同時,對于散熱能力也做了進一步的優化。從 TPU 的外觀圖可以看出,其中間突出一塊很大的金屬片,這便是為了可以很好地對 TPU 高速運算是產生大量的熱進行耗散。
六、硬件、軟件持續優化
谷歌認為現在的 TPU 仍在硬件和軟件方面存在很大的優化空間,比如假定用上了 NVIDIA K80 GPU 中的 GDDR5 內存,那么 TPU 就可以發揮出更好的性能。
此外,谷歌工程師還為 TPU 開發了名為 CNN1 的軟件,其可以讓 TPU 的運行速度比普通 CPU 高出 70 多倍!