本月早些時間谷歌進一步披露了更多關于一年前發布的TPU的細節。TPU項目和團隊的高級架構師Norm Jouppi表示,與Nvidia K80和Haswell E5-2699 V3等主流高性能處理器相比,使用TPU執行神經網絡計算可以獲得成數量級的性能增益。Jouppi說:
“據估計TPU會比K80 GPU和Haswell CPU快大概15倍到30倍……在6個神經網絡用例中,有4個在TPU上是內存或帶寬受限的,假如讓TPU使用和K80 GPU一樣的內存系統,那它就可以比GPU和CPU快30到50倍……在一個標準的效率指標功耗效率比(TOPS/Watt)測試中,TPU的測試結果也比傳統處理器高30到80倍。”
最早定制ASIC的動機來自于使用谷歌翻譯API的計算需求,注意,假設這個地球上的每臺手機每天都使用谷歌翻譯API三分鐘,那就得多搭建好幾十個數據中心。
架構白皮書上記錄了把K80和E5-2699作為計算核心進行一定范圍內的神經網絡計算時,相應的實驗設計、數據收集和分析等細節。TPU現在不是用于訓練神經網絡的。它最早就是用作矩陣乘法器,通過矩陣乘法器、板載內存和緩存系統一起,實現神經網絡的多層功能。其中包括在各層之間保存感知器的輸出和狀態等,這些在MLP和CNN等內部都廣為使用。
但TPU并不僅僅限于神經網絡的實現,它是通用的,它的架構是基于Jouppi和團隊研究的全面用例的。這么做的部分動機就是要支持TPU的按時交付,還有必要的靈活性來優化矩陣浮點運算,而這也是芯片要執行的最基本的運算操作。而把TPU和包含了應用程序所需的其它部件的CPU/GPU架構結合起來很方便,只需要用上PCIe總線就好了。
這樣的架構讓CPU/GPU可以在神經網絡的計算之外執行訓練或TensorFlow程序的任意部分。比如程序要提前加載數據,或者要把指令輸入TensorFlow運行等等,這些都要由CPU/GPU管理并發給TPU。從這方面看,TPU非常像顯卡或FPU。
“TPU像CPU或GPU一樣都是可編程的。它并不專為某個神經網絡模型設計,可以在多種網絡上執行CISC指令(卷積、LSTM模型、大型全連接模型等)。所以它是可編程的,但使用矩陣作為原語,而不是向量或標量。”
就像CPU和GPU架構的時變優化特性一樣,TPU具有確定性的特性,在功耗效率比的測試中TPU優于基準芯片及每秒千萬億次的超級計算機。據測試數據來看,TPU在功耗效率比的測試中性能超出一般處理器30到80倍。
“與K80 GPU的32位浮點運算相比,TPU使用的是8位收縮矩陣乘法器,消耗的能量少了幾個數量級,壓縮了25倍的MAC(65536 8位對2496 32位)和3.5倍的板上內存(28MB對8MB)。更大的內存有助于增加應用程序的操作強度,讓它們可以更充分地使用額外的MAC……商業產品在計算架構上很少出現數量級的差別,因此TPU可能會成為專用領域架構的一個原型。”
作為實驗設計研究階段的一部分,Jouppie和團隊在谷歌的平臺上研究了神經網絡的使用,他們發現了更多關于時間敏感型應用的需求,而不是關于他們最初設想的吞吐量敏感型應用,這讓他們意識到,對大量廉價資源的適當使用仍然可以得到性價比很高的高性能,這也符合阿姆達爾定律。
TPU實驗涉及六種神經網絡:MLP、CNN和LSTM各兩種。MLP和LSTM都是內存受限型的,因此調整實驗的內存和帶寬排列對性能的影響非常大。這可能要歸因于MLP和CNN會重用前層的權重,而且也會在一定程度上重用前層的輸出。另一方面,LSTM會在各個時間步長重用權重,但只會選擇性地使用前層的輸出,這樣就會不受限于內存,更多地是受限于計算能力。這一點在考察TPU使用的PCIe總線IO帶寬時也適用。
經過15個月多的開發周期,以及在假設以TPU為核心的架構上對內存和緩存的改進,Jouppie和團隊聲稱他們已經獲得了比K80和E5-2699性能高30到50倍的成績。
閱讀英文原文:TensorFlow Processor Unit Architecture