2017圖靈獎得主:通用芯片每年僅提升3%,神經(jīng)專用架構(gòu)才是未來
摩爾定律的終結(jié)將使特定領(lǐng)域的架構(gòu)成為計算的未來。一個開創(chuàng)性的例子就是谷歌 2015 年推出的張量處理單元(TPU),目前已經(jīng)在為超過十億人提供服務(wù)。TPU 使深度神經(jīng)網(wǎng)絡(luò)(DNN)的計算速度提高了 15-30 倍,能耗效率比現(xiàn)有類似技術(shù)的 CPU 和 GPU 提高了 30-80 倍。
本文引用地址:http://2s4d.com/article/201809/391456.htm本文要點
雖然 TPU 是一種專用集成電路,但它適用于神經(jīng)網(wǎng)絡(luò)框架 TensorFlow 下的大量程序,驅(qū)動了谷歌數(shù)據(jù)中心的許多重要應(yīng)用,包括圖像識別、翻譯、搜索和游戲。通過專門為神經(jīng)網(wǎng)絡(luò)重新分配芯片計算資源,TPU 在真實數(shù)據(jù)中心負載環(huán)境下效率要比通用類型的計算機高 30-80 倍,目前已為全球 10 億人服務(wù)。神經(jīng)網(wǎng)絡(luò)的推理階段通常遵循嚴格的響應(yīng)時間限制,這降低了通用計算機所使用技術(shù)的效率,該通用計算機通常運行得較快,但某些情況下也會較慢。1965 年英特爾創(chuàng)始人之一戈登·摩爾預(yù)測芯片中的晶體管數(shù)量每兩年會增加一倍。盡管 2017 年 1 月的 ACM Communications 封面呼吁道:「說我要終結(jié)還為時過早了」,摩爾定律確實壽終正寢。2014 年推出的 DRAM 芯片包含了 80 億個晶體管,而在人們的預(yù)測中即使到了 2019 年,帶有 160 億個晶體管的 DRAM 芯片也不會大規(guī)模生產(chǎn)——如果看摩爾定律的話,四年里晶體管數(shù)量應(yīng)該變成四倍多。2010 年款的英特爾至強 E5 處理器擁有 23 億個晶體管,而 2016 年的至強 E5 也只有 72 億個晶體管,或者說比摩爾定律預(yù)計的數(shù)值低 1.5 倍。毫無疑問,半導(dǎo)體行業(yè)還在不斷進步,但其步伐已經(jīng)放緩。
Dennard Scaling 是一個鮮為人知,但同樣重要的觀察結(jié)果,Robert Dennard 在 1974 年認為,晶體管不斷變小,但芯片的功率密度不變。如果晶體管尺寸線性縮小了二分之一,那么同樣面積上芯片中晶體管的數(shù)量就會變?yōu)?4 倍。同時,如果電流和電壓都降低了二分之一,它所使用的功率將下降 4 倍,在相同的頻率下提供相同的功率。Dennard Scaling 在被發(fā)現(xiàn)的 30 年后結(jié)束,其原因并不是因為晶體管的尺寸不再縮小,而是因為電流和電壓不能在繼續(xù)下降的同時保持可靠性了。
計算架構(gòu)師們一直信奉摩爾定律和 Dennard Scaling,并通過復(fù)雜的處理器設(shè)計和內(nèi)存層次結(jié)構(gòu),將資源轉(zhuǎn)化為性能,而在這其中并沒有顧及到程序員知識中各指令之間的并行性。不幸地是,架構(gòu)師們最終耗盡了可以有效利用的指令的并行性。2004 年 Dennard Scaling 的結(jié)束,以及缺乏更有效指令級并行性方法的狀況,迫使業(yè)界選擇從單核高耗能處理器轉(zhuǎn)換到多核高效率處理器。
今天我們遵守吉恩·阿姆達爾(IBM 著名工程師,阿姆達爾定律的提出者)在 1967 年提出的定律,該定律認為不斷增加處理器數(shù)量會導(dǎo)致性能提升的遞減。阿姆達爾定律說,并行計算的理論加速受到任務(wù)順序部分的限制;如果任務(wù)的 1/8 是串行的,則最大加速比原始性能高 8 倍——即使任務(wù)的其余部分很容易并行,并且架構(gòu)師增加了 100 個處理器也是如此。
下圖顯示了過去四十年以來,上述三大定律對處理器性能的影響。按照目前的速度,標準處理器的性能在 2038 年以前不會翻倍。

