為什麼 AI 晶元時代必然到來——從TPU開始的幾十倍性能之旅
雷鋒網 AI 科技評論按:ACM 通訊(ACM Communications)在線雜誌近期刊登了一篇作者來自谷歌的文章,帶領我們重新審視了近幾十年的半導體發展歷程,以及 AI 研究、應用人員們如今已經接受了的問題:專用處理器為什麼好、為什麼火起來。值得注意的是,這篇文章的作者之一正是谷歌 TPU 團隊成員、UC 伯克利大學退休教授、2017 年圖靈獎獲得者 David Patterson。雷鋒網 AI 科技評論全文編譯如下。
裝滿了 TPU 的谷歌雲伺服器機架
摩爾定律的終結將使服務於特定領域的架構成為計算的未來。一個開創性的例子就是谷歌在 2015 年推出的張量處理單元(TPU),目前已經在為超過十億人提供服務。TPU 使深度神經網路(DNN)的計算速度提高了 15-30 倍,能耗效率比類似技術下的當代 CPU 和 GPU 高出了 30-80 倍。
核心觀點
雖然 TPU 是一種專用集成電路,但它運行的程序來自 TensorFlow 框架下的神經網路,驅動了谷歌數據中心的許多重要應用,包括圖像識別、翻譯、搜索和遊戲。
通過專門為神經網路重新分配晶元計算資源,TPU 在真實數據中心負載環境下效率要比通用類型的計算機高 30-80 倍,目前已為全球 10 億人提供日常服務。
神經網路的推理階段通常會有嚴格的響應時間要求,這降低了通用計算機所使用技術的有效性;通用計算機通常運行得較快,但某些情況下也會較慢。
所有指數增長都將有結尾
1965 年,據英特爾創始人之一的 Gordon Moore 預測,晶元中的晶體管數量每一兩年都會增加一倍。儘管 2017 年 1 月的 ACM 通訊封面呼籲道:「擔心我會終結簡直是杞人憂天」,摩爾定律確實還是壽終正寢了。2014 年推出的 DRAM 晶元包含了 80 億個晶體管,而在人們的預測中即使到了 2019 年,帶有 160 億個晶體管的 DRAM 晶元也不會大規模生產,但根據摩爾定律的預測,四年里晶體管數量應該變成四倍多。2010 年款的英特爾至強 E5 處理器擁有 23 億個晶體管,而 2016 年的至強 E5 也只有 72 億個晶體管,或者說比摩爾定律預計的數值低 2.5 倍——顯然,縱使半導體行業還在進步,但其腳步已十分緩慢。
Dennard Scaling 是一個鮮為人知,但同樣重要的觀察結果。Robert Dennard 在 1974 年認為,晶體管不斷變小,但晶元的功率密度不變。如果晶體管尺寸線性縮小兩倍,那麼同樣面積上晶元中晶體管的數量就會變為 4 倍。同時,如果電流和電壓都降低了二分之一,它所使用的功率將下降 4 倍,在相同的頻率下提供相同的功率。Dennard Scaling 在被發現的 30 年後結束,其原因並不是因為晶體管的尺寸不再縮小,而是因為電流和電壓不能在繼續下降的同時保持可靠性了。
計算架構師們一直篤定摩爾定律和 Dennard Scaling,並通過複雜的處理器設計和內存層次結構,將資源轉化為性能,這些設計利用了不同的處理指令的之間的並行性,但架構師們並沒有什麼編程的知識。ε=(′ο`*))) 唉,於是架構師們最終還是再也找不到新的辦法可以利用指令級別的並行性。Dennard Scaling在 2004 年終結了,禍不單行的是繼續提升指令級別並行性的方法也開始缺席,這迫使業界只能從單核高耗能處理器轉換到多核高效率處理器。
今天我們仍然遵守吉恩·阿姆達爾(IBM 著名工程師,阿姆達爾定律的提出者)在 1967 年提出的定律,該定律認為不斷增加處理器數量會導致性能提升的遞減。阿姆達爾定律說,並行計算的理論加速受到任務順序部分的限制;如果任務的 1/8 是串列的,則最大加速也只比原始性能高 8 倍——即使任務的其餘部分很容易並行,並且架構師增加了 100 個處理器也是如此。
下圖顯示了過去四十年以來,上述三大定律對處理器性能的影響。按照目前的速度,標準處理器的性能在 2038 年以前都不會再次翻倍。
圖 1. 依照Hennessy和Patterson的理論,我們繪製了過去40年中,32位和64位處理器內核每年最高的SPECCPUint性能;面向吞吐量的SPECCPUint_rate反映了類似的情況,即使其平穩期延遲了幾年
晶體管看來沒什麼進步空間了(這反映了摩爾定律的結束),而每平方毫米晶元面積的功耗正在增加(畢竟 Dennard Scaling 也結束了),但人們對於晶元的功率預算卻並沒有增加(因為電子的移動、機械和發熱限制),晶元設計師們已經在充分發揮多核心的能力了(但這也受到阿姆達爾定律的限制),架構師們現在普遍認為,能顯著改進性能、價格、能源三者平衡的唯一途徑就是特定領域的架構——它們只適用於處理幾種特定的任務,但效率非常高。
在雲端的大型數據集和大量計算機之間的協作使得機器學習近年來有了很大的進步,特別是在深度神經網路(DNN)方面。與一些其他領域不同,DNN 的應用方式很廣泛。DNN 的突破性進展包括將語音識別的單詞錯誤率相比老方法降低了 30%,這是近 20 年來最大的單次提升;自 2011 年以來,將圖像識別的錯誤率從 26% 降低至 3.5%;在圍棋上擊敗了人類世界冠軍;改進了搜索排名等等。單個 DNN 架構或許應用範圍很窄,但這種方法仍然催生出了大量實際應用。
神經網路類似於人腦中神經的功能,基於簡單的人工神經元,它們是輸入的加權和的非線性函數,例如 max(0,value)。這些人工神經元被分為許多不同的層,其中一層的輸出就會作為下一層的輸入。深度神經網路中的「深層」代表有多個層,由於雲上有極大的數據集,只需換用更大、更多的層就可以構建出更準確的模型,它也就可以獲取更高階抽象的模式或是概念,而 GPU 可以提供足夠的計算能力幫我們開發 DNN。
DNN 運行的兩個階段被稱為訓練(或學習)和推理(或預測),分別指代開發與生產。訓練一個 DNN 可能需要數天,但訓練好的 DNN 進行推理只需要幾毫秒。針對不同的應用,開發者需要選擇神經網路的類型和層數,而訓練過程會決定網路中的權重。幾乎所有的訓練都是浮點運算,這就是 GPU 在深度學習時代如此受歡迎的原因之一。
被稱為「量化」的轉換將浮點型轉為整型,整型通常只有 8 位——這種程度通常足以滿足推理的要求了。與 IEEE 754 16 位浮點乘法相比,8 位整型乘法只需要 1/6 的能耗,需要的空間也只需要 1/6,而轉換為整型加法也能帶來 13 倍能耗和 38 倍空間的提升。
下表展示了兩個例子,共三類、六個 DNN 實例的運行效率——這代表了谷歌數據中心 2016 年 95% 的深度神經網路推理工作負載,我們把它們作為 benchmark。它們在 TensorFlow 中的代碼都非常短,只有 100-1500 行。這些例子是主伺服器上運行較大應用程序中的小組件,這些大應用可能會由數千到數百萬行 C++代碼構成。應用程序通常面向用戶,這就對響應時間帶來了嚴格的要求。
表 1. 2016年7月,谷歌TPU上的DNN工作負載。共六種DNN應用(三種DNN類型),代表95%的TPU工作負載
如表 1 所示,每個模型需要 500 萬至 1 億個權重,即便只是訪問這些權重都需要花費大量時間和能耗。為了降低訪問成本,在訓練或者推理中會針對一批完全不相干的輸入樣本都使用同樣的權重,這種做法可以提高性能。
TPU 起源、架構及實現
早在 2006 年,谷歌就開始考慮在其數據中心部署 GPU(圖形處理器),或者 FPGA (field programmable gate array,現場可編程門陣列),或者專用集成電路(ASIC)。當時的結論是,能在專門的硬體上運行的應用並不多,它們使用谷歌大型數據中心的富餘計算能力即可,基本可以看做是免費的,另外也很難不怎麼花錢就帶來很大改進。情況在 2013 年出現了變化,當時谷歌用戶每天使用語音識別 DNN 語音搜索三分鐘,使得谷歌數據中心的計算需求增加了一倍,而如果使用傳統的 CPU 將非常昂貴。因此,谷歌啟動了一項優先順序別非常高的項目,快速生產一款定製晶元用於推理,併購買現成的 GPU 用於訓練。谷歌的目標是將性價比提高 10 倍。為了完成這項任務,谷歌在其數據中心設計、驗證、構建並部署了 TPU,而這一過程僅僅用了 15 個月。
為了降低部署推遲的風險,谷歌工程師將 TPU 設計成 I/O 匯流排上的協處理器,並允許它像 GPU 一樣插入現有伺服器,而不是使 TPU 與 CPU 緊密集成。此外,為了簡化硬體設計和調試,主機伺服器將指令發送給 TPU 令其執行,而不是讓 TPU 去自行獲取。因此,TPU 在理念上更接近浮點單元(FPU)協處理器,而不是 GPU。
谷歌工程師將 TPU 看做一個系統進行優化。為了減少與主機 CPU 的交互,TPU 運行整個推理模型,但提供了與 2015 年及以後的 DNN 相匹配的靈活性,而不局限於 2013 年的 DNN。
圖 2:TPU 的架構示意圖。TPU 指令通過 PCI-e Gen3x16 匯流排從主機被發送到指令緩衝器中。內部計算模塊通常通過 256 位元組寬度的路徑連接在一起。對於右側的晶元布局圖,從右上角開始,矩陣乘法單元是 TPU 的核心,256×256 MAC 可以對有符號或無符號的整型執行 8 位乘法和加法運算。得到的 16 位的結果會存入矩陣計算單元下方的共 4MB 空間的 32 位累加器中。這四個 MiB 代表含有 4,096 個 256 元素的 32 位累加器。矩陣計算單元每周期產生一個 256 元素的部分和。
圖 2. TPU架構示意圖及晶元布局圖
矩陣單元的權重通過片內「權重 FIFO」來分級,該 FIFO 從我們稱之為「權重存儲器」的片外 8GB DRAM 中讀取;對於推理,權重僅作讀取;8GB 空間可以支持同時激活多個模型。權重 FIFO 有四層深。中間結果保存在 24MiB 的片上「統一緩衝器」中,可以作為矩陣計算單元的輸入。可編程 DMA 控制器會z z哎CPU 主機存儲器和統一緩衝器間傳送數據。為了能在谷歌的規模上可靠地部署,內存儲器和外存儲器包含內置錯誤檢查與糾正硬體。
TPU 微架構的原理是保持矩陣計算單元一直在工作中。為了實現這一目標,讀取權重的指令遵循解耦訪問/執行原理,它可以在發送權重的地址之後、但從權重存儲器中取出權重之前完成一條指令。如果輸入激活或權重數據沒有準備好,矩陣計算單元將停止。
由於讀取大型靜態隨機存取存儲器(Static Random-Access Memory,SRAM)消耗的能源比數學運算多得多,矩陣單元使用「脈動執行」通過減少統一緩衝器的讀寫來節約能量。來自不同方向的數據以規律的間隔到達陣列中的單元,然後進行組合計算。一個含有 65,536 個元素的向量-矩陣乘法運算作為對角波前在矩陣中移動。這些權重被預載入,並隨著新數據塊的第一個數據一起隨著前進波生效。控制和數據被流水線化,給程序員一種錯覺,彷彿 256 個輸入是一次讀取的,並立即更新 256 個累加器中每個累加器的一個位置。從正確性的角度來看,軟體不了解矩陣單元的脈動特性,但為了提高性能,必須考慮單元的延遲。
TPU 軟體棧必須與為 CPU 和 GPU 開發的軟體棧兼容,這樣應用可以快速移植到 TPU 上。在 TPU 上運行的應用部分通常用 TensorFlow 編寫,並編譯成可以在 GPU 或 TPU 上運行的 API。
CPU、GPU、TPU 平台
多數體系架構研究的論文基於運行小型、易於移植的基準測試模擬,這些基準測試可以預測潛在的性能(如果實現的話)。本文與上述論文不同,是對 2015 年以來數據中心運行真實、大型生產工作負載的機器進行回顧性評估,其中一些機器的日常用戶超過 10 億。表 1 中列出的六種應用代表了 2016 年 TPU 數據中心 95% 的使用。
由於測量的是生產環境的負載,要比較的基準平台必須可以在 Google 數據中心部署,因為生產環境的計算負載也就只能在這裡運算。谷歌數據中心的很多伺服器和谷歌規模對應用程序可靠性的要求意味著機器必須至少檢查內存錯誤。由於英偉達 Maxwell GPU 和最近的 Pascal P40 GPU 不檢查內部存儲中的錯誤,以谷歌的規模部署這些處理器、同時還滿足谷歌應用程序的嚴格可靠性要求是做不到的。
表 2 顯示了部署在谷歌數據中心的伺服器,可以將其與 TPU 進行比較。傳統的 CPU 伺服器以英特爾的 18 核雙插槽 Haswell 處理器為代表,該平台也是 GPU 或 TPU 的主機伺服器。谷歌工程師在伺服器中使用了四個 TPU 晶元。
表 2. 基準測試的服務使用Haswell CPU、K80 GPU及TPU
很多計算機架構師沒有考慮到從產品發布到晶元、主板、軟體可以服務於數據中心的用戶之間的時間差。表3指出,2014 年至 2017 年間,商業雲公司的 GPU 時間差為 5 至 25 個月。因此,當時適合與 2015 年投入使用的 TPU 的做對比的 GPU 顯然是英偉達 K80,後者處於相同的半導體工藝中,並在 TPU 部署前六個月發布。
表 3.2015年到2017年,英偉達GPU從發布到雲端部署的時間差距,這4代GPU分別為Kepler、Maxwell、Pascal和Volta架構
每個 K80 卡包含兩塊矽片,並提供內部存儲器和 DRAM 的錯誤檢測和糾錯功能。這種伺服器中最多可安裝 8 個 K80 矽片,這也是我們基準測試的配置。CPU 和 GPU 都使用大型晶元:大約 600 mm2的晶元面積,大約是英特爾 Core i7 的三倍。
性能:Roofline、響應時間、吞吐量
為了說明這六種應用在三類處理器上的性能,我們使用了高性能計算機群(HPC)的 Roofline 性能模型。這一簡單的視覺模型雖然不完美,但揭示了性能瓶頸出現的原因。該模型背後的假設是應用需求的計算無法完全裝入片上緩存,因此它們要麼計算受限,要麼內存帶寬受限。對於 HPC,y 軸表示每秒浮點運算性能(單位是 FLOPS),因此峰值計算率形成了 roofline 圖的「平緩」區。x 軸表示運算密度(operational intensity),單位是 FLOPS/byte。內存帶寬表示每秒多少比特,形成了 roofline 的「傾斜」部分,因為 (FLOPS/sec)/ (FLOPS/Byte) = Bytes/sec。沒有充足的運算密度時,程序受限於內存帶寬,性能只能在 roofline 的「傾斜」部分之下。
一個應用的每秒實際計算量與其天花板計算量之間的距離代表了保持運算密度不變時性能提升的潛力;提升運算密度的優化(如緩存分塊)可能帶來更大的性能提升。
為了在 TPU 上使用 Roofline 模型,當DNN應用被量化時,我們首先將浮點運算替換成整數運算。由於 DNN 應用的權重通常無法裝入片上內存,因此第二個改變就是將運算密度重新定義為每讀取 1 位元組的權重值時的整數乘積累加運算操作數目,如表1所示。
圖 3 展示了單個 TPU、CPU 和 GPU 矽片以 Roofline 模型評估的性能指標,圖中是指數坐標。TPU 的 Roofline 模型「傾斜」部分較長,從計算密度角度考慮,這意味著性能更多地受限於內存帶寬,而不是計算能力峰值。六個應用中有五個都接近天花板,MLP 和 LSTM 受限於內存,CNN 受限於計算。
圖 3:TPU、CPU和GPU在 Roofline 模型上的性能表現。五角星表示TPU,三角形表示英偉達Tesla K80 GPU,圓表示英特爾酷睿處理器(Haswell);所有TPU五角星都與其他兩種晶元的 Roofline 模型持平或在後者之上
如圖 3 所示,在 Haswell 以及 K80 上,這六個 DNN 應用距離 Roofline 天花板的距離都大於 TPU 上的距離。響應時間是原因所在。這些應用中的很多個是面向終端用戶服務的一部分。研究表明,即使響應時間的些微增加都會導致用戶使用該服務的頻率降低。訓練可能沒有苛刻的響應時間 deadline,但推理通常有,或者說相比於選擇更大吞吐量,推理任務更偏好低延遲。
例如,按照應用開發者的要求,MLP0 應用要求在 99% 的時間內響應時間不大於 7ms。(每秒完成推理的數目要求和 7ms 的延遲要求中包括伺服器主機時間和加速器時間)即便對響應時間的限制放寬一些,Haswell 和 K80 運行時也分別只能達到 MLP0 應用最高吞吐量的 42% 和 37%。這些限制也會影響到TPU,它會以 80% 的吞吐量來運行,更加接近 TPU 的 MLP0 最大吞吐量。與 CPU 和 GPU 相比,單線程 TPU 沒有複雜的微架構特徵,也就不需要為平均狀況而消耗晶體管和功率來提高性能,它直接適用於 99% 的狀況,即 TPU 沒有緩存、分支預測、亂序執行、多處理、推測預讀、地址合併、多線程、上下文切等等。極簡是領域專用處理器的優勢。
表 4 顯示了每個晶元的相對推理性能底線,包括兩個加速器 vs. CPU 的主機伺服器開銷,展示了這六個 DNN 應用相對性能的加權平均值,表明 K80 晶元速度是 Haswell 的 1.9 倍,TPU 晶元速度是 Haswell 的 29.2 倍,TPU 晶元速度也就是 GPU 的 15.3 倍。
表 4:在 DNN 工作負載下 K80 GPU 晶元和 TPU 晶元與 CPU 的性能比。加權平均值使用了表 1 中六個 app 的實際混合
性價比、全周期成本(TCO)、性能/功耗
大批量購買計算機時會更多地考慮性價比而非性能。數據中心最好的成本指標是全周期成本(TCO)。一個組織(如谷歌)購買數千張晶元時所支付的實際價格取決於與相關企業的談判溝通。由於涉及商業機密,我們無法公開此類價格信息或數據。但是,功率與 TCO 相關,我們可以公開每台伺服器的功耗數,因此這裡我們使用性能/功耗比代替性能/TCO 比。這部分我們對比了整個伺服器而不是單個晶元。
圖 4 顯示了 K80 GPU 和 TPU 相對於 Haswell CPU 的平均性能/功耗比。我們給出了兩種不同的性能/功耗比計算。我們展示了兩種不同的性能/功耗計算方法。第一種「total」包括計算 GPU 和 TPU 的性能/功耗時主機 CPU 伺服器所消耗的功率;第二種「incremental」從 GPU 和 TPU 中減去了主機 CPU 伺服器所消耗的功率。
圖 4:GPU 伺服器與 CPU 伺服器的性能/功耗對比(藍色條)、TPU 伺服器與 CPU 伺服器的功耗對比(紅色條)、TPU 伺服器與 GPU 伺服器的功耗對比(橙色條)。TPU" 是使用 K80 的 GDDR5 內存將 TPU 進行改進後的晶元
對於總性能/瓦特,K80 伺服器是 Haswell 的2.1倍。 對於增量性能/瓦特,當忽略 Haswell 伺服器電源時,K80 伺服器是 Haswell 的 2.9 倍。TPU 伺服器的總性能/瓦特比 Haswell 要高出34倍,TPU 伺服器的性能/功率也就是 K80 伺服器的 16 倍。 對於 TPU 來說,相比 CPU 的相對增量性能/瓦特以谷歌設計 ASIC 的水平已經做到了 83 倍,同時也就是 GPU 的性能/瓦特的29倍。
對替代性 TPU 設計的評估
和 FPU 類似,TPU 協同處理器比較容易評估,因此我們為六個應用創建了一個性能模型。模型模擬的結果和硬體實際性能的平均差距小於 10%。
我們使用性能模型評估了另一款假想的 TPU 晶元,記為 TPU"(使用同樣的半導體技術再多花 15 個月我們就能設計出這款晶元)。更激進的邏輯合成和模塊設計可以把時鐘頻率再提高 50%;為 GDDR5 內存設計介面電路(就像 K80 那樣)可以將權重讀取的內存帶寬提高四倍,將 roofline 從斜到平的拐點從 1350 降到 250。
單獨將時鐘頻率提高到 1,050 MHz 而不改善內存的話,性能提升非常有限。如果我們把時鐘頻率保持在 700MHz,但改用 GDDR5 作為內存,則加權平均值飛躍至 3.9倍。同時做這兩種措施其實並不會改變性能,因此假設的 TPU" 只具備更快的內存就夠了。
將 DDR3 權重內存替換成與 K80 相同 GDDR5 內存需要將內存通道的數量翻一倍,即 4 個通道。這一改進會需要將晶元面積擴大約 10%。GDDR5 還需要將 TPU 系統的功率預算從 861W 提高到 900W 左右,因為每台伺服器都有四個 TPU。
從圖4可看出,TPU"的總體每矽片性能/功耗是 Haswell 的 86 倍,K80 的 41 倍。其 incremental 指標是 Haswell 的 196 倍,K80 的 68 倍。
討論
這部分按照 Hennessy 和 Patterson 的謬誤-陷阱-反駁格式來展開:
謬誤:數據中心的 DNN 推斷應用將吞吐量和響應時間處於同等重要的地位。我們驚訝於谷歌 TPU 開發者對響應時間有這麼高的要求,2014 年有人透露說的是:對於 TPU 來說,批量大小應該足夠大,以到達 TPU 的計算性能峰值,對延遲的要求不用那麼苛刻。一個起到推動作用的應用是離線圖像處理,谷歌開發者的直覺是,如果互動式服務也需要 TPU,則大部分服務需要累積足夠大的批量然後才交給 TPU 計算。即使 2014 年穀歌關注響應時間(LSTM1)的應用開發者稱,2014 年的限制是 10ms,而真正向 TPU 移植時 10ms 將被減少至 7ms。很多此類服務對 TPU 的意料之外的要求,以及它們對快速響應時間的影響和偏好,改變了這個等式。應用編寫者通常會選擇降低延遲,而不是累積更大的批量。幸運的是,TPU 具備一個簡單、可重複的執行模型,來滿足互動式服務的低響應時間以及高峰值吞吐量要求,即便是計算相對較小的批量時也比當前 CPU 和 GPU 具備更好的性能。
謬誤:K80 GPU 架構很適合進行 DNN 推理。我們發現 TPU 在性能、能耗和成本方面優於 K80 GPU 有五個方面的原因。1、TPU 只有一個處理器,而 K80 有 13 個,單線程當然更容易滿足嚴格的延遲目標。2、TPU 具備一個非常大的二維乘法單元,GPU 有 13 個小的一維乘法單元。DNN 的矩陣相乘密度適合二維陣列中的算術邏輯運算單元。3、二維陣列還能通過避免訪問寄存器來促成脈動式的晶元實現,節約能源。4、TPU 的量化應用使用 8 位整型,而不是 GPU 的 32 位浮點; K80 並不支持 8 位整型。使用更小的數據,改善的不僅是計算能耗,還能四倍化權重 FIFO 的有效容量和權重內存的有效帶寬。(儘管推理時使用的是 8 位整型,但訓練這些應用時會保證和使用浮點一樣的準確率)5、TPU 忽略 GPU 需要而 DNN 不需要的特徵,從而縮小 TPU 晶元、節約能耗、為其他改進留下空間。TPU 晶元的大小几乎是 K80 的一半,通常運行所需能量是後者的三分之一,而它的內存卻是後者的 3.5 倍。這五個因素導致 TPU 在能耗和性能方面優於 K80 GPU 30 倍。
陷阱:在設計領域專用架構時不顧架構歷史。不適用通用計算的想法可能適合領域專用架構。對於 TPU 而言,三個重要的架構特徵可以追溯到 1980 年代早期:脈動陣列(systolic array)、解耦訪問/執行(decoupled access/execute)和複雜的指令集。第一個特徵減少了大型矩陣相乘單元的面積和能耗;第二個特徵在矩陣相乘單元運算期間並行獲取權重;第三個特徵更好地利用 PCIe bus 的有限帶寬來發送指令。因此,對計算機架構歷史比較了解的領域專用架構設計師具備競爭優勢。
謬誤:如果谷歌對 CPU 的使用更加高效,它得到的結果將可以媲美 TPU。由於有效使用 CPU 的高級向量擴展(AVX2)對整型計算做高效的支持需要大量工作,最初在 CPU 上只有一個 DNN 有 8 位整型的性能測試結果,它的性能提升大約是 3.5 倍。所有的 CPU 性能評估都基於浮點的計算性能來展示會更明確(也不會佔太多圖表空間),也就沒有給這個整型計算結果繪製單獨的 Roofline 圖。如果所有 DNN 都能夠得到類似的加速,TPU 帶來的性能/功耗比提升將分別從 41 倍和 83 倍降為 12 倍和 24 倍。
謬誤:如果谷歌使用合適的新版本,GPU 結果將與 TPU 差不多。表 3 報告了發布 GPU 和客戶何時可以在雲中使用 GPU 的區別。與較新的 GPU 進行公平比較將包括新的 TPU,而對於額外增加的 10W 功耗,我們只需使用 K80 的 GDDR5 內存就可以將 28 納米、0.7GHz、40W TPU 的性能提高三倍。把 TPU 移動到 16 納米工藝將進一步提高其性能/功耗。16 納米英偉達 Pascal P40 GPU 的峰值性能是第一代TPU 的一半,但它 250 瓦的能耗卻是原來的很多倍。如前所述,缺乏錯誤檢測意味著 Google 無法再去數據中心部署 P40,因此無法在它們身上運行生產工作負載來確定其實際相對性能。
相關研究
兩篇介紹 DNN ASIC 的研究文章至少可以追溯到 20 世紀 90 年代初。如 2016 年的 ACM 通訊中所述,DianNao 家族有四種 DNN 架構,通過對 DNN 應用程序中的內存訪問模式提供有效的架構支持,可以最大限度地減少片上和外部 DRAM 的內存訪問。最初的 DianNao 使用 64 個 16 位整數乘法累加單元的陣列。
谷歌 TPU 3.0 於今年 5 月推出,其功能是 TPU 2.0 的八倍,性能高達 100petaflops,晶元使用液體冷卻
為 DNN 設計特定領域架構仍然是計算機架構師的熱門話題,其中一個焦點是稀疏矩陣的計算架構,這是在 2015 年 TPU 首次部署之後提出的。Efficient Inference Engine(高效推理機)中有一步單獨的初始掃描,它會過濾去掉非常小的值,將權重數量減少到 1/10 左右,然後使用哈夫曼編碼進一步縮小數據以提高推理的性能。Cnvlutin 略去了激活輸入為零時的乘法運算,這種計算出現的幾率可以達到 44%,部分原因是非線性變換函數 ReLU 會把輸入的負值轉換為零;這種略去計算的做法使平均性能提高了 1.4 倍。Eyeriss 是一種新穎的低功耗數據流架構,通過遊程編碼利用數據中的零來減少內存佔用,並通過避免輸入為零時的計算來節省能耗。Minerva 是一種跨演算法、結構和電路學科的協同設計系統,通過量化數據以及對較小的激活函數剪枝的方式把功耗降低到原來的 1/8。這種系統在 2017 年展出的成果是 SCNN——一種稀疏和壓縮卷積神經網路的加速器。權重和激活函數都被壓縮在 DRAM 和內部緩衝器中,從而減少了數據傳輸所需的時間和能量,並允許晶元存儲更大的模型。
2016 年以來的另一個趨勢,是用於訓練的特定領域架構。例如,ScaleDeep 就是為 DNN 訓練和推理設計的高性能伺服器的一次嘗試,它包含數千個處理器。其中的每塊晶元都以 3:1 的比例包含計算專用模塊和存儲專用模塊,性能優於 GPU 6-28 倍。它支持 16 位或 32 位浮點計算。晶元通過與 DNN 通信模式匹配的高性能互連拓撲連接。和 SCNN 一樣,這種拓撲只在 CNN 上評估。2016 年,CNN 僅占谷歌數據中心 TPU 工作量的 5%。計算機架構師期待對其它類型的 DNN 和硬體實現進行 ScaleDeep 評估。
DNN 似乎是 FPGA 作為數據中心計算平台的一個良好用例。實際部署的一個例子是 Catapult。儘管 Catapult 是在 2014 年公開發布的,但它與 TPU 是同一個時代的,因為 2015 年在微軟數據中心部署了 28 納米 Stratix V FPGA,與谷歌部署 TPU 差不多在同一時間。Catapult 運行 CNN 比普通伺服器快 2.3 倍。也許 Catapult 和 TPU 最顯著的區別在於,為了獲得最佳性能,用戶必須使用低級硬體設計語言 Verilog 為 FPGA 編寫長程序,而不是使用高級 TensorFlow 框架編寫短程序;也就是說,「可再編程性」(re-programmability)來自於 TPU 的軟體,而不是最快 FPGA 的固件。
總結
儘管 TPU 在 I/O 匯流排上,並且內存帶寬相對有限限制了它發揮全部效能(六個 DNN 應用程序中有四個受限於內存),但一個很大的數即便拆到很細,拆到每個周期 65536 次乘法累加計算,仍然是一個相對較大的數字,如 roofline 性能模型所示。這個結果表明,Amdahl 定律的其實有一個非常有價值的推論——大量廉價資源的低效利用仍然可以提供頗具性價比的高性能。
我們了解到,推理應用具有嚴格的響應時間限制,因為它們通常是面向用戶的應用;因此,為 DNN 設計計算晶元的設計師們需要保證滿足 99% 情況下的時間限制要求。
TPU 晶元利用其在 MAC 和片上內存的優勢運行使用特定領域 TensorFlow 框架編寫的短程序,該 TensorFlow 框架比 K80 GPU 晶元快 15 倍,因此能獲得 29 倍的性能/功耗優勢,這與性能/總擁有成本相關。與 Haswell CPU 晶元相比,對應的比率分別為 29 和 83 倍。
有五個架構因素可以解釋這種性能差距:
處理器。TPU只有一個處理器,而K80有13個,CPU有18個;單線程使系統更容易保持在固定的延遲限制內。
大型二維乘法單元。TPU有一個非常大的二維乘法單元,而CPU和GPU分別只有18個和13個較小的一維乘法單元;二維硬體在矩陣乘法中有很好的性能。
脈動陣列。二維組織支持脈動陣列,減少寄存器訪問和能量消耗。
8位整型。TPU的應用使用 8 位整型而不是 32 位浮點運算來提高計算和內存效率。
棄掉的特徵。TPU放棄了 CPU 和 GPU 需要但是 DNN 用不到的功能,這使得 TPU 更便宜,同時可以節約資源,並允許晶體管被重新用於特定領域的板載內存。
雖然未來的 CPU 和 GPU 在運行推理時速度更快,但是使用 circa-2015 型 GPU 內存重新設計的 TPU 將比原來快三倍,並使其性能/功耗優勢分別為 K80 和 Haswell 的 70 倍和 200 倍。
至少在過去十年中,計算機架構研究人員發布的創新成果都是來自模擬計算的,這些成果使用了有限的基準,對於通用處理器的改進也只有 10% 或更少,而我們現在報告的性能提升是原來的十倍不止,這是應用於真實生產應用的真實硬體中部署的特定領域架構的收益。
商業產品之間的數量級差異在計算機架構中很少見,而這甚至可能導致 TPU 成為該領域未來工作的典範。我們預計,其他人也會跟進這個方向,並將門檻提得更高。
致謝
我們要感謝TPU團隊的所有成員在整個項目中的貢獻。這真的要一整個團隊才能做到這些設計,驗證和實施TPU等系統的硬體和軟體的製造,部署並大規模運用——正如我們在谷歌所見到的那樣。
viaacm.org,雷鋒網 AI 科技評論編譯
※英偉達發布3款RTX 20系列遊戲顯卡,性能提升6倍讓遊戲更像電影
※小米之夜大咖說:很多國家都非常需要小米,可能比中國還需要小米
TAG:雷鋒網 |