如何看待谷歌公開 tensorflow 專用處理器 TPU?

如下文所述:
http://china.nikkeibp.com.cn/news/cone/77989-201605201753.html?ref=mobilefrom=singlemessageisappinstalled=0

對業界會產生哪些影響?作為相關從業人員,可以做哪些準備?等等。


被TPU論文引用過的人頂著趕論文的壓力強行來答一波。

先說一句題外話。。。這個世界是一個羅生門,每個人都在自說自話。學術圈的一小部分人也不能完全免俗,而科技圈 99% 的人都不免俗。每一套話語背後都有一個隱含的框框,只有掌握全部事實,才有可能跳出框框,獲得真相。

-----------------------我是分割線----------------------

我是屬於體系結構圈子裡第一波(大約是2012~2013年之間)開始做神經網路加速器的。同一時間我知道的工作還有中科院陳雲霽老師和清華的汪玉老師。

總的來說,TPU這次論文有很多有趣的信息,但性能並沒有什麼好驚艷的。

我拎出一些值得注意的地方說一說。

-----------------------我是分割線----------------------

1. 關於TPU和GPU的對比,以及一些爭吵。吵來吵去,其實就是兩點,性能和功能。

性能是說 Performance 和 Performance/Watt,功能是說 Training 和 Inference 。

TPU宣稱自己 Performance / Watt 遠高於GPU(大約25倍)。N家掌門人老黃立刻說你們用K80 比是不厚道的;你們的性能僅僅是 P40 的兩倍而已,Performance / Watt 僅僅是 6倍。而且還不支持浮點和訓練。媒體圈加科技圈就開始熱鬧非凡,資本圈早就暗流涌動搶著投錢做ASIC。

總的來說,TPU和GPU不是誰取代誰的問題(敲黑板!)而是各自都有生存的空間,誰也不能取代誰。比一比性能只是互相學習和參照罷了。

---- 吐槽人家只做 Inference 是不對的!大部分的訓練演算法都在後台運行,快速的部署和訓練迭代是最關心的問題。N家的生態環境和性能都已經做得很好了,我懷疑Google 有沒有動力非要自己做一個訓練的加速器。而用於在線服務/終端的 inference 的重要性我就不多說了,90%的設備都用來做 inference 以提供實際服務了。P40的GPU是不可能插在在線服務端的,數據中心的功耗限制大多數都在 100 w 以下,有的甚至只有50w,比如 MS 和 FB。嵌入式端就更是這樣了,手機和無人機,在應用需求真正起來之後,我們是可以展望另一種形式的TPU被集成的。當然,這一天也不會來的太快。畢竟TPU太專用了,目前只有Google這樣體量的公司,會有應用這種專用加速的動力。

---- 只比較性能(Tera Operations / Sec)是不全面的!只比較 Performance / Watt 也是不對的!剛才說了。不能單純做除法,50 Watt,5Watt,3Watt,都是雲端/嵌入式終端的硬性限制。滿足這個限制基礎上,再來談 Performance / Watt 才有意義。另一方面,TPU一片才幾百刀,老黃家GPU動輒幾千上萬刀。難怪大體量的數據中心會選擇自己做晶元。太划算了 !數據中心的功耗密度已經是一個非常嚴峻的問題了。微軟採用了FPGA的路子是另一條有趣的技術路線。成功與困難並存。大家可以移步李博傑大神的文章(如何評價微軟在數據中心使用FPGA代替傳統CPU的做法? - 知乎)講的很透徹。

所以,我很好奇。老黃為何用 P40 做比較。P4 不是更好么?22 TOPs(INT8)的性能,50 Watt。跟 Google TPU 的 Performance / Watt 的比較,只有 4x 的差距。


2. 關於TPU的一些有趣的觀察。

----- a) 正確分析處理器帶寬很重要。號稱 90 TOPS 的性能。在 MLP 上只有 10 TOPs 的實際性能。而Google又號稱 MLP 佔據了 60%的應用。這才是真正的槽點。敢情只有 1/9 的性能被用上了。其實原因也簡單,主要是被帶寬限制住了,34GB/s 還有很大改進空間。改到 340GB/s就能用上剩下 8/9了。