圖 1. 依照 Hennessy 和 Patterson 的理論,我們繪制了過去 40 年中,32 位和 64 位處理器內(nèi)核每年最高的 SPECCPUint 性能;面向吞吐量的 SPECCPUint_rate 反映了類似的情況,即使其平穩(wěn)期延遲了幾年。
晶體管看來不會再有很大提升了(這反映了摩爾定律的結(jié)束),而每平方毫米芯片面積的功耗正在增加(Dennard Scaling 也結(jié)束了),但人們對于芯片功率的預(yù)算卻并沒有增加(因為電子移動、機械和發(fā)熱限制),芯片設(shè)計師們已經(jīng)在充分發(fā)揮多核心的能力了(但這也受到阿姆達爾定律的限制),架構(gòu)師們現(xiàn)在普遍認為,在性能效率上進行重大改進的唯一途徑是特定領(lǐng)域的架構(gòu)——它們只適用于處理特定的任務(wù),但效率非常高。
在云端的大型數(shù)據(jù)集和大量計算機之間的協(xié)作使得機器學(xué)習(xí)近年來有了很大的發(fā)展,特別是在深度神經(jīng)網(wǎng)絡(luò)(DNN)方面。與一些其他領(lǐng)域不同,DNN 應(yīng)用方面很廣泛。DNN 的突破包括將語音識別的錯詞率降低了 30%(近 20 年來的最大進步);自 2011 年以來,將圖像識別的錯誤率從 26% 降低至 3.5;在圍棋上擊敗了人類世界冠軍;提升了搜索排名等等。單個 DNN 架構(gòu)或許應(yīng)用范圍很窄,但這種方法仍然催生出了大量應(yīng)用。
神經(jīng)網(wǎng)絡(luò)一定程度上模擬了人類大腦中神經(jīng)的功能,基于簡單的人工神經(jīng)元 - 輸入的加權(quán)和的非線性函數(shù)(例如 max(0,value))。這些人工神經(jīng)元被集中到一層,一層的輸出是下一層的輸入。深度神經(jīng)網(wǎng)絡(luò)中的「深度」代表有多個層,由于云中的大數(shù)據(jù)集,我們可以使用更大、更多的層來讓神經(jīng)網(wǎng)絡(luò)獲取更抽象、更準確的概念,而 GPU 會幫助我們快速進行計算。
DNN 運行的兩個階段被稱為訓(xùn)練(或?qū)W習(xí))和推理(或預(yù)測),分別指代發(fā)展與生產(chǎn)。訓(xùn)練一個 DNN 可能需要數(shù)天,但訓(xùn)練好的 DNN 進行推理只需要幾毫秒。針對不同的應(yīng)用,開發(fā)者需要選擇神經(jīng)網(wǎng)絡(luò)的類型和層數(shù),并訓(xùn)練出合適的權(quán)重。幾乎所有的訓(xùn)練都是浮點運算,這就是 GPU 在深度學(xué)習(xí)時代如此受歡迎的原因之一。
被稱為「量化」的轉(zhuǎn)換將浮點數(shù)轉(zhuǎn)為整數(shù)——通常只有 8 位——這種程度通常足以滿足推斷要求了。與 IEEE 754 16 位浮點乘法相比,8 位整數(shù)乘法只需要 1/6 的能耗,占用 1/6 的空間,而整數(shù)加法也能帶來 13 倍能耗和 38 倍空間的提升。
下表展示了兩個例子,共六種 DNN 的運行效率——這代表了谷歌數(shù)據(jù)中心 2016 年 95% 的深度神經(jīng)網(wǎng)絡(luò)工作負載。它們在 TensorFlow 中的代碼都非常短,只有 100-1500 行。這些示例代表在主機服務(wù)器上運行較大應(yīng)用程序的小組件,可以是數(shù)千到數(shù)百萬行 C ++代碼。應(yīng)用程序通常面向用戶,這會導(dǎo)致嚴格的響應(yīng)時間限制。

