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