深度分析:AI 芯片時(shí)代為何必然來(lái)臨——從TPU開(kāi)始聊聊
對(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)展開(kāi):
謬誤:數(shù)據(jù)中心的 DNN 推斷應(yīng)用將吞吐量和響應(yīng)時(shí)間處于同等重要的地位。我們驚訝于谷歌 TPU 開(kāi)發(fā)者對(duì)響應(yīng)時(shí)間有這么高的要求,2014 年有人透露說(shuō)的是:對(duì)于 TPU 來(lái)說(shuō),批量大小應(yīng)該足夠大,以到達(dá) TPU 的計(jì)算性能峰值,對(duì)延遲的要求不用那么苛刻。一個(gè)起到推動(dòng)作用的應(yīng)用是離線圖像處理,谷歌開(kāi)發(fā)者的直覺(jué)是,如果交互式服務(wù)也需要 TPU,則大部分服務(wù)需要累積足夠大的批量然后才交給 TPU 計(jì)算。即使 2014 年谷歌關(guān)注響應(yīng)時(shí)間(LSTM1)的應(yīng)用開(kāi)發(fā)者稱,2014 年的限制是 10ms,而真正向 TPU 移植時(shí) 10ms 將被減少至 7ms。很多此類服務(wù)對(duì) TPU 的意料之外的要求,以及它們對(duì)快速響應(yīng)時(shí)間的影響和偏好,改變了這個(gè)等式。應(yīng)用編寫(xiě)者通常會(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ò)避免訪問(wèn)寄存器來(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)、解耦訪問(wèn)/執(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ì)占太多圖表空間),也就沒(méi)有給這個(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)存訪問(wèn)模式提供有效的架構(gòu)支持,可以最大限度地減少片上和外部 DRAM 的內(nèi)存訪問(wèn)。最初的 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)師的熱門(mén)話題,其中一個(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 年公開(kāi)發(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 編寫(xiě)長(zhǎng)程序,而不是使用高級(jí) TensorFlow 框架編寫(xiě)短程序;也就是說(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 框架編寫(xiě)的短程序,該 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)陣列,減少寄存器訪問(wèn)和能量消耗。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)中很少見(jiàn),而這甚至可能導(dǎo)致 TPU 成為該領(lǐng)域未來(lái)工作的典范。我們預(yù)計(jì),其他人也會(huì)跟進(jìn)這個(gè)方向,并將門(mén)檻提得更高。