因為帶寬問題,文中大量出現 Roofline Model,但卻被大家忽略了。我們在北京大學的工作,是世界上第一個提出使用 Roofline Model 對神經網路加速器進行設計優化的( 最初的Roofline Model 由David Patterson老爺子提出,他也是TPU作者之一)。可惜這個概念目前還沒有被大家很好地使用,目前只有TPU和我們的工作使用了Roofline Model。

------ b) 8 Bit 的做法在當時很激進。算上論文發表的時間,算上ASIC設計與迭代周期等等,Google在秘密開始TPU項目可能是在2015年以前(個人猜測)。那個時間段做 8 Bit 真的是非常激進了。學術圈(計算機視覺)里的低定點化研究大約在2016 年才出現。(更新:以下猜測並不準確,請大家移步賈揚清大神的評論)猜測TPU也有可能以浮點設計開始,到2016年才開始改成定點的。如果是這樣,那麼從學術圈研究到工業界的應用,只用了一年不到的時間。而且還是代價巨大的ASIC,Google這麼做確實嚇人一跳。當然,這一跳不是在看到論文時嚇的。圈裡早就傳說TPU是 8-Bit了。

更新一下賈揚清大神的評論:

Google是在2013年左右開始研發TPU,而且當時就確定了8bit計算的方法,當時敢上8bit的緣故是speech證明了8bit可行(可以參見Vanhoucke的論文),所以的確還是很先進的。
(都是公開信息,沒有內幕)

----- c) TPU文中許多應用的存儲量都很小。5M-100MB的參數,片上再擠一擠其實也能放下了。一方面,模型的壓縮和稀疏化能夠派上用場了。另一方面,可以使用有兩塊/多塊晶元,各自處理神經網路的一部分。這樣即使有很大的權重,也可以通過分配到多個晶元的緩存上,來解決這個問題。這樣就沒有帶寬的後顧之憂了。這也將是很有意思的研究方向。當然這件事工程上並不容易,我們在多FPGA上進行了一些探索,但是ASIC上暫時還沒有看到公開發表的研究。

----- d) TPU不是終點,而只是開始。神經網路演算法一直在演變和發展,這套方法的理論還不成熟,應用場景也會在未來幾年發生巨大的變化。大家可以想像一下安防、無人機、智慧大樓、無人駕駛,等等等等。每一個子領域都有 系統/功耗/性能 一系列問題和各種權衡。一方面,是演算法多變的情況下,如何發掘計算的內在並行性,又給上層程序員提供一個高效的編程介面,是一個很重要很實際的問題。另一方面,也有可能會做得極其定製化。犧牲大量編程性以求極低的功耗和性能,比如手機上專門做一個只識別人臉的晶元。

未來很精彩,讓我們拭目以待。

----------------

沒想到一下這麼多人關注這個回答,還有師弟問我工作的事情。那我厚顏無恥地打個小廣告吧。最近 @謝小龍 師弟邀請我一起開一場Live(知乎 Live - 全新的實時問答),時間是5月3號晚上8點,主題是計算機專業學生如何在校招中脫穎而出。因為也是第一次開live,希望大家輕噴,主要是和大家聊聊我們的求職經歷,希望能給大家帶來一丟丟啟發。


我們找到了一些資料,希望能夠解答為什麼TPU運算速度比普通的GPU、CPU組合快15-30倍。同時,我們認為Google在TPU研發上的這些創新極有可能將成為Intel、AMD跟進同類硬體開發的標杆,並最終成為一種趨勢。

一、針對深度學習的定製化研發

TPU是谷歌專門為加速深層神經網路運算能力而研發的一款晶元,其實也是一款ASIC。

ASIC,指依照產品需求不同而定製化的特殊規格集成電路,由特定使用者要求和特定電子系統的需要而設計、製造。一般來說,ASIC在特定功能上進行了專項強化,可以根據需要進行複雜的設計,但相對來說,實現更高處理速度和更低能耗。相對應的,ASIC的生產成本也非常高。

一般公司很難承擔為深度學習開發專門處理器ASIC晶元的成本和風險。首先為了性能必須使用最好的半導體製造工藝,而現在用最新的工藝製造晶元一次性成本就要幾百萬美元,非常貴。就算有錢,還需要拉一支隊伍從頭開始設計,設計時間往往要到一年以上,time to market時間太長,風險很大。如果無法實現規模化的應用,就算開發成功也缺少實際使用價值。所以,企業一般傾向於採用通用性的晶元(如CPU、GPU),或者半定製化晶元(FPGA)。