表 1. 2016 年 7 月,谷歌 TPU 上的 DNN 工作負載。共六種 DNN 應(yīng)用(三種 DNN 類型),代表 95% 的 TPU 工作負載。
如表 1 所示,每個模型需要 500 萬至 1 億個權(quán)重,這可能需要花費大量時間和能耗來訪問。為了壓縮訪問成本,在一批獨立示例中重復(fù)使用相同的權(quán)重可以提高性能。
TPU 起源、架構(gòu)及實現(xiàn)
早在 2006 年,谷歌就開始考慮在其數(shù)據(jù)中心部署 GPU——現(xiàn)場可編程門陣列(field programmable gate array,F(xiàn)PGA)或?qū)S眉呻娐?ASIC)。結(jié)論是,只有為數(shù)不多的能在特殊硬件上運行的應(yīng)用可以免費使用谷歌大型數(shù)據(jù)中心的過剩容量,而且很難自由改進。情況在 2013 年出現(xiàn)了轉(zhuǎn)機,當(dāng)時谷歌用戶每天使用語音識別 DNN 語音搜索三分鐘,使得谷歌數(shù)據(jù)中心的計算需求增加了一倍,而如果使用傳統(tǒng)的 CPU 將非常昂貴。因此,谷歌啟動了一項優(yōu)先級別非常高的項目,快速生產(chǎn)一款定制芯片用于推理,并購買現(xiàn)成的 GPU 進行訓(xùn)練。谷歌的目標是將性價比提高 10 倍。為了完成這項任務(wù),谷歌在其數(shù)據(jù)中心設(shè)計、驗證、構(gòu)建并部署了 GPU,而這一過程僅僅用了 15 個月。
為了降低部署延遲的風(fēng)險,谷歌工程師將 TPU 設(shè)計成 I/O 總線上的協(xié)處理器,并允許它像 GPU 一樣插入現(xiàn)有服務(wù)器,而不是使 TPU 與 CPU 緊密集成。此外,為了簡化硬件設(shè)計和調(diào)試,主機服務(wù)器將指令發(fā)送給 TPU 令其執(zhí)行,而不是讓 TPU 去自行獲取。因此,TPU 在理念上更接近浮點單元(FPU)協(xié)處理器,而不是 GPU。
谷歌工程師將 TPU 看做一個系統(tǒng)進行優(yōu)化。為了減少與主機 CPU 的交互,TPU 運行整個推理模型,但提供了與 2015 年及以后的 DNN 相匹配的靈活性,而不局限于 2013 年的 DNN。
圖 2:TPU 的框圖。TPU 指令通過外圍組件互連高速(PCIe)Gen3x16 總線從主機被發(fā)送到指令緩沖器中。內(nèi)框通常通過 256 字節(jié)寬度的路徑連接在一起。從右上角開始,矩陣乘法單元為 TPU 的核心,256×256 MAC 可以對有符號或無符號的整數(shù)執(zhí)行 8 位乘法和加法運算。這個 16 位的產(chǎn)品聚集在矩陣單元下方的 32 位累加器的 4MB 中。這四個 MiB 代表含有 4,096, 256 個元素的 32 位累加器。矩陣單元每周期產(chǎn)生一個 256 元素的部分和。

圖 2. TPU 框圖及平面圖
矩陣單元的權(quán)重通過片內(nèi)「權(quán)重 FIFO」來分級,該 FIFO 從我們稱之為「權(quán)重存儲器」的片外 8GB DRAM 中讀取;為了推理,權(quán)重僅作讀取;8GB 支持很多同時激活的模型。權(quán)重 FIFO 有四層深。中間結(jié)果保存在 24MiB 的片上「統(tǒng)一緩沖器」中,可以作為矩陣單元的輸入。可編程 DMA 控制器將數(shù)據(jù)傳送到 CPU 主機存儲器和統(tǒng)一緩沖器或從二者中傳送數(shù)據(jù)。為了能在谷歌的規(guī)模上可靠地部署,內(nèi)存儲器和外存儲器包含內(nèi)置錯誤檢查與糾正硬件。
TPU 微架構(gòu)的原理是保持矩陣單元繁忙。為了實現(xiàn)這一目標,讀取權(quán)重的指令遵循解耦訪問/執(zhí)行原理,因為它可以在發(fā)送地址之后、從權(quán)重存儲器中取出權(quán)重之前完成。如果輸入激活或權(quán)重數(shù)據(jù)沒有準備好,矩陣單元將停止。
由于讀取大型靜態(tài)隨機存取存儲器(Static Random-Access Memory,SRAM)消耗的算力比算法多得多,矩陣單元使用「脈動執(zhí)行」通過減少統(tǒng)一緩沖器的讀寫來節(jié)約能量。它依賴于來自不同方向的數(shù)據(jù),這些數(shù)據(jù)以規(guī)則的間隔到達陣列中的單元,這些方向在間隔中組合到一起。給定的含有 65,536 個元素的向量-矩陣乘法運算作為對角波前在矩陣中移動。這些權(quán)重被預(yù)加載,并隨著新數(shù)據(jù)塊的第一個數(shù)據(jù)一起隨著前進波生效。控制和數(shù)據(jù)被流水線化,給程序員一種錯覺,即 256 個輸入被一次讀取,并立即更新 256 個累加器中每個累加器的一個位置。從正確性的角度來看,軟件不了解矩陣單元的脈動特性,但為了提高性能,必須考慮單元的延遲。
TPU 軟件棧必須與為 CPU 和 GPU 開發(fā)的軟件棧兼容,這樣應(yīng)用可以快速移植到 TPU。在 TPU 上運行的應(yīng)用部分通常用 TensorFlow 編寫,并編譯成可以在 GPU 或 TPU 上運行的 API。
CPU、GPU、TPU 平臺
多數(shù)體系架構(gòu)研究的論文基于運行小型、易于移植的基準測試模擬,這些基準測試可以預(yù)測潛在的性能(如果實施的話)。本文與上述論文不同,而是對 2015 年以來數(shù)據(jù)中心運行真實、大型生產(chǎn)工作負載的機器進行回顧性評估,其中一些機器的日常用戶超過 10 億。表 1 中列出的六種應(yīng)用代表了 2016 年 TPU 數(shù)據(jù)中心 95% 的使用。
由于正在測量生產(chǎn)工作負載,要比較的基準平臺也必須可以在 Google 數(shù)據(jù)中心部署,因為這是生產(chǎn)工作負載運行的唯一處所。谷歌數(shù)據(jù)中心的很多服務(wù)器和谷歌規(guī)模對應(yīng)用程序可靠性的要求意味著機器必須至少檢查內(nèi)存錯誤。由于英偉達 Maxwell GPU 和最近的 Pascal P40 GPU 不檢查內(nèi)存中的錯誤,在谷歌的規(guī)模中部署這些處理器并滿足谷歌應(yīng)用程序的嚴格可靠性要求是不可行的。
表 2 顯示了部署在谷歌數(shù)據(jù)中心的服務(wù)器,可以將其與 TPU 進行比較。傳統(tǒng)的 CPU 服務(wù)器以英特爾的 18 核雙插槽 Haswell 處理器為代表,該平臺也是 GPU 或 TPU 的主機服務(wù)器。谷歌工程師在服務(wù)器中使用四個 TPU 芯片。

