谷歌前些天發(fā)布了專為其深度學習算法Tensor Flow設(shè)計的專用集成芯片,命名為張量處理單元(Tensor Processing Unit:TPU),,我們都知道,,相對于谷歌的軟件產(chǎn)品來說,它自行設(shè)計的硬件產(chǎn)品的登場往往沒有那么高調(diào),,偶爾會以雷聲大雨點小的結(jié)局收尾,。但這次的新 硬件涉及的領(lǐng)域是谷歌極為擅長和領(lǐng)先的深度學習。結(jié)合近期谷歌和各大科技巨頭在AI方面的動向,,不難猜到這塊芯片對于谷歌和AI開發(fā)者來說意義重大,,并且會對產(chǎn)業(yè)起到深遠的影響。但谷歌為什么要在通用硬件性能已經(jīng)十分強大的現(xiàn)在仍然會為了深度學習算法專門開發(fā)一款硬件,,而這塊芯片對其他巨頭來說又意味著什 么,解釋起來就不是一件那么容易的事了,。
深度學習的運算流程
對于任何運算來說,, 更換新硬件無非是為了兩個目的:更快的速度和更低的能耗。而深度學習這個看起來玄乎的詞語,,究其本質(zhì)也不過是大量的運算,。我們都知道那句老話:萬能工具的 效率永遠比不上專用工具。無論是CPU,、GPU還是FPGA,,其屬性都算是一種通用工具。因為它們都可以應(yīng)付許多不同的任務(wù),。而專用的TPU自然從道理上 來說就應(yīng)該會比前面幾種硬件的效率都要高,。這里的效率高,既是指速度更快,,也是指能耗會更低,。
但我們不能光講道理,也要擺出一些數(shù)據(jù),。 實際上,,Xilinx曾經(jīng)表示在特定的FPGA開發(fā)環(huán)境下深度學習的能效比會達到CPU/GPU架構(gòu)的25倍,不是一倍兩倍, 是25倍,!同學們可以拿出紙和筆了,,讓我們舉一個實際的例子來講講這種效率提升的原因:以在深度神經(jīng)網(wǎng)絡(luò)(DNN)上進行的圖像識別為例子,網(wǎng)絡(luò)的整個結(jié) 構(gòu)大致是這樣的:
圖片來源:gitbooks.io
其中除輸入層是用來將圖像的特征提取為函數(shù),、輸出層用來輸出結(jié)果外,,其他的隱層都是用來識別、分析圖像的特征的,。當一幅圖被輸入時,,第一層隱層會首先對 其進行逐像素的分析。此時的分析會首先提取出圖像的一些大致特征,,如一些粗略的線條,、色塊等。如果輸入的是一張人臉的圖像,,則首先獲得的會是一些傾斜的顏 色變換,。
第一層的節(jié)點會根據(jù)自己對所得信號的分析結(jié)果決定是否要向下一層輸出信號。而所謂的分析過程,,從數(shù)學上來看就是每個隱層中的節(jié) 點通過特定的函數(shù)來處理相鄰節(jié)點傳來的帶權(quán)重值的數(shù)據(jù),。并決定是否向下一層輸出結(jié)果,通常每一層分析完成后便有些節(jié)點不會再向下一層輸出數(shù)據(jù),,而當下一層 接收到上一層的數(shù)據(jù)的時候,,便能在此基礎(chǔ)上識別出一些更復雜的特征,如眼睛,、嘴巴和鼻子等,,
逐次增加辨識度之后,在最高一層,,算法會完成對面部所有特征的識別,,并在輸出層給出一個結(jié)果判斷?;诓煌膽?yīng)用,,這個結(jié)果可能有不同的表現(xiàn)。比如分辨出這是誰的臉,。
圖片來源:機器之心
不難想象,,由于每一層分析的時候都要對極大量的數(shù)據(jù)進行運算,因此對處理器的計算性能要求極高,。這時CPU的短板就明顯的體現(xiàn)出來了,,在多年的演化 中,CPU依據(jù)其定位需要不斷強化了進行邏輯運算(If else之類)的能力,。相對的卻沒有提高多少純粹的計算能力,。因此CPU在面對如此大量的計算的時候難免會感到吃力,。很自然的,人們就想到用GPU和 FPGA去計算了,。
FPGA和GPU
實際的計算能力除了和硬件的計算速度有關(guān),,也同硬件能支持的指令有關(guān)。我們知道將某些較高階的運算分解成低階運算時會導致計算的效率下降,。但如果硬件本身就支持這種高階運算,,就無需再將其分解了??梢怨?jié)省很多時間和資源,。
FPGA和GPU內(nèi)都有大量的計算單元,因此它們的計算能力都很強,。在進行神經(jīng)網(wǎng)絡(luò)運算的時候速度會比CPU快很多,,但兩者之間仍存在一些差別。GPU 出廠后由于架構(gòu)固定硬件原生支持的指令其實就固定了,。如果神經(jīng)網(wǎng)絡(luò)運算中有GPU不支持的指令,,比如,如果一個GPU只支持加減乘除,,而我們的算法需要其 進行矩陣向量乘法或者卷積這樣的運算,,GPU就無法直接實現(xiàn),就只能通過軟件模擬的方法如用加法和乘法運算的循環(huán)來實現(xiàn),,速度會比編程后的FPGA慢一 些,。而對于一塊FPGA來說,如果FPGA沒有標準的“卷積”指令,,開發(fā)者可以在FPGA的硬件電路里“現(xiàn)場編程”出來,。相當于通過改變FPGA的硬件結(jié) 構(gòu)讓FPGA可以原生支持卷積運算,因此效率會比GPU更高,。
其實講到這里,我們已經(jīng)比較接近谷歌開發(fā)TPU的原因了,。TPU是一種 ASIC,,這是一種與FPGA類似,但不存在可定制性的專用芯片,,如同谷歌描述的一樣,,是專為它的深度學習語言Tensor Flow開發(fā)的一種芯片。因為是專為Tensor Flow所準備,,因此谷歌也不需要它擁有任何可定制性了,,只要能完美支持Tensor Flow需要的所有指令即可。而同時,,TPU運行Tensor Flow的效率無疑會是所有設(shè)備中最高的,。這就是谷歌開發(fā)TPU的最顯而易見的目的:追求極致的效率,。
對其他廠商有何影響?
目前有許多廠商已經(jīng)在AI領(lǐng)域投入了大量的精力并且顯示出一些野心,,在 TPU發(fā)布之前,,這個領(lǐng)域內(nèi)的大多數(shù)廠商都在同時利用FPGA和GPU來改進訓練自己的神經(jīng)網(wǎng)絡(luò)算法。NVIDIA則是其中比較特殊的一家:它是世界最大 的GPU制造商之一,,一直在不遺余力的推廣自己的產(chǎn)品在深度學習領(lǐng)域的應(yīng)用,。但其實GPU的設(shè)計初衷主要并不是進行神經(jīng)網(wǎng)絡(luò)運算,而是圖像處理,。更多是由 于其特殊的構(gòu)造碰巧也比較適用于神經(jīng)網(wǎng)絡(luò)運算罷了,,盡管NVIDIA也在推出一些自有的深度學習算法,但由于GPU自身的特性一直還是被FPGA壓著一 頭,。而此次的TPU會讓這個市場上憑空再多一個競爭對手,,因此如果讓我投票,我認為這款TPU對NVIDIA的影響是最大的,。雖然谷歌表示不會將這款芯片 賣給別的公司,,意味著它不會和其他公司產(chǎn)生直接的競爭。但谷歌的芯片如果性能更優(yōu)秀,,開發(fā)者們和服務(wù)商將越來越多的轉(zhuǎn)向谷歌提供的服務(wù),,而不再使用其他廠 商的服務(wù)和硬件,這也會間接對其他廠商,,尤其是NVIDIA的業(yè)務(wù)造成影響,。
其次是以英特爾為代表的“中間層面”的廠商,英特爾去年年 底收購了全球知名的FPGA大廠Altera,,顯然不會忽略其在深度學習方面的潛力,。但截至目前英特爾并沒有明確的表現(xiàn)出自己要進軍人工智能領(lǐng)域的決心, 也沒有表示自己會推出什么人工智能產(chǎn)品,,而只是表達出了一些將相關(guān)特性應(yīng)用到自己已有產(chǎn)品內(nèi)的意愿,。其實對于這樣的廠商來說,除非他們自己其實已經(jīng)秘密的 進行了很久的人工智能產(chǎn)品開發(fā),。不然其實市場的競爭更多只是為他們帶去了更好的工具,,不會對他們的利益造成什么沖擊。當然,,如果谷歌未來還打算自己設(shè)計 CPU就另當別論,。但是目前谷歌表示自己并沒有這種意愿,而且,,那也是另外一個故事了,。
另一些在人工智能領(lǐng)域已經(jīng)與谷歌有著相似程度的 成就的公司則預計不會受到太多影響,如微軟和蘋果,。微軟一直在探索FPGA對人工智能相關(guān)運算的加速,,并且有自己開發(fā)的算法,。經(jīng)過長時間的調(diào)試,基于 FPGA的這些算法也未必會在最終表現(xiàn)上輸給谷歌多少,。如果微軟愿意,,其實它也可以隨時開始開發(fā)一款自己的人工智能芯片,畢竟微軟也是自己開發(fā)過很多專屬 硬件的了,。
NVIDIA的困境
NVIDIA大力推廣自己的GPU對深度學習算法 起到的加速效果,,但在宣傳的文章中絕口不提FPGA,無疑也是因為明白自己的產(chǎn)品相對于FPGA不僅沒有明顯的優(yōu)勢反而有些不足,。而TPU殺入戰(zhàn)場無疑會 更加加劇NVIDIA的壓力,。GPU的特性短時間內(nèi)可能沒法有翻天覆地的改變,NVIDIA在人工智能領(lǐng)域短期內(nèi)最應(yīng)該做的,,可能就是尋找到適合GPU發(fā) 揮的特殊場景然后發(fā)揚光大了,。至于同F(xiàn)PGA和TPU的正面競爭,或許還得再等幾代,。