2017圖靈獎得主:通用晶元每年提升3%,神經專用架構是未來
來自專欄機器之心49 人贊了文章
選自ACM,作者:Norman P. Jouppi, Cliff Young, Nishant Patil, David Patterson ,機器之心編譯。
2017 年圖靈獎獲得者、《計算機體系結構:量化研究方法》一書的作者、谷歌傑出工程師 David Patterson 等人近日在 ACM Communications 上撰文介紹了對於計算晶元架構未來的展望。作者認為深度神經網路加速的特定領域架構將成為未來主流,而隨著製程提升的困難,通用計算晶元現在每年的提升僅有 3%,或許在 2038 年以前性能都無法翻倍。
摩爾定律的終結將使特定領域的架構成為計算的未來。一個開創性的例子就是谷歌 2015 年推出的張量處理單元(TPU),目前已經在為超過十億人提供服務。TPU 使深度神經網路(DNN)的計算速度提高了 15-30 倍,能耗效率比現有類似技術的 CPU 和 GPU 提高了 30-80 倍。
本文要點
- 雖然 TPU 是一種專用集成電路,但它適用於神經網路框架 TensorFlow 下的大量程序,驅動了谷歌數據中心的許多重要應用,包括圖像識別、翻譯、搜索和遊戲。
- 通過專門為神經網路重新分配晶元計算資源,TPU 在真實數據中心負載環境下效率要比通用類型的計算機高 30-80 倍,目前已為全球 10 億人服務。
- 神經網路的推理階段通常遵循嚴格的響應時間限制,這降低了通用計算機所使用技術的效率,該通用計算機通常運行得較快,但某些情況下也會較慢。
1965 年英特爾創始人之一戈登·摩爾預測晶元中的晶體管數量每兩年會增加一倍。儘管 2017 年 1 月的 ACM Communications 封面呼籲道:「說我要終結還為時過早了」,摩爾定律確實壽終正寢。2014 年推出的 DRAM 晶元包含了 80 億個晶體管,而在人們的預測中即使到了 2019 年,帶有 160 億個晶體管的 DRAM 晶元也不會大規模生產——如果看摩爾定律的話,四年里晶體管數量應該變成四倍多。2010 年款的英特爾至強 E5 處理器擁有 23 億個晶體管,而 2016 年的至強 E5 也只有 72 億個晶體管,或者說比摩爾定律預計的數值低 1.5 倍。毫無疑問,半導體行業還在不斷進步,但其步伐已經放緩。
Dennard Scaling 是一個鮮為人知,但同樣重要的觀察結果,Robert Dennard 在 1974 年認為,晶體管不斷變小,但晶元的功率密度不變。如果晶體管尺寸線性縮小了二分之一,那麼同樣面積上晶元中晶體管的數量就會變為 4 倍。同時,如果電流和電壓都降低了二分之一,它所使用的功率將下降 4 倍,在相同的頻率下提供相同的功率。Dennard Scaling 在被發現的 30 年後結束,其原因並不是因為晶體管的尺寸不再縮小,而是因為電流和電壓不能在繼續下降的同時保持可靠性了。
計算架構師們一直信奉摩爾定律和 Dennard Scaling,並通過複雜的處理器設計和內存層次結構,將資源轉化為性能,而在這其中並沒有顧及到程序員知識中各指令之間的並行性。不幸地是,架構師們最終耗盡了可以有效利用的指令的並行性。2004 年 Dennard Scaling 的結束,以及缺乏更有效指令級並行性方法的狀況,迫使業界選擇從單核高耗能處理器轉換到多核高效率處理器。
今天我們遵守吉恩·阿姆達爾(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 進行推理只需要幾毫秒。針對不同的應用,開發者需要選擇神經網路的類型和層數,並訓練出合適的權重。幾乎所有的訓練都是浮點運算,這就是 GPU 在深度學習時代如此受歡迎的原因之一。
被稱為「量化」的轉換將浮點數轉為整數——通常只有 8 位——這種程度通常足以滿足推斷要求了。與 IEEE 754 16 位浮點乘法相比,8 位整數乘法只需要 1/6 的能耗,佔用 1/6 的空間,而整數加法也能帶來 13 倍能耗和 38 倍空間的提升。
下表展示了兩個例子,共六種 DNN 的運行效率——這代表了谷歌數據中心 2016 年 95% 的深度神經網路工作負載。它們在 TensorFlow 中的代碼都非常短,只有 100-1500 行。這些示例代表在主機伺服器上運行較大應用程序的小組件,可以是數千到數百萬行 C ++代碼。應用程序通常面向用戶,這會導致嚴格的響應時間限制。
表 1. 2016 年 7 月,谷歌 TPU 上的 DNN 工作負載。共六種 DNN 應用(三種 DNN 類型),代表 95% 的 TPU 工作負載。
如表 1 所示,每個模型需要 500 萬至 1 億個權重,這可能需要花費大量時間和能耗來訪問。為了壓縮訪問成本,在一批獨立示例中重複使用相同的權重可以提高性能。
TPU 起源、架構及實現
早在 2006 年,谷歌就開始考慮在其數據中心部署 GPU——現場可編程門陣列(field programmable gate array,FPGA)或專用集成電路(ASIC)。結論是,只有為數不多的能在特殊硬體上運行的應用可以免費使用谷歌大型數據中心的過剩容量,而且很難自由改進。情況在 2013 年出現了轉機,當時谷歌用戶每天使用語音識別 DNN 語音搜索三分鐘,使得谷歌數據中心的計算需求增加了一倍,而如果使用傳統的 CPU 將非常昂貴。因此,谷歌啟動了一項優先順序別非常高的項目,快速生產一款定製晶元用於推理,併購買現成的 GPU 進行訓練。谷歌的目標是將性價比提高 10 倍。為了完成這項任務,谷歌在其數據中心設計、驗證、構建並部署了 GPU,而這一過程僅僅用了 15 個月。
為了降低部署延遲的風險,谷歌工程師將 TPU 設計成 I/O 匯流排上的協處理器,並允許它像 GPU 一樣插入現有伺服器,而不是使 TPU 與 CPU 緊密集成。此外,為了簡化硬體設計和調試,主機伺服器將指令發送給 TPU 令其執行,而不是讓 TPU 去自行獲取。因此,TPU 在理念上更接近浮點單元(FPU)協處理器,而不是 GPU。
谷歌工程師將 TPU 看做一個系統進行優化。為了減少與主機 CPU 的交互,TPU 運行整個推理模型,但提供了與 2015 年及以後的 DNN 相匹配的靈活性,而不局限於 2013 年的 DNN。
圖 2:TPU 的框圖。TPU 指令通過外圍組件互連高速(PCIe)Gen3x16 匯流排從主機被發送到指令緩衝器中。內框通常通過 256 位元組寬度的路徑連接在一起。從右上角開始,矩陣乘法單元為 TPU 的核心,256×256 MAC 可以對有符號或無符號的整數執行 8 位乘法和加法運算。這個 16 位的產品聚集在矩陣單元下方的 32 位累加器的 4MB 中。這四個 MiB 代表含有 4,096, 256 個元素的 32 位累加器。矩陣單元每周期產生一個 256 元素的部分和。
矩陣單元的權重通過片內「權重 FIFO」來分級,該 FIFO 從我們稱之為「權重存儲器」的片外 8GB DRAM 中讀取;為了推理,權重僅作讀取;8GB 支持很多同時激活的模型。權重 FIFO 有四層深。中間結果保存在 24MiB 的片上「統一緩衝器」中,可以作為矩陣單元的輸入。可編程 DMA 控制器將數據傳送到 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 晶元。
很多計算機架構師沒有考慮到從產品發布到晶元、主板、軟體可以服務於數據中心的用戶之間的時間差。表 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、響應時間、吞吐量
為了說明這六個 app 在三個處理器上的性能,我們使用了高性能計算機群(HPC)的 Roofline 性能模型。這一簡單的視覺模型雖然不完美,但揭示了性能瓶頸出現的原因。該模型背後的假設是 app 無法適應片上緩存,因此它們要麼計算受限,要麼內存帶寬受限。對於 HPC,y 軸表示每秒浮點運算性能(單位是 FLOPS),因此峰值計算率形成了 roofline 的「平緩」區(flat part)。x 軸表示運算密度(operational intensity),單位是 FLOPS/byte。內存帶寬表示每秒多少比特,形成了 roofline 的「傾斜」部分(slanted part),因為 (FLOPS/sec)/ (FLOPS/Byte) = Bytes/sec。沒有充足的運算密度時,程序受限於內存帶寬,性能只能在 roofline 的「傾斜」部分之下。
一個應用的每秒實際計算量與其天花板計算量之間的距離代表了保持運算密度不變時性能提升的潛力;提升運算密度的優化(如緩存塊)可能帶來更大的性能提升。
為了在 TPU 上使用 Roofline 模型,當 DNN 應用被量化時,我們首先將浮點運算替換成整數運算。由於權重步伐無法正常適應 DNN 應用的片上內存,因此第二個改變就是將運算密度重新定義為每權重比特的整數乘積累加運算(integer multiply-accumulate operations per byte of weights),如表 1 所示。
圖 3 展示了單個 TPU、CPU 和 GPU 在 log-log scale 上的 Roofline 模型。TPU 的 Roofline 模型「傾斜」部分較長,其運算密度意味著性能更多地受限於內存帶寬,而不是計算峰值。六個應用中有五個都接近天花板,MLP 和 LSTM 受限於內存,CNN 受限於計算。
圖 3:TPU、CPU 和 GPU 在 log-log 圖上的 roofline 模型。五角星表示 TPU,三角形表示英偉達 Tesla K80 GPU,圓表示英特爾酷睿處理器(Haswell);所有 TPU 五角星都與其他兩種晶元的 roofline 模型持平或在後者之上。
如圖 3 所示,這六個 DNN 應用與 Haswell 和 K80 roofline 天花板的距離大於與 TPU roofline 天花板的距離。響應時間是原因所在。這些應用中的很多個是面向終端用戶服務的一部分。研究表明,即使響應時間的些微增加都會導致用戶使用該服務的頻率降低。訓練可能沒有苛刻的響應時間 deadline,但推斷通常有,或者說相比於吞吐量,推斷更偏好 latency。
例如,按照應用開發者的要求,MLP0 的 99th 百分位響應時間通常為 7ms。(每秒推斷和 7ms 的延遲包括伺服器主機時間和加速器時間。)如果對響應時間的限制不嚴格,Haswell 和 K80 分別以 MLP0 最高吞吐量的 42% 和 37% 運行。這些限制也會影響到 TPU,它會以 80% 的吞吐量來運行,更加接近 TPU 的 MLP0 最大吞吐量。與 CPU 和 GPU 相比,單線程 TPU 沒有複雜的微架構特徵,即消耗晶體管和功率來提高平均性能,而非 99th 百分位的情況,即 TPU 沒有緩存、分支預測、亂序執行、多處理、推測預取(speculative prefetching)、地址合併(address coalescing)、多線程、上下文切換(context switching)等。極簡是領域專用處理器的優勢。
表 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)、性能/功耗(Performance/Watt)
大批量購買計算機時會更多地考慮性價比而非性能。數據中心最好的成本指標是總體擁有成本(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 進行改進後的晶元。
對替代性 TPU 設計的評估
和 FPU 類似,TPU 協同處理器比較容易評估,因此我們為六個應用創建了一個性能模型。模型結果和硬體性能的平均差距小於 10%。
我們使用性能模型來評估一款假設的 TPU 晶元 TPU(使用同樣的技術再用 15 個月我們也能設計出這款晶元)。更具攻擊性的邏輯合成和模塊設計仍然可以把時鐘頻率提高 50%。為 GDDR5 內存設計介面電路(就像 K80 那樣)可以將權重內存帶寬(weight memory bandwidth)提高四倍,將 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,則大部分服務需要累積足夠大的批量。即使 2014 年穀歌關注響應時間(LSTM1)的應用開發者稱,2014 年的限制是 10ms,而真正向 TPU 移植時 10ms 將被減少至 7ms。很多此類服務對 TPU 的意料之外的要求,以及它們對快速響應時間的影響和偏好,改變了這個等式。應用編寫者通常會選擇降低延遲,而不是累積更大的批量。幸運的是,TPU 具備一個簡單、可重複的執行模型,來滿足互動式服務的響應時間要求,此類高峰值吞吐量、小批量大小導致 TPU 具備比當前 CPU 和 GPU 更好的性能。
謬誤。K80 GPU 架構很適合進行 DNN 推斷。我們發現 TPU 在性能、能耗和成本方面優於 K80 GPU 有五個方面的原因。一,TPU 只有一個處理器,而 K80 有 13 個,單線程當然更容易滿足嚴格的延遲目標。二,TPU 具備一個非常大的二維乘法單元,GPU 有 13 個小的一維乘法單元。DNN 的矩陣相乘密度適合二維陣列中的算術邏輯運算單元。三,二維陣列還能通過避免訪問寄存器來促成脈動實現,節約能源。四,TPU 的量化應用使用 K80 並不支持的 8 比特整數而不是 GPU 的 32 比特浮點數。數據小幅度改善的不僅是計算能耗,還能四倍化權重 FIFO 的有效容量和權重內存的有效帶寬。(儘管使用的是 8 比特整數,但這些應用被訓練來實現與浮點數相同的準確率。)五,TPU 忽略 GPU 需要而 DNN 不需要的特徵,從而縮小 TPU 晶元、節約能耗、為其他更新留下空間。TPU 晶元的大小几乎是 K80 的一半,通常運行所需能量是後者的三分之一,而它的內存卻是後者的 3.5 倍。這五個因素導致 TPU 在能耗和性能方面優於 K80 GPU 30 倍。
陷阱。在設計領域專用架構時不顧架構歷史。不適用通用計算的想法可能適合領域專用架構。對於 TPU 而言,三個重要的架構特徵可以追溯到 1980 年代早期:脈動陣列(systolic array)、解耦訪問/執行(decoupled access/execute)和複雜的指令集。第一個特徵減少了大型矩陣相乘單元的面積和能耗;第二個特徵在矩陣相乘單元運算期間並行獲取權重;第三個特徵更好地利用 PCIe bus 的有限帶寬來發送指令。因此,了解架構歷史的領域專用架構具備競爭優勢。
謬誤。如果谷歌對 CPU 使用更加高效,它得到的結果將可以媲美 TPU。由於有效使用高級向量擴展(AVX2)整數支持需要大量工作,最初在 CPU 上只有一個 DNN 有 8 位結果,其收益大約是 3.5 倍。用浮點而不是 roofline 來顯示所有 CPU 結果,會更加明確(也不需要太多空間)。如果所有 DNN 都有類似的加速,性能/功耗比將分別從 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 年的《Communications》中所述,DianNao 家族有四種 DNN 架構,通過對 DNN 應用程序中的內存訪問模式提供有效的架構支持,可以最大限度地減少片上和外部 DRAM 的內存訪問。最初的 DianNao 使用 64 個 16 位整數乘法累加單元的數組。
DNN 的特定領域架構仍然是計算機架構師的熱門話題,主要聚焦於稀疏矩陣架構,這是在 2015 年 TPU 首次部署之後提出的。高效推理機基於第一次傳遞,通過過濾出非常小的值,將權重數量減少 9 倍左右,然後使用哈夫曼編碼進一步縮小數據以提高推理機的性能。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 年它與 TPU 同時在微軟數據中心部署了 28 納米 Stratix V FPGA。Catapult 運行 CNN 比普通伺服器快 2.3 倍。也許 Catapult 和 TPU 最顯著的區別在於,為了獲得最佳性能,用戶必須使用低級硬體設計語言 Verilog 編寫長程序,而不是使用高級 TensorFlow 框架編寫短程序;也就是說,「可再編程性」(re-programmability)來自於 TPU 的軟體,而不是最快 FPGA 的固件。
總結
儘管 TPU 在 I/O 匯流排上,並且內存帶寬相對有限,限制了其使用(六個 DNN 應用程序中有四個內存受限),但每個周期 65536 次乘法累加的一小部分仍然數目不小,如 roofline 性能模型所示。這個結果表明,Amdahl 定律的「cornucopia 推論」——大量廉價資源的低效利用仍然可以提供頗具性價比的高性能。
我們了解到,推理應用具有嚴格的響應時間限制,因為它們通常是面向用戶的應用;因此,當面對 99% 的延遲期限時,DNN 架構需要表現良好。
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 成為該領域未來工作的典型。我們預計,其它人將會迎頭趕上,將門檻提得更高。
原文鏈接:https://cacm.acm.org/magazines/2018/9/230571-a-domain-specific-architecture-for-deep-neural-networks/fulltext
推薦閱讀:
※致敬中國「智」造:科技乃國之利器 創新者贏得先機
※Alpha系列(二)——從MPT到APT
※架構之美-最強卷積神經網路架構設計初想
※機器學習從業者必知的5種回歸損失函數
※痴人、信徒、先驅:深度學習三巨頭等口述神經網路復興史