表 2. 基準測試的服務(wù)使用 Haswell CPU、K80 GPU 及 TPU。
很多計算機架構(gòu)師沒有考慮到從產(chǎn)品發(fā)布到芯片、主板、軟件可以服務(wù)于數(shù)據(jù)中心的用戶之間的時間差。表 3 指出,2014 年至 2017 年,商業(yè)云公司的 GPU 時間差為 5 至 25 個月。因此,可以媲美 2015 年 TPU 的 GPU 顯然是英偉達 K80,后者處于相同的半導(dǎo)體工藝中,在 TPU 部署前六個月發(fā)布。

表 3. 2015 年到 2017 年,英偉達 GPU 從發(fā)布到云端部署的時間差距,這 4 代 GPU 分別為 Kepler、Maxwell、Pascal 和 Volta 架構(gòu)。
每個 K80 卡包含兩個裸片,并提供內(nèi)部存儲器和 DRAM 的錯誤檢測和糾正機制。這種服務(wù)器中最多可安裝 8 個 K80 裸片,這也是我們基準測試的配置。CPU 和 GPU 都使用大型芯片:大約 600 mm2,或者是英特爾 Core i7 的三倍。
性能:Roofline、響應(yīng)時間、吞吐量
為了說明這六個 app 在三個處理器上的性能,我們使用了高性能計算機群(HPC)的 Roofline 性能模型。這一簡單的視覺模型雖然不完美,但揭示了性能瓶頸出現(xiàn)的原因。該模型背后的假設(shè)是 app 無法適應(yīng)片上緩存,因此它們要么計算受限,要么內(nèi)存帶寬受限。對于 HPC,y 軸表示每秒浮點運算性能(單位是 FLOPS),因此峰值計算率形成了 roofline 的「平緩」區(qū)(flat part)。x 軸表示運算密度(operational intensity),單位是 FLOPS/byte。內(nèi)存帶寬表示每秒多少比特,形成了 roofline 的「傾斜」部分(slanted part),因為 (FLOPS/sec)/ (FLOPS/Byte) = Bytes/sec。沒有充足的運算密度時,程序受限于內(nèi)存帶寬,性能只能在 roofline 的「傾斜」部分之下。
一個應(yīng)用的每秒實際計算量與其天花板計算量之間的距離代表了保持運算密度不變時性能提升的潛力;提升運算密度的優(yōu)化(如緩存塊)可能帶來更大的性能提升。
為了在 TPU 上使用 Roofline 模型,當(dāng) DNN 應(yīng)用被量化時,我們首先將浮點運算替換成整數(shù)運算。由于權(quán)重步伐無法正常適應(yīng) DNN 應(yīng)用的片上內(nèi)存,因此第二個改變就是將運算密度重新定義為每權(quán)重比特的整數(shù)乘積累加運算(integer multiply-accumulate operations per byte of weights),如表 1 所示。
圖 3 展示了單個 TPU、CPU 和 GPU 在 log-log scale 上的 Roofline 模型。TPU 的 Roofline 模型「傾斜」部分較長,其運算密度意味著性能更多地受限于內(nèi)存帶寬,而不是計算峰值。六個應(yīng)用中有五個都接近天花板,MLP 和 LSTM 受限于內(nèi)存,CNN 受限于計算。

