目前,Google、Facebook、Microsoft、百度等科技巨頭紛紛涉足人工智能。市場(chǎng)對(duì)人工智能的熱情持續(xù)高漲,特別是硬件領(lǐng)域。有分析師指出,人工智能將成為下一個(gè)科技風(fēng)口,主要的就包括硬件。
前幾天,AlphaGo確定5月份要來(lái)到中國(guó),對(duì)戰(zhàn)當(dāng)前世界排名第一的圍棋選手柯潔,它是否能打敗柯潔,變的勢(shì)不可擋?去年,在AlphaGo打敗李世乭的時(shí)候,或許我們都曾想過(guò),它怎么能這么聰明,是什么支撐了一個(gè)機(jī)器人的強(qiáng)大快速的運(yùn)算能力呢?
沒錯(cuò),關(guān)鍵就是谷歌的TPU。在圖像語(yǔ)音識(shí)別、無(wú)人駕駛等人工智能領(lǐng)域的運(yùn)用層面,圖形處理器 (GPU)正迅速擴(kuò)大市場(chǎng)占比,而谷歌專門為人工智能研發(fā)的TPU則被視為GPU的競(jìng)爭(zhēng)對(duì)手。TPU是什么?它怎么就被視為GPU的競(jìng)爭(zhēng)對(duì)手了呢?
人工智能各要素的概念
人工智能的實(shí)現(xiàn)三s需要依賴三個(gè)要素:算法是核心,硬件和數(shù)據(jù)是基礎(chǔ)。
算法主要分為為工程學(xué)法和模擬法。工程學(xué)方法是采用傳統(tǒng)的編程技術(shù),利用大量數(shù)據(jù)處理經(jīng)驗(yàn)改進(jìn)提升算法性能;模擬法則是模仿人類或其他生物所用的方法或者技能,提升算法性能,例如遺傳算法和神經(jīng)網(wǎng)絡(luò)。
硬件方面,目前主要是使用 GPU 并行計(jì)算神經(jīng)網(wǎng)絡(luò)。
下圖就可體現(xiàn)這些要素之間的關(guān)系:
從產(chǎn)業(yè)結(jié)構(gòu)來(lái)講,人工智能生態(tài)分為基礎(chǔ)、技術(shù)、應(yīng)用三層。
基礎(chǔ)層包括數(shù)據(jù)資源和計(jì)算能力;技術(shù)層包括算法、模型及應(yīng)用開發(fā);應(yīng)用層包括人工智能+各行業(yè)(領(lǐng)域),比如在互聯(lián)網(wǎng)、金融、汽車、游戲等產(chǎn)業(yè)應(yīng)用的語(yǔ)音識(shí)別、人臉識(shí)別、無(wú)人機(jī)、機(jī)器人、無(wú)人駕駛等功能。
什么是TPU
TPU,即谷歌的張量處理器——Tensor Processing Unit。
據(jù)谷歌工程師Norm Jouppi介紹,TPU是一款為機(jī)器學(xué)習(xí)而定制的芯片,經(jīng)過(guò)了專門深度機(jī)器學(xué)習(xí)方面的訓(xùn)練,它有更高效能(每瓦計(jì)算能力)。大致上,相對(duì)于現(xiàn)在的處理器有7年的領(lǐng)先優(yōu)勢(shì),寬容度更高,每秒在芯片中可以擠出更多的操作時(shí)間,使用更復(fù)雜和強(qiáng)大的機(jī)器學(xué)習(xí)模型,將之更快的部署,用戶也會(huì)更加迅速地獲得更智能的結(jié)果。谷歌專門為人工智能研發(fā)的TPU被疑將對(duì)GPU構(gòu)成威脅。不過(guò)谷歌表示,其研發(fā)的TPU不會(huì)直接與英特爾或NVIDIA進(jìn)行競(jìng)爭(zhēng)。
TPU最新的表現(xiàn)正是人工智能與人類頂級(jí)圍棋手的那場(chǎng)比賽。在AlphaGo戰(zhàn)勝李世石的系列賽中,TPU能讓AlphaGo“思考”更快,“想”到更多棋招、更好地預(yù)判局勢(shì)。
深度學(xué)習(xí)的運(yùn)算流程
對(duì)于任何運(yùn)算來(lái)說(shuō),更換新硬件無(wú)非是為了兩個(gè)目的:更快的速度和更低的能耗。而深度學(xué)習(xí)這個(gè)看起來(lái)玄乎的詞語(yǔ),究其本質(zhì)也不過(guò)是大量的運(yùn)算。我們都知道那句老話:萬(wàn)能工具的效率永遠(yuǎn)比不上專用工具。無(wú)論是CPU、GPU還是FPGA,其屬性都算是一種通用工具。因?yàn)樗鼈兌伎梢詰?yīng)付許多不同的任務(wù)。而專用的TPU自然從道理上來(lái)說(shuō)就應(yīng)該會(huì)比前面幾種硬件的效率都要高。這里的效率高,既是指速度更快,也是指能耗會(huì)更低。
但我們不能光講道理,也要擺出一些數(shù)據(jù)。實(shí)際上,Xilinx曾經(jīng)表示在特定的FPGA開發(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í)的臉。
谷歌的TPU對(duì)其他廠商有什么影響?
在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的影響是最大的。
另一些在人工智能領(lǐng)域已經(jīng)與谷歌有著相似程度的成就的公司則預(yù)計(jì)不會(huì)受到太多影響,如微軟和蘋果。微軟一直在探索FPGA對(duì)人工智能相關(guān)運(yùn)算的加速,并且有自己開發(fā)的算法。經(jīng)過(guò)長(zhǎng)時(shí)間的調(diào)試,基于FPGA的這些算法也未必會(huì)在最終表現(xiàn)上輸給谷歌多少。如果微軟愿意,其實(shí)它也可以隨時(shí)開始開發(fā)一款自己的人工智能芯片,畢竟微軟也是自己開發(fā)過(guò)很多專屬硬件的了。
不難想象,由于每一層分析的時(shí)候都要對(duì)極大量的數(shù)據(jù)進(jìn)行運(yùn)算,因此對(duì)處理器的計(jì)算性能要求極高。這時(shí)CPU的短板就明顯的體現(xiàn)出來(lái)了,在多年的演化中,CPU依據(jù)其定位需要不斷強(qiáng)化了進(jìn)行邏輯運(yùn)算(If else之類)的能力。相對(duì)的卻沒有提高多少純粹的計(jì)算能力。因此CPU在面對(duì)如此大量的計(jì)算的時(shí)候難免會(huì)感到吃力。很自然的,人們就想到用GPU和FPGA去計(jì)算了。
目前的深度學(xué)習(xí)硬件設(shè)備還有哪些?與傳統(tǒng)CPU有何差異?
一.FPGA
FPGA最初是從專用集成電路發(fā)展起來(lái)的半定制化的可編程電路,它無(wú)法像CPU一樣靈活處理沒有被編程過(guò)的指令,但是可以根據(jù)一個(gè)固定的模式來(lái)處理輸入的數(shù)據(jù)然后輸出,也就是說(shuō)不同的編程數(shù)據(jù)在同一片F(xiàn)PGA可以產(chǎn)生不同的電路功能,靈活性及適應(yīng)性很強(qiáng),因此它可以作為一種用以實(shí)現(xiàn)特殊任務(wù)的可再編程芯片應(yīng)用與機(jī)器學(xué)習(xí)中。
譬如百度的機(jī)器學(xué)習(xí)硬件系統(tǒng)就是用FPGA打造了AI專有芯片,制成了AI專有芯片版百度大腦——FPGA版百度大腦,而后逐步應(yīng)用在百度產(chǎn)品的大規(guī)模部署中,包括語(yǔ)音識(shí)別、廣告點(diǎn)擊率預(yù)估模型等。在百度的深度學(xué)習(xí)應(yīng)用中,F(xiàn)PGA相比相同性能水平的硬件系統(tǒng)消耗能率更低,將其安裝在刀片式服務(wù)器上,可以完全由主板上的PCI Express總線供電,并且使用FPGA可以將一個(gè)計(jì)算得到的結(jié)果直接反饋到下一個(gè),不需要臨時(shí)保存在主存儲(chǔ)器,所以存儲(chǔ)帶寬要求也在相應(yīng)降低。
二.GPU
英偉達(dá)(NVIDIA)制造的圖形處理器 (GPU)專門用于在個(gè)人電腦、工作站、游戲機(jī)和一些移動(dòng)設(shè)備上進(jìn)行圖像運(yùn)算工作,是顯示卡的“心臟”。
1.GPU與CPU的區(qū)別
本身架構(gòu)方式和運(yùn)算目的的不同,導(dǎo)致英特爾制造的CPU 和 GPU之間有所區(qū)別。
GPU之所以能夠迅速發(fā)展,主要原因是GPU針對(duì)密集的、高并行的計(jì)算,這正是圖像渲染所需要的,因此 GPU 設(shè)計(jì)了更多的晶體管專用于數(shù)據(jù)處理,而非數(shù)據(jù)高速緩存和流控制。
與CPU相比,GPU擁有更多的處理單元。GPU和CPU 上大部分面積都被緩存所占據(jù)有所不同,諸如GTX 200 GPU之類的核心內(nèi)很大一部分面積都作為計(jì)算之用。如果用具體數(shù)據(jù)表示,大約估計(jì)在 CPU 上有 20%的晶體管是用作運(yùn)算之用的,而(GTX 200)GPU 上有 80%的晶體管用作運(yùn)算:
GPU 的處理核心 SP 基于傳統(tǒng)的處理器核心設(shè)計(jì),能夠進(jìn)行整數(shù),浮點(diǎn)計(jì)算,邏輯運(yùn)算等操作,從硬體設(shè)計(jì)上看就是一種完全為多線程設(shè)計(jì)的處理核心,擁有復(fù)數(shù)的管線平臺(tái)設(shè)計(jì),完全勝任每線程處理單指令的工作。
GPU 處理的首要目標(biāo)是運(yùn)算以及數(shù)據(jù)吞吐量,而 CPU 內(nèi)部晶體管的首要目的是降低處理的延時(shí)以及保持管線繁忙,這也決定了 GPU 在密集型計(jì)算方面比起 CPU 來(lái)更有優(yōu)勢(shì)。
2.GPU+CPU異構(gòu)運(yùn)算
就目前來(lái)看,GPU不是完全代替CPU,而是兩者分工合作。
在 GPU 計(jì)算中 CPU 和 GPU 之間是相連的,而且是一個(gè)異構(gòu)的計(jì)算環(huán)境。這就意味著應(yīng)用程序當(dāng)中,順序執(zhí)行這一部分的代碼是在 CPU 里面進(jìn)行執(zhí)行的,而并行的也就是計(jì)算密集這一部分是在 GPU 里面進(jìn)行。
異構(gòu)運(yùn)算(heterogeneous computing)是通過(guò)使用計(jì)算機(jī)上的主要處理器,如CPU 以及 GPU 來(lái)讓程序得到更高的運(yùn)算性能。一般來(lái)說(shuō),CPU 由于在分支處理以及隨機(jī)內(nèi)存讀取方面有優(yōu)勢(shì),在處理串聯(lián)工作方面較強(qiáng)。在另一方面,GPU 由于其特殊的核心設(shè)計(jì),在處理大量有浮點(diǎn)運(yùn)算的并行運(yùn)算時(shí)候有著天然的優(yōu)勢(shì)。完全使用計(jì)算機(jī)性能實(shí)際上就是使用 CPU 來(lái)做串聯(lián)工作,而 GPU 負(fù)責(zé)并行運(yùn)算,異構(gòu)運(yùn)算就是“使用合適的工具做合適的事情”。
只有很少的程序使用純粹的串聯(lián)或者并行的,大部分程序同時(shí)需要兩種運(yùn)算形式。編譯器、文字處理軟件、瀏覽器、e-mail 客戶端等都是典型的串聯(lián)運(yùn)算形式的程序。而視頻播放,視頻壓制,圖片處理,科學(xué)運(yùn)算,物理模擬以及 3D 圖形處理(Ray tracing 及光柵化)這類型的應(yīng)用就是典型的并行處理程序。
三.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沒有標(biāo)準(zhǔn)的“卷積”指令,開發(fā)者可以在FPGA的硬件電路里“現(xiàn)場(chǎng)編程”出來(lái)。相當(dāng)于通過(guò)改變FPGA的硬件結(jié)構(gòu)讓FPGA可以原生支持卷積運(yùn)算,因此效率會(huì)比GPU更高。
其實(shí)講到這里,我們已經(jīng)比較接近谷歌開發(fā)TPU的原因了。TPU是一種ASIC,這是一種與FPGA類似,但不存在可定制性的專用芯片,如同谷歌描述的一樣,是專為它的深度學(xué)習(xí)語(yǔ)言Tensor Flow開發(fā)的一種芯片。因?yàn)槭菍門ensor Flow所準(zhǔn)備,因此谷歌也不需要它擁有任何可定制性了,只要能完美支持Tensor Flow需要的所有指令即可。而同時(shí),TPU運(yùn)行Tensor Flow的效率無(wú)疑會(huì)是所有設(shè)備中最高的。這就是谷歌開發(fā)TPU的最顯而易見的目的:追求極致的效率。
一場(chǎng)人工智能芯片之爭(zhēng)在谷歌發(fā)布這款專用機(jī)機(jī)器學(xué)習(xí)算法的專用芯片-TPU之后正式拉開序幕。誰(shuí)能走在人工智能的前面,誰(shuí)能主導(dǎo)未來(lái)人工智能發(fā)展趨勢(shì),掌握核心技術(shù),誰(shuí)就能贏得這場(chǎng)戰(zhàn)爭(zhēng)的勝利吧!