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