圖 3:TPU、CPU 和 GPU 在 log-log 圖上的 roofline 模型。五角星表示 TPU,三角形表示英偉達 Tesla K80 GPU,圓表示英特爾酷睿處理器(Haswell);所有 TPU 五角星都與其他兩種芯片的 roofline 模型持平或在后者之上。
如圖 3 所示,這六個 DNN 應(yīng)用與 Haswell 和 K80 roofline 天花板的距離大于與 TPU roofline 天花板的距離。響應(yīng)時間是原因所在。這些應(yīng)用中的很多個是面向終端用戶服務(wù)的一部分。研究表明,即使響應(yīng)時間的些微增加都會導(dǎo)致用戶使用該服務(wù)的頻率降低。訓(xùn)練可能沒有苛刻的響應(yīng)時間 deadline,但推斷通常有,或者說相比于吞吐量,推斷更偏好 latency。
例如,按照應(yīng)用開發(fā)者的要求,MLP0 的 99th 百分位響應(yīng)時間通常為 7ms。(每秒推斷和 7ms 的延遲包括服務(wù)器主機時間和加速器時間。)如果對響應(yīng)時間的限制不嚴格,Haswell 和 K80 分別以 MLP0 最高吞吐量的 42% 和 37% 運行。這些限制也會影響到 TPU,它會以 80% 的吞吐量來運行,更加接近 TPU 的 MLP0 最大吞吐量。與 CPU 和 GPU 相比,單線程 TPU 沒有復(fù)雜的微架構(gòu)特征,即消耗晶體管和功率來提高平均性能,而非 99th 百分位的情況,即 TPU 沒有緩存、分支預(yù)測、亂序執(zhí)行、多處理、推測預(yù)取(speculative prefetching)、地址合并(address coalescing)、多線程、上下文切換(context switching)等。極簡是領(lǐng)域?qū)S锰幚砥鞯膬?yōu)勢。
表 4 顯示了每個芯片的相對推斷性能底線,包括兩個加速器 vs. CPU 的主機服務(wù)器開銷,展示了這六個 DNN 應(yīng)用相對性能的加權(quán)平均值,表明 K80 芯片速度是 Haswell 的 1.9 倍,TPU 芯片速度是 Haswell 的 29.2 倍,TPU 芯片速度是 GPU 的 15.3 倍。

表 4:在 DNN 工作負載下 K80 GPU 芯片和 TPU 芯片與 CPU 的性能比。加權(quán)平均值使用了表 1 中六個 app 的實際混合。
性價比、總體擁有成本(TCO)、性能/功耗(Performance/Watt)
大批量購買計算機時會更多地考慮性價比而非性能。數(shù)據(jù)中心最好的成本指標是總體擁有成本(TCO)。組織(如谷歌)購買數(shù)千張芯片時所支付的實際價格取決于與相關(guān)企業(yè)的談判溝通。由于涉及商業(yè)機密,我們無法公開此類價格信息或數(shù)據(jù)。但是,功率與 TCO 相關(guān),我們可以公開每臺服務(wù)器的功耗數(shù),因此這里我們使用性能/功耗比代替性能/TCO 比。這部分我們對比了整個服務(wù)器而不是單個芯片。圖 4 顯示了 K80 GPU 和 TPU 相對于 Haswell CPU 的平均性能/功耗比。我們給出了兩種不同的性能/功耗比計算。我們展示了兩種不同的性能/功耗計算方法。第一種「total」包括計算 GPU 和 TPU 的性能/功耗時主機 CPU 服務(wù)器所消耗的功率;第二種「incremental」從 GPU 和 TPU 中減去了主機 CPU 服務(wù)器所消耗的功率。

