淘新聞

為什麼 TPU 運算速度比普通的 GPU、CPU 組合快 15-30 倍?

我們找到了一些資料,希望能夠解答為什麼 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 多倍!

版權申明:本文由智慧思特大資料編輯整理,雷鋒網獲得授權轉載。