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