圖 4:GPU 服務(wù)器與 CPU 服務(wù)器的性能/功耗對比(藍色條)、TPU 服務(wù)器與 CPU 服務(wù)器的功耗對比(紅色條)、TPU 服務(wù)器與 GPU 服務(wù)器的功耗對比(橙色條)。TPU' 是使用 K80 的 GDDR5 內(nèi)存將 TPU 進行改進后的芯片。
對替代性 TPU 設(shè)計的評估
和 FPU 類似,TPU 協(xié)同處理器比較容易評估,因此我們?yōu)榱鶄€應(yīng)用創(chuàng)建了一個性能模型。模型結(jié)果和硬件性能的平均差距小于 10%。
我們使用性能模型來評估一款假設(shè)的 TPU 芯片 TPU'(使用同樣的技術(shù)再用 15 個月我們也能設(shè)計出這款芯片)。更具攻擊性的邏輯合成和模塊設(shè)計仍然可以把時鐘頻率提高 50%。為 GDDR5 內(nèi)存設(shè)計接口電路(就像 K80 那樣)可以將權(quán)重內(nèi)存帶寬(weight memory bandwidth)提高四倍,將 roofline 脊點從 1350 降到 250。
將時鐘頻率提高到 1,050 MHz 而不幫助內(nèi)存并沒有什么作用。如果我們使時鐘頻率為 700MHz,但使用 GDDR5 作為權(quán)重內(nèi)存,則加權(quán)平均值飛躍至 3.9。同時實行這兩種措施無法改變平均值,因此假設(shè)的 TPU' 具備更快的內(nèi)存。
將 DDR3 權(quán)重內(nèi)存替換成等價的 K80 GDDR5 內(nèi)存需要將內(nèi)存通道的數(shù)量翻一倍,即 4 個通道。這一改進可以將芯片大小擴大約 10%。GDDR5 還能夠?qū)?TPU 系統(tǒng)的功率預(yù)算從 861W 提高到 900W 左右,因為每臺服務(wù)器都有四個 TPU。
圖 4 顯示,TPU'的總體性能/功耗/芯片是 Haswell 的 86 倍,K80 的 41 倍。其 incremental 指標是 Haswell 的 196 倍,K80 的 68 倍。
討論
這部分按照 Hennessy 和 Patterson 的謬誤-陷阱-反駁格式來展開:
謬誤。數(shù)據(jù)中心的 DNN 推斷應(yīng)用將吞吐量和響應(yīng)時間置于同等重要的地位。我們驚訝于谷歌 TPU 開發(fā)者對響應(yīng)時間有這么高的要求,2014 年就有人透露:對于 TPU 來說,批尺寸應(yīng)該足夠大,以到達性能峰值或者對延遲的要求不用那么苛刻。一個強大的應(yīng)用是離線圖像處理,谷歌開發(fā)者的直覺是,如果交互式服務(wù)也需要 TPU,則大部分服務(wù)需要累積足夠大的批量。即使 2014 年谷歌關(guān)注響應(yīng)時間(LSTM1)的應(yīng)用開發(fā)者稱,2014 年的限制是 10ms,而真正向 TPU 移植時 10ms 將被減少至 7ms。很多此類服務(wù)對 TPU 的意料之外的要求,以及它們對快速響應(yīng)時間的影響和偏好,改變了這個等式。應(yīng)用編寫者通常會選擇降低延遲,而不是累積更大的批量。幸運的是,TPU 具備一個簡單、可重復(fù)的執(zhí)行模型,來滿足交互式服務(wù)的響應(yīng)時間要求,此類高峰值吞吐量、小批量大小導(dǎo)致 TPU 具備比當(dāng)前 CPU 和 GPU 更好的性能。
謬誤。K80 GPU 架構(gòu)很適合進行 DNN 推斷。我們發(fā)現(xiàn) TPU 在性能、能耗和成本方面優(yōu)于 K80 GPU 有五個方面的原因。一,TPU 只有一個處理器,而 K80 有 13 個,單線程當(dāng)然更容易滿足嚴格的延遲目標。二,TPU 具備一個非常大的二維乘法單元,GPU 有 13 個小的一維乘法單元。DNN 的矩陣相乘密度適合二維陣列中的算術(shù)邏輯運算單元。三,二維陣列還能通過避免訪問寄存器來促成脈動實現(xiàn),節(jié)約能源。四,TPU 的量化應(yīng)用使用 K80 并不支持的 8 比特整數(shù)而不是 GPU 的 32 比特浮點數(shù)。數(shù)據(jù)小幅度改善的不僅是計算能耗,還能四倍化權(quán)重 FIFO 的有效容量和權(quán)重內(nèi)存的有效帶寬。(盡管使用的是 8 比特整數(shù),但這些應(yīng)用被訓(xùn)練來實現(xiàn)與浮點數(shù)相同的準確率。)五,TPU 忽略 GPU 需要而 DNN 不需要的特征,從而縮小 TPU 芯片、節(jié)約能耗、為其他更新留下空間。TPU 芯片的大小幾乎是 K80 的一半,通常運行所需能量是后者的三分之一,而它的內(nèi)存卻是后者的 3.5 倍。這五個因素導(dǎo)致 TPU 在能耗和性能方面優(yōu)于 K80 GPU 30 倍。
陷阱。在設(shè)計領(lǐng)域?qū)S眉軜?gòu)時不顧架構(gòu)歷史。不適用通用計算的想法可能適合領(lǐng)域?qū)S眉軜?gòu)。對于 TPU 而言,三個重要的架構(gòu)特征可以追溯到 1980 年代早期:脈動陣列(systolic array)、解耦訪問/執(zhí)行(decoupled access/execute)和復(fù)雜的指令集。第一個特征減少了大型矩陣相乘單元的面積和能耗;第二個特征在矩陣相乘單元運算期間并行獲取權(quán)重;第三個特征更好地利用 PCIe bus 的有限帶寬來發(fā)送指令。因此,了解架構(gòu)歷史的領(lǐng)域?qū)S眉軜?gòu)具備競爭優(yōu)勢。
謬誤。如果谷歌對 CPU 使用更加高效,它得到的結(jié)果將可以媲美 TPU。由于有效使用高級向量擴展(AVX2)整數(shù)支持需要大量工作,最初在 CPU 上只有一個 DNN 有 8 位結(jié)果,其收益大約是 3.5 倍。用浮點而不是 roofline 來顯示所有 CPU 結(jié)果,會更加明確(也不需要太多空間)。如果所有 DNN 都有類似的加速,性能/功耗比將分別從 41 倍和 83 倍降為 12 倍和 24 倍。
謬誤。如果谷歌使用合適的新版本,GPU 結(jié)果將與 TPU 相匹配。表 3 報告了發(fā)布 GPU 和客戶何時可以在云中使用 GPU 的區(qū)別。與較新的 GPU 進行公平比較將包括新的 TPU,而對于另外的 10W,我們只需使用 K80 的 GDDR5 內(nèi)存就可以將 28 納米、0.7GHz、40W TPU 的性能提高三倍。把 TPU 移動到 16 納米工藝將進一步提高其性能/功耗。16 納米英偉達 Pascal P40 GPU 的峰值性能是原 TPU 的一半,但在 250 瓦時,能耗卻是原來的很多倍。如前所述,缺乏誤差檢測意味著 Google 無法再去數(shù)據(jù)中心部署 P40,因此無法在它們身上運行生產(chǎn)工作負載來確定其實際相對性能。
相關(guān)研究
兩篇介紹 DNN ASIC 的研究文章至少可以追溯到 20 世紀 90 年代初。如 2016 年的《Communications》中所述,DianNao 家族有四種 DNN 架構(gòu),通過對 DNN 應(yīng)用程序中的內(nèi)存訪問模式提供有效的架構(gòu)支持,可以最大限度地減少片上和外部 DRAM 的內(nèi)存訪問。最初的 DianNao 使用 64 個 16 位整數(shù)乘法累加單元的數(shù)組。

