但我們不能光講道理,也要擺出一些數(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)將圖像的特征提取為函數(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í)的臉。
不難想象,由于每一層分析的時(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)的“卷積”指令,可以在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)。但谷歌的芯片如果性能更,們和服務(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)屬硬件的了。