對替代性 TPU 設(shè)計的評估
和 FPU 類似,TPU 協(xié)同處理器比較容易評估,因此我們?yōu)榱鶄€應(yīng)用創(chuàng)建了一個性能模型。模型模擬的結(jié)果和硬件實際性能的平均差距小于 10%。
我們使用性能模型評估了另一款假想的 TPU 芯片,記為 TPU'(使用同樣的半導(dǎo)體技術(shù)再多花 15 個月我們就能設(shè)計出這款芯片)。更激進的邏輯合成和模塊設(shè)計可以把時鐘頻率再提高 50%;為 GDDR5 內(nèi)存設(shè)計接口電路(就像 K80 那樣)可以將權(quán)重讀取的內(nèi)存帶寬提高四倍,將 roofline 從斜到平的拐點從 1350 降到 250。
單獨將時鐘頻率提高到 1,050 MHz 而不改善內(nèi)存的話,性能提升非常有限。如果我們把時鐘頻率保持在 700MHz,但改用 GDDR5 作為內(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 還需要將 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)該足夠大,以到達 TPU 的計算性能峰值,對延遲的要求不用那么苛刻。一個起到推動作用的應(yīng)用是離線圖像處理,谷歌開發(fā)者的直覺是,如果交互式服務(wù)也需要 TPU,則大部分服務(wù)需要累積足夠大的批量然后才交給 TPU 計算。即使 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)時間以及高峰值吞吐量要求,即便是計算相對較小的批量時也比當前 CPU 和 GPU 具備更好的性能。
謬誤:K80 GPU 架構(gòu)很適合進行 DNN 推理。我們發(fā)現(xiàn) TPU 在性能、能耗和成本方面優(yōu)于 K80 GPU 有五個方面的原因。1、TPU 只有一個處理器,而 K80 有 13 個,單線程當然更容易滿足嚴格的延遲目標。2、TPU 具備一個非常大的二維乘法單元,GPU 有 13 個小的一維乘法單元。DNN 的矩陣相乘密度適合二維陣列中的算術(shù)邏輯運算單元。3、二維陣列還能通過避免訪問寄存器來促成脈動式的芯片實現(xiàn),節(jié)約能源。4、TPU 的量化應(yīng)用使用 8 位整型,而不是 GPU 的 32 位浮點;?K80 并不支持 8 位整型。使用更小的數(shù)據(jù),改善的不僅是計算能耗,還能四倍化權(quán)重 FIFO 的有效容量和權(quán)重內(nèi)存的有效帶寬。(盡管推理時使用的是 8 位整型,但訓(xùn)練這些應(yīng)用時會保證和使用浮點一樣的準確率)5、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)設(shè)計師具備競爭優(yōu)勢。
謬誤:如果谷歌對 CPU 的使用更加高效,它得到的結(jié)果將可以媲美 TPU。由于有效使用 CPU 的高級向量擴展(AVX2)對整型計算做高效的支持需要大量工作,最初在 CPU 上只有一個 DNN 有 8 位整型的性能測試結(jié)果,它的性能提升大約是 3.5 倍。所有的 CPU 性能評估都基于浮點的計算性能來展示會更明確(也不會占太多圖表空間),也就沒有給這個整型計算結(jié)果繪制單獨的 Roofline 圖。如果所有 DNN 都能夠得到類似的加速,TPU 帶來的性能/功耗比提升將分別從 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 年的 ACM 通訊中所述,DianNao 家族有四種 DNN 架構(gòu),通過對 DNN 應(yīng)用程序中的內(nèi)存訪問模式提供有效的架構(gòu)支持,可以最大限度地減少片上和外部 DRAM 的內(nèi)存訪問。最初的 DianNao 使用 64 個 16 位整數(shù)乘法累加單元的陣列。
?
谷歌 TPU 3.0 于今年 5 月推出,其功能是 TPU 2.0 的八倍,性能高達 100petaflops,芯片使用液體冷卻
為 DNN 設(shè)計特定領(lǐng)域架構(gòu)仍然是計算機架構(gòu)師的熱門話題,其中一個焦點是稀疏矩陣的計算架構(gòu),這是在 2015 年 TPU 首次部署之后提出的。Efficient Inference Engine(高效推理機)中有一步單獨的初始掃描,它會過濾去掉非常小的值,將權(quán)重數(shù)量減少到 1/10 左右,然后使用哈夫曼編碼進一步縮小數(shù)據(jù)以提高推理的性能。Cnvlutin 略去了激活輸入為零時的乘法運算,這種計算出現(xiàn)的幾率可以達到 44%,部分原因是非線性變換函數(shù) ReLU 會把輸入的負值轉(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。這種系統(tǒng)在 2017 年展出的成果是 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ù)器的一次嘗試,它包含數(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 年在微軟數(shù)據(jù)中心部署了 28 納米 Stratix V FPGA,與谷歌部署 TPU 差不多在同一時間。Catapult 運行 CNN 比普通服務(wù)器快 2.3 倍。也許 Catapult 和 TPU 最顯著的區(qū)別在于,為了獲得最佳性能,用戶必須使用低級硬件設(shè)計語言 Verilog 為 FPGA 編寫長程序,而不是使用高級 TensorFlow 框架編寫短程序;也就是說,“可再編程性”(re-programmability)來自于 TPU 的軟件,而不是最快 FPGA 的固件。
總結(jié)
盡管 TPU 在 I/O 總線上,并且內(nèi)存帶寬相對有限限制了它發(fā)揮全部效能(六個 DNN 應(yīng)用程序中有四個受限于內(nèi)存),但一個很大的數(shù)即便拆到很細,拆到每個周期 65536 次乘法累加計算,仍然是一個相對較大的數(shù)字,如 roofline 性能模型所示。這個結(jié)果表明,Amdahl 定律的其實有一個非常有價值的推論——大量廉價資源的低效利用仍然可以提供頗具性價比的高性能。
我們了解到,推理應(yīng)用具有嚴格的響應(yīng)時間限制,因為它們通常是面向用戶的應(yīng)用;因此,為 DNN 設(shè)計計算芯片的設(shè)計師們需要保證滿足 99% 情況下的時間限制要求。
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位整型。TPU的應(yīng)用使用 8 位整型而不是 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ù)計,其他人也會跟進這個方向,并將門檻提得更高。