谷歌 TPU 3.0 于今年 5 月推出,其功能是 2.0 的八倍,性能高達 100petaflops。
DNN 的特定領(lǐng)域架構(gòu)仍然是計算機架構(gòu)師的熱門話題,主要聚焦于稀疏矩陣架構(gòu),這是在 2015 年 TPU 首次部署之后提出的。高效推理機基于第一次傳遞,通過過濾出非常小的值,將權(quán)重數(shù)量減少 9 倍左右,然后使用哈夫曼編碼進一步縮小數(shù)據(jù)以提高推理機的性能。Cnvlutin 避免了激活輸入為零時的乘法運算,這種幾率可以達到 44%,部分原因可能是線性整流函數(shù)(ReLU),非線性函數(shù)將負值轉(zhuǎn)換為零,使平均性能提高了 1.4 倍。Eyeriss 是一種新穎的低功耗數(shù)據(jù)流架構(gòu),通過游程編碼數(shù)據(jù)利用零來減少內(nèi)存占用,并通過避免輸入為零時的計算來節(jié)省功率。Minerva 是一種跨算法、結(jié)構(gòu)和電路學(xué)科的協(xié)同設(shè)計系統(tǒng),通過用量化數(shù)據(jù)和小值修剪激活函數(shù)的方式把功耗降低到原來的 1/8。2017 年的相關(guān)研究是 SCNN——一種稀疏和壓縮卷積神經(jīng)網(wǎng)絡(luò)的加速器。權(quán)重和激活函數(shù)都被壓縮在 DRAM 和內(nèi)部緩沖器中,從而減少了數(shù)據(jù)傳輸所需的時間和能量,并允許芯片存儲更大的模型。
2016 年以來的另一個趨勢是用于訓(xùn)練的特定領(lǐng)域架構(gòu)。例如,ScaleDeep 用來對專為 DNN 訓(xùn)練和推理而設(shè)計的高性能服務(wù)器進行評估,該服務(wù)器包含數(shù)千個處理器。每塊芯片包含計算量大和存儲量大的塊,比例為 3:1,性能優(yōu)于 GPU 6~28 倍。它用 16 位或 32 位浮點運算來計算。芯片通過與 DNN 通信模式匹配的高性能互連拓撲連接。和 SCNN 一樣,這種拓撲只在 CNN 上評估。2016 年,CNN 僅占谷歌數(shù)據(jù)中心 TPU 工作量的 5%。計算機架構(gòu)師期待對其它類型的 DNN 和硬件實現(xiàn)進行 ScaleDeep 評估。
DNN 似乎是 FPGA 作為數(shù)據(jù)中心計算平臺的一個良好用例。部署的一個例子是 Catapult。盡管 Catapult 是在 2014 年公開發(fā)布的,但它與 TPU 是同一個時代的,因為 2015 年它與 TPU 同時在微軟數(shù)據(jù)中心部署了 28 納米 Stratix V FPGA。Catapult 運行 CNN 比普通服務(wù)器快 2.3 倍。也許 Catapult 和 TPU 最顯著的區(qū)別在于,為了獲得最佳性能,用戶必須使用低級硬件設(shè)計語言 Verilog 編寫長程序,而不是使用高級 TensorFlow 框架編寫短程序;也就是說,「可再編程性」(re-programmability)來自于 TPU 的軟件,而不是最快 FPGA 的固件。
總結(jié)
盡管 TPU 在 I/O 總線上,并且內(nèi)存帶寬相對有限,限制了其使用(六個 DNN 應(yīng)用程序中有四個內(nèi)存受限),但每個周期 65536 次乘法累加的一小部分仍然數(shù)目不小,如 roofline 性能模型所示。這個結(jié)果表明,Amdahl 定律的「cornucopia 推論」——大量廉價資源的低效利用仍然可以提供頗具性價比的高性能。
我們了解到,推理應(yīng)用具有嚴格的響應(yīng)時間限制,因為它們通常是面向用戶的應(yīng)用;因此,當(dāng)面對 99% 的延遲期限時,DNN 架構(gòu)需要表現(xiàn)良好。
TPU 芯片利用其在 MAC 和片上內(nèi)存的優(yōu)勢運行使用特定領(lǐng)域 TensorFlow 框架編寫的短程序,該 TensorFlow 框架比 K80 GPU 芯片快 15 倍,因此能獲得 29 倍的性能/功耗優(yōu)勢,這與性能/總擁有成本相關(guān)。與 Haswell CPU 芯片相比,對應(yīng)的比率分別為 29 和 83 倍。
有五個架構(gòu)因素可以解釋這種性能差距:
處理器。TPU 只有一個處理器,而 K80 有 13 個,CPU 有 18 個;單線程使系統(tǒng)更容易保持在固定的延遲限制內(nèi)。大型二維乘法單元。TPU 有一個非常大的二維乘法單元,而 CPU 和 GPU 分別只有 18 個和 13 個較小的一維乘法單元;矩陣乘法受益于二維硬件。脈動陣列。二維組織支持脈動陣列,減少寄存器訪問和能量消耗。8 位整數(shù)。TPU 的應(yīng)用使用 8 位整數(shù)而不是 32 位浮點運算來提高計算和內(nèi)存效率。棄掉的特征。TPU 放棄了 CPU 和 GPU 所需要但是 DNN 用不到的功能,這使得 TPU 更便宜,同時可以節(jié)約資源,并允許晶體管被重新用于特定領(lǐng)域的板載內(nèi)存。雖然未來的 CPU 和 GPU 在運行推理時速度更快,但是使用 circa-2015 GPU 內(nèi)存重新設(shè)計的 TPU 將比原來快三倍,并使其性能/功耗優(yōu)勢分別為 K80 和 Haswell 的 70 倍和 200 倍。
至少在過去十年中,計算機架構(gòu)研究人員一直在發(fā)布基于模擬的創(chuàng)新成果,這些成果使用了有限的基準,并聲稱通用處理器的改進為 10% 或更少,而我們現(xiàn)在報告的收益是原來的十倍不止,這是應(yīng)用于真實生產(chǎn)應(yīng)用的真實硬件中部署的特定領(lǐng)域架構(gòu)的收益。
商業(yè)產(chǎn)品之間的數(shù)量級差異在計算機架構(gòu)中很少見,而這甚至可能導(dǎo)致 TPU 成為該領(lǐng)域未來工作的典型。我們預(yù)計,其它人將會迎頭趕上,將門檻提得更高。
評論