谷歌之所以敢自己做定製化研發,一方面自然是有錢任性,另一方面也由於谷歌提供的很多服務,包括谷歌圖像搜索(Google Image Search)、谷歌照片(Google Photo)、谷歌雲視覺 API(Google Cloud Vision API)、谷歌翻譯等產品和服務都需要用到深度神經網路。基於谷歌自身龐大的體量,開發一種專門的晶元開始具備規模化應用(大量分攤研發成本)的可能。

假如存在這樣一個場景,其中人們在 1 天中使用谷歌語音進行 3 分鐘搜索,並且我們要在正使用的處理器中為語音識別系統運行深度神經網路,那麼我們就不得不翻倍谷歌數據中心的數量。

我們的負載是用高級的 TensorFlow 框架編寫的,並是用了生產級的神經網路應用(多層感知器、卷積神經網路和 LSTM),這些應用佔到了我們的數據中心的神經網路推理計算需求的 95%。

表 1:6 種神經網路應用(每種神經網路類型各 2 種)佔據了 TPU 負載的 95%。表中的列依次是各種神經網路、代碼的行數、神經網路中層的類型和數量(FC 是全連接層、Conv 是卷積層,Vector 是向量層,Pool 是池化層)以及 TPU 在 2016 年 7 月的應用普及程度。

相對於 CPU 和 GPU 的隨時間變化的優化方法(高速緩存、無序執行、多線程、多處理、預取……),這種 TPU 的確定性的執行模型(deterministic execution model)能更好地匹配我們的神經網路應用的 99% 的響應時間需求,因為 CPU 和 GPU 更多的是幫助對吞吐量(throughout)進行平均,而非確保延遲性能。這些特性的缺失有助於解釋為什麼儘管 TPU 有極大的 MAC 和大內存,但卻相對小和低功耗。

TPU 各模塊的框圖。主要計算部分是右上方的黃色矩陣乘法單元。其輸入是藍色的「權重 FIFO」和藍色的統一緩存(Unified Buffer(UB));輸出是藍色的累加器(Accumulators(Acc))。黃色的激活(Activation)單元在Acc中執行流向UB的非線性函數。

二、大規模片上內存

TPU在晶元上使用了高達24MB的局部內存,6MB的累加器內存以及用於與主控處理器進行對接的內存,總共占晶元面積的37%(圖中藍色部分)。

這表示Google充分意識到片外內存訪問是GPU能效比低的罪魁禍首,因此不惜成本在晶元上放了巨大的內存。相比之下,Nvidia同時期的K80隻有8MB的片上內存,因此需要不斷地去訪問片外DRAM。

TPU 晶元布局圖。藍色的數據緩存占晶元的 37%。黃色的計算是 30%。綠色的I/O 是 10%。紅色的控制只有 2%。CPU 或 GPU 中的控制部分則要大很多(並且非常難以設計)。

三、 低精度(8-bit)計算

TPU的高性能還來源於對於低運算精度的容忍。

研究結果表明低精度運算帶來的演算法準確率損失很小,但是在硬體實現上卻可以帶來巨大的便利,包括功耗更低速度更快占晶元面積更小的運算單元,更小的內存帶寬需求等。

這次公布的信息顯示,TPU採用了8-bit的低精度運算。也就是說每一步操作TPU將會需要更少的晶體管。在晶體管總容量不變的情況下,每單位時間可以在這些晶體管上運行更多的操作,這樣就能夠以更快的速度通過使用更加複雜與強大的機器學習演算法得到更加智能的結果。

在Google的測試中,使用64位浮點數學運算器的18核心運行在2.3 GHz的Haswell Xeon E5-2699 v3處理器能夠處理每秒1.3 TOPS的運算,並提供51GB/秒的內存帶寬;Haswell晶元功耗為145瓦,其系統(擁有256 GB內存)滿載時消耗455瓦特。
相比之下,TPU使用8位整數數學運算器,擁有256GB的主機內存以及32GB的內存,能夠實現34GB/秒的內存帶寬,處理速度高達92 TOPS ,這比Haswell提升了71倍,此外,TPU伺服器的熱功率只有384瓦。

