Google 設計的 TPU 芯片將成為誰的噩夢?

Google前些天發佈了專為其深度學習算法Tensor Flow設計的專用集成芯片,命名為張量處理單元(Tensor Processing Unit:TPU),我們都知道,相對於Google的軟件產品來説,它自行設計的硬件產品的登場往往沒有那麼高調,偶爾會以雷聲大雨點小的結局收尾。但這次的新硬件涉及的領域是Google極為擅長和領先的深度學習。結合近期Google和各大科技巨頭在AI方面的動向,不難猜到這塊芯片對於Google和AI開發者來説意義重大,並且會對產業起到深遠的影響。但Google為什麼要在通用硬件性能已經十分強大的現在仍然會為了深度學習算法專門開發一款硬件,而這塊芯片對其他巨頭來説又意味着什麼,解釋起來就不是一件那麼容易的事了。

深度學習的運算流程

對於任何運算來説,更換新硬件無非是為了兩個目的:更快的速度和更低的能耗。而深度學習這個看起來玄乎的詞語,究其本質也不過是大量的運算。我們都知道那句老話:萬能工具的效率永遠比不上專用工具。無論是CPU、GPU還是FPGA,其屬性都算是一種通用工具。因為它們都可以應付許多不同的任務。而專用的TPU自然從道理上來説就應該會比前面幾種硬件的效率都要高。這裏的效率高,既是指速度更快,也是指能耗會更低。

但我們不能光講道理,也要擺出一些數據。實際上,Xilinx曾經表示在特定的FPGA開發環境下深度學習的能效比會達到CPU/GPU架構的25倍,不是一倍兩倍, 是25倍!同學們可以拿出紙和筆了,讓我們舉一個實際的例子來講講這種效率提升的原因:以在深度神經網絡(DNN)上進行的圖像識別為例子,網絡的整個結構大致是這樣的:


圖片來源:gitbooks.io

其中除輸入層是用來將圖像的特徵提取為函數、輸出層用來輸出結果外,其他的隱層都是用來識別、分析圖像的特徵的。當一幅圖被輸入時,第一層隱層會首先對其進行逐像素的分析。此時的分析會首先提取出圖像的一些大致特徵,如一些粗略的線條、色塊等。如果輸入的是一張人臉的圖像,則首先獲得的會是一些傾斜的顏色變換。

第一層的節點會根據自己對所得信號的分析結果決定是否要向下一層輸出信號。而所謂的分析過程,從數學上來看就是每個隱層中的節點通過特定的函數來處理相鄰節點傳來的帶權重值的數據。並決定是否向下一層輸出結果,通常每一層分析完成後便有些節點不會再向下一層輸出數據,而當下一層接收到上一層的數據的時候,便能在此基礎上識別出一些更復雜的特徵,如眼睛、嘴巴和鼻子等,

逐次增加辨識度之後,在最高一層,算法會完成對面部所有特徵的識別,並在輸出層給出一個結果判斷。基於不同的應用,這個結果可能有不同的表現。比如分辨出這是誰的臉。


圖片來源:機器之心

不難想象,由於每一層分析的時候都要對極大量的數據進行運算,因此對處理器的計算性能要求極高。這時CPU的短板就明顯的體現出來了,在多年的演化中,CPU依據其定位需要不斷強化了進行邏輯運算(If else之類)的能力。相對的卻沒有提高多少純粹的計算能力。因此CPU在面對如此大量的計算的時候難免會感到吃力。很自然的,人們就想到用GPU和FPGA去計算了。
FPGA和GPU

實際的計算能力除了和硬件的計算速度有關,也同硬件能支持的指令有關。我們知道將某些較高階的運算分解成低階運算時會導致計算的效率下降。但如果硬件本身就支持這種高階運算,就無需再將其分解了。可以節省很多時間和資源。