四、脈動式數據流

對於GPU,從存儲器中取指令與數據將耗費大量的時間。TPU甚至沒有取命令的動作,而是主處理器提供給它當前的指令,而TPU根據目前的指令做相應操作,這使得TPU能夠實現更高的計算效率。

在矩陣乘法和卷積運算中,許多數據是可以復用的,同一個數據需要和許多不同的權重相乘並累加以獲得最後結果。因此,在不同的時刻,數據輸入中往往只有一兩個新數據需要從外面取,其他的數據只是上一個時刻數據的移位。

在這種情況下,把片上內存的數據全部Flush再去取新的數據無疑是非常低效的。根據這個計算特性,TPU加入了脈動式數據流的支持,每個時鐘周期數據移位,並取回一個新數據。這樣做可以最大化數據復用,並減小內存訪問次數,在降低內存帶寬壓力的同時也減小了內存訪問的能量消耗。

五、散熱功能強化

對於性能來說,限制處理器速度的最大兩個因素是發熱與邏輯門的延遲,其中發熱是限制速度最主要的因素。現在的處理器大部分使用的是CMOS技術,每一個時鐘周期都會產生能量耗散,所以速度越快,熱量就越大。下面是一張CPU時鐘頻率與能量消耗的關係,可以看到,晶元能耗隨運算速度變化呈現指數級增長。

TPU在降低功耗的同時,對於散熱能力也做了進一步的優化。從TPU的外觀圖可以看出,其中間突出一塊很大的金屬片,這便是為了可以很好地對TPU高速運算是產生大量的熱進行耗散。

六、硬體、軟體持續優化

谷歌認為現在的TPU仍在硬體和軟體方面存在很大的優化空間,比如假定用上了NVIDIA K80 GPU中的GDDR5內存,那麼TPU就可以發揮出更好的性能。

此外,谷歌工程師還為TPU開發了名為CNN1的軟體,其可以讓TPU的運行速度比普通CPU高出70多倍!


&<以上內容根據網路信息編輯整理&>

谷歌發的論文:《數據中心的TPU性能分析》也已經有同行提供了中文版本翻譯

詳見:谷歌發布TPU研究論文,神經網路專用處理器是怎樣煉成的? - 知乎專欄


看完 Patterson 的演講後先來吐個槽。

槽點:

  1. 只用於 Inference。
  2. 通篇拿 8-bit 整數乘加和 32-bit 浮點乘加做比較。
  3. 拿三年前的 GPU (K80,Kepler 架構) 作比較。
  4. 2016 年公布的晶元只有 28nm 製程,頻率也只做到了 700 MHz。
  5. 面積沒有公布,只說小於 Haswell 的一半,估摸著也要 300 mm^2。
  6. 受限於 I/O,從 Rooflines 來看實際的利用率很低。

比較有趣的點:

  1. Inference 場景中 latency 的重要性大於 bandwidth,因此專用處理器更有優勢。Google 要求 latency 不大於 7ms。
  2. 受限於 I/O bus,用的是 CISC 架構,以協處理器的方式工作,類似於早年的 FPU。
  3. 主要的指令只有五種:Read_Host_Memory, Write_Host_Memory, Read_Weights, MatrixMultiply/Convolve, Activate (ReLU, Sigmoid, Maxpool, LRN,...)

2017/4/11 更新 NVIDIA 官方(老黃自己寫的)評價:Compare NVIDIA Pascal GPUs and Google TPU

詳見:https://drive.google.com/file/d/0Bx4hafXDDq2EMzRNcy1vSUxtcEk/view


TPU,主要是應用於Inference的,即這玩意主要是訓練好模型,然後定點化用來做前向推測的。

這個很像Xilinx在FPGA領域做的事,去年HC28上,Deephi也發過一個ppt。

定點化之後效率猛增。

準確率卻沒怎麼減少,8位定點夠了。

GPU精於train,部分,而在predict部分能耗比不好看。


Xilinx公司fpga主要是希望fpga做predict,他們推薦用int8或者8位定點、16位定點做,這樣能耗比很好看。這個和TPU是差不多的。


而Nvidia也做了int8部分,和tpu一樣,但是訓練還是用的不多。所以AMD和Nvidia加入了FP16來加速。

intel/altera則是堆dsp,而且效率不錯但拼fp32和gpu差不多同一量級能耗,能耗個百分之幾十。


專用硬體在其領域內的性能肯定要比通用硬體高,但個人認為這和是否對業內造成衝擊關係不大。
如果未來TF成為最普及的DL框架,並且DL的應用面比現在再廣很多,並且谷歌願意公開相關技術,那麼或許會有很多人選擇TPU做計算,但這些前提成立之前Nvidia更可能先開發DL專用硬體,所以還是別指望Google的黑科技了,還是期待DianNaoYu吧


好事。期待人工智慧的專用晶元。但是深度學習,本身也是夾生飯。還需要一個更大的突破,人類才能進入人工智慧時代。


Google: 我就是想賣些周邊_(:з」∠)_


我NVidia的線人表示毫無壓力,TPU造價又貴又不通用,估計就是Google自己燒錢玩。

果斷匿名。


一千年後,一堆機器人在學校上課,老師向它們展示出一張機器生命進化樹的圖示:「大約在一千年前,名為Nvidia和Google的人類公司製造出了深度學習專用處理器的原型,並展開了激烈的競爭。就如同單細胞生物是所有高級生命的起點一樣,這兩個原型處理器,就是我們現在這些機器生命的進化樹之根。。。。」


稍微研究了一下,這塊晶元的硬體架構本身只能說是平平無奇,構建在其之上的應用才是真有技術含量的。

這裡只談談晶元,功能其實非常簡單,就是矩陣乘法以及矩陣乘法之後的一些非線性計算,論文中看到所謂非線性功能指的應該是比較器功能。

號稱比K80等有幾十倍的能效提升,很重要的一點是因為它使用的是8bit的定點乘加運算。所以其加法的資源要比16bit浮點加法器要少非常多。乘法器資源也少一些。顯然精度要差很多,但論文中號稱8bit足夠精確,那是從軟體和系統層面的考慮,程序都是你們寫的,你們說夠精確就夠精確好了。其他人表示攤手。

另外TPU的核心運算單元的矩陣乘法陣列是一個256x256的MAC陣列,看起來它最拿手的運算是計算AxB=C,其中A是Nx256的矩陣,N是一個遠大於256的數,B是256x256的係數矩陣,C是結果,全部運算耗時n個cycle。

係數是預載入的,數據是每拍輸入一行數據,C的每一行的結果需要耗費256個cycle,當然了行與行是流水的計算的,所以每拍都可以出一行的結果。這麼看來效率達到了最大值了。每個MAC都充分利用了,所以其能效比非常高。

但是缺點也很明顯:太專用了。只能完成乘+加+乘+加......這樣規則的運算,無法應付諸如複數乘法,求倒,求平方根倒數,等常見演算法。這和GPU,CPU的通用設計理念的不符的,所以你拿一個專用器件和通用器件比能效,這本身只能是博眼球的做法,這如果是國內本土廠商的做法,是會被扒光皮然後被噴出翔的

另外這個矩陣乘法陣列本身沒有任何可編程的特性,如果遇到小規模矩陣的乘法,其每行的輸出看起來仍然需要256cycle的延時(待證實),這是一個不小的可改進點。


md我eca就是那FPGA搞這個。(?_?)


對寒武紀啥的類似公司是重大利好啊!

NVDA應該有壓力了,起碼BAT們會去買寒武紀之類的晶元了.

MSFT據說在研發類似的的東西.


如果能做成,會成為下一個風口;
如果做不成,會成為下一個浪尖。


我覺得還是有前景的,tensorflow 在GPU上的優化並不好,memory efficiency也很差,還是有必要研究適合自己演算法結構的硬體的。


太專用了,不堪大用。


好東西亮出來


NV和intel又會失去一個大客戶,最怕的是一旦產生效仿效應,其他大客戶都開始自己造晶元,不買NV和intel的了。


推薦閱讀:

學好深度學習,python得達到什麼程度?
人工智慧的冬天是否將要到來?
深度學習目前主要有哪些研究方向?

TAG:人工智慧 | 谷歌 (Google) | 深度學習(Deep Learning) | GPU | TPU (Tensor Processing Unit) |