FPGA和GPU內都有大量的計算單元,因此它們的計算能力都很強。在進行神經網絡運算的時候速度會比CPU快很多,但兩者之間仍存在一些差別。GPU出廠後由於架構固定硬件原生支持的指令其實就固定了。如果神經網絡運算中有GPU不支持的指令,比如,如果一個GPU只支持加減乘除,而我們的算法需要其進行矩陣向量乘法或者卷積這樣的運算,GPU就無法直接實現,就只能通過軟件模擬的方法如用加法和乘法運算的循環來實現,速度會比編程後的FPGA慢一些。而對於一塊FPGA來説,如果FPGA沒有標準的“卷積”指令,開發者可以在FPGA的硬件電路里“現場編程”出來。相當於通過改變FPGA的硬件結構讓FPGA可以原生支持卷積運算,因此效率會比GPU更高。

其實講到這裏,我們已經比較接近Google開發TPU的原因了。TPU是一種ASIC,這是一種與FPGA類似,但不存在可定製性的專用芯片,如同Google描述的一樣,是專為它的深度學習語言Tensor Flow開發的一種芯片。因為是專為Tensor Flow所準備,因此Google也不需要它擁有任何可定製性了,只要能完美支持Tensor Flow需要的所有指令即可。而同時,TPU運行Tensor Flow的效率無疑會是所有設備中最高的。這就是Google開發TPU的最顯而易見的目的:追求極致的效率。

對其他廠商有何影響?

目前有許多廠商已經在AI領域投入了大量的精力並且顯示出一些野心,在TPU發佈之前,這個領域內的大多數廠商都在同時利用FPGA和GPU來改進訓練自己的神經網絡算法。NVIDIA則是其中比較特殊的一家:它是世界最大的GPU製造商之一,一直在不遺餘力的推廣自己的產品在深度學習領域的應用。但其實GPU的設計初衷主要並不是進行神經網絡運算,而是圖像處理。更多是由於其特殊的構造碰巧也比較適用於神經網絡運算罷了,儘管NVIDIA也在推出一些自有的深度學習算法,但由於GPU自身的特性一直還是被FPGA壓着一頭。而此次的TPU會讓這個市場上憑空再多一個競爭對手,因此如果讓我投票,我認為這款TPU對NVIDIA的影響是最大的。雖然Google表示不會將這款芯片賣給別的公司,意味着它不會和其他公司產生直接的競爭。但Google的芯片如果性能更優秀,開發者們和服務商將越來越多的轉向Google提供的服務,而不再使用其他廠商的服務和硬件,這也會間接對其他廠商,尤其是NVIDIA的業務造成影響。

其次是以英特爾為代表的“中間層面”的廠商,英特爾去年年底收購了全球知名的FPGA大廠Altera,顯然不會忽略其在深度學習方面的潛力。但截至目前英特爾並沒有明確的表現出自己要進軍人工智能領域的決心,也沒有表示自己會推出什麼人工智能產品,而只是表達出了一些將相關特性應用到自己已有產品內的意願。其實對於這樣的廠商來説,除非他們自己其實已經祕密的進行了很久的人工智能產品開發。不然其實市場的競爭更多隻是為他們帶去了更好的工具,不會對他們的利益造成什麼衝擊。當然,如果Google未來還打算自己設計CPU就另當別論。但是目前Google表示自己並沒有這種意願,而且,那也是另外一個故事了。

另一些在人工智能領域已經與Google有着相似程度的成就的公司則預計不會受到太多影響,如微軟和蘋果。微軟一直在探索FPGA對人工智能相關運算的加速,並且有自己開發的算法。經過長時間的調試,基於FPGA的這些算法也未必會在最終表現上輸給Google多少。如果微軟願意,其實它也可以隨時開始開發一款自己的人工智能芯片,畢竟微軟也是自己開發過很多專屬硬件的了。

NVIDIA的困境

NVIDIA大力推廣自己的GPU對深度學習算法起到的加速效果,但在宣傳的文章中絕口不提FPGA,無疑也是因為明白自己的產品相對於FPGA不僅沒有明顯的優勢反而有些不足。而TPU殺入戰場無疑會更加加劇NVIDIA的壓力。GPU的特性短時間內可能沒法有翻天覆地的改變,NVIDIA在人工智能領域短期內最應該做的,可能就是尋找到適合GPU發揮的特殊場景然後發揚光大了。至於同FPGA和TPU的正面競爭,或許還得再等幾代。


資料來源:雷鋒網
作者/編輯:黃鑫

如果喜歡我們的文章,請即分享到︰