1. 程式人生 > >[轉] CPU GPU TPU

[轉] CPU GPU TPU

Google I/O是由Google舉行的網路開發者年會,討論的焦點是用Google和開放網路技術開發網路應用。這個年會自2008年開始舉辦,到今年已經是舉辦的第9屆了。

在今年的年會上,Google主要釋出了以下8種產品:智慧助手Google Assistant,與Amazon Echo競爭的無線揚聲器和語音命令裝置Google Home,訊息應用Allo,視訊呼叫應用Duo,VR平臺Daydream,獨立應用程式的支援Android Wear 2.0,允許不安裝而使用應用的Android Instant Apps,以及允許在Chromebook上使用Android應用Google Play on Chrome OS。

而這8中產品主要都集中在了軟體領域。

在Google I/O 2016的主題演講進入尾聲時,Google的CEO皮採提到了一項他們這段時間在AI和機器學習上取得的成果,一款叫做Tensor Processing Unit(張量處理單元)的處理器,簡稱TPU。在大會上皮採只是介紹了這款TPU的一些效能指標,並在隨後的部落格中公佈了一些使用場景,並沒有對這款處理器的架構以及內部的運作機制進行詳細闡述,所以我們也許需要從一些常見的處理器的結構出發,試圖猜測與探究下這款用於機器學習的專屬晶片到底有著怎樣的一個面孔。

首先我們先來看看我們最熟悉的中央處理器(Central Processing Unit),簡稱CPU。它是一種超大規模的整合晶片,而且是一種通用晶片,也就是說,它可以用它來做很多種類的事情。我們日常使用的電腦使用的處理器基本上都是CPU,看個電影、聽個音樂、跑個程式碼,都沒啥問題。

我們來看看CPU的結構

CPU主要包括運算器(ALU,Arithmetic and Logic Unit)和控制器(CU,Control Unit)兩大部件。此外,還包括若干個暫存器和高速緩衝儲存器及實現它們之間聯絡的資料、控制及狀態的匯流排。從上面的敘述我們可以看出,CPU主要包含運算邏輯器件、暫存器部件以及控制部件等。

從字面上我們也很好理解,運算邏輯器件主要執行算術運算、移位等操作,以及地址運算和轉換;暫存器件主要用於儲存運算中產生的資料以及指令等;控制器件則是負責對指令譯碼,並且發出為完成每條指令所要執行的各個操作的控制訊號。

我們可以運用下面這張圖來說明一條指令在CPU中執行的大致過程:

CPU從程式計數器取到指令,通過指令匯流排將指令送至譯碼器,將轉譯後的指令交給時序發生器與操作控制器,然後運算器對資料進行計算,通過資料匯流排將資料存至資料快取暫存器。

我們從CPU的結構以及執行過程可以看出,CPU遵循的是馮諾依曼架構,馮諾依曼的核心就是:儲存程式,順序執行。

從上面的描述我們可以看出,CPU就像一個有條不紊的管家,我們吩咐的事情總是一步一步來做。但是隨著摩爾定律的推進以及人們對更大規模與更快處理速度的需求的增加,CPU好像執行起任務來就不那麼令人滿意了。於是人們就想,我們可不可以把好多個處理器放在同一塊晶片上,讓他們一起來做事,這樣效率是不是就會高很多,這是GPU就誕生了。

 

GPU誕生了

GPU全稱為Graphics Processing Unit,中文為圖形處理器,就如它的名字一樣,GPU最初是用在個人電腦、工作站、遊戲機和一些移動裝置(如平板電腦、智慧手機等)上執行繪圖運算工作的微處理器。因為對於處理影象資料來說,影象上的每一個畫素點都有被處理的需要,這是一個相當大的資料,所以對於運算加速的需求影象處理領域最為強烈,GPU也就應運而生。

通過CPU與GPU結構上的對比我們可以看出,CPU功能模組很多,能適應複雜運算環境;GPU構成則相對簡單,大部分電晶體主要用於構建控制電路(比如分支預測等)和Cache,只有少部分的電晶體來完成實際的運算工作。而GPU的控制相對簡單,且對Cache的需求小,所以大部分電晶體可以組成各類專用電路、多條流水線,使得GPU的計算速度有了突破性的飛躍,擁有了更強大的處理浮點運算的能力。當前最頂級的CPU只有4核或者6核,模擬出8個或者12個處理執行緒來進行運算,但是普通級別的GPU就包含了成百上千個處理單元,高階的甚至更多,這對於多媒體計算中大量的重複處理過程有著天生的優勢。

這就好比在畫一幅畫的時候CPU是用一支筆一筆一筆的來畫,而GPU則是多支筆對不同的位置同時進行描繪,那自然效率就是突飛猛進的。

雖然GPU是為了影象處理而生的,但是我們通過前面的介紹可以發現,它在結構上並沒有專門為影象服務的部件,只是對CPU的結構進行了優化與調整,所以現在GPU不僅可以在影象處理領域大顯身手,它還被用來科學計算、密碼破解、數值分析,海量資料處理(排序,Map-Reduce等),金融分析等需要大規模平行計算的領域。所以GPU也可以認為是一種較通用的晶片

 

FPGA應運而生

隨著人們的計算需求越來越專業化,人們希望有晶片可以更加符合我們的專業需求,但是考慮到硬體產品一旦成型便不可再更改這個特點,人們便開始想,我們可不可以生產一種晶片,讓它硬體可程式設計。也就是說——

這一刻我們需要一個比較適合對影象進行處理的硬體系統,下一刻我們需要一個對科學計算比較適合的硬體系統,但是我們又不希望焊兩塊板子,這個時候FPGA便應運而生。

FPGA是Field Programmable Gate Array的簡稱,中文全稱為場效可程式設計邏輯閘陣列,它是作為專用積體電路領域中的一種半定製電路而出現的,既解決了全定製電路的不足,又克服了原有可程式設計邏輯器件閘電路數有限的缺點。

FPGA運用硬體描述語言(Verilog或VHDL)描述邏輯電路,可以利用邏輯綜合和佈局、佈線工具軟體,快速地燒錄至FPGA上進行測試。人們可以根據需要,通過可編輯的連線,把FPGA內部的邏輯塊連線起來。這就好像一個電路試驗板被放在了一個晶片裡。一個出廠後的成品FPGA的邏輯塊和連線可以按照設計者的需要而改變,所以FPGA可以完成所需要的邏輯功能。

FPGA這種硬體可程式設計的特點使得其一經推出就受到了很大的歡迎,許多ASIC(專用積體電路)就被FPGA所取代。這裡需要說明一下ASIC是什麼。ASIC是指依產品需求不同而定製化的特殊規格積體電路,由特定使用者要求和特定電子系統的需要而設計、製造。這裡之所以特殊說明是因為我們下面介紹的TPU也算是一種ASIC。

FPGA與ASIC晶片各有缺點,FPGA一般來說比ASIC的速度要慢,而且無法完成更復雜的設計,並且會消耗更多的電能;而ASIC的生產成本很高,如果出貨量較小,則採用ASIC在經濟上不太實惠。但是如果某一種需求開始增大之後, ASIC的出貨量開始增加,那麼某一種專用積體電路的誕生也就是一種歷史趨勢了,我認為這也是Google生產Tensor processing unit的一個重要出發點。至此,TPU便登上歷史舞臺。

隨著機器學習演算法越來越多的應用在各個領域並表現出優越的效能,例如街景、郵件智慧回覆、聲音搜尋等,對於機器學習演算法硬體上的支援也越來越成為一種需要。目前很多的機器學習以及影象處理演算法大部分都跑在GPU與FPGA上面,但是通過上面的講述我們可以知道,這兩種晶片都還是一種通用性晶片,所以在效能與功耗上還是不能更緊密的適配機器學習演算法,而且Google一直堅信偉大的軟體將在偉大的硬體的幫助下更加大放異彩,所以Google便在想,我們可不可以做出一款專用機機器學習演算法的專用晶片,TPU便誕生了。

 

 

Google想做一款專用機機器學習演算法的專用晶片——TPU

 

從名字上我們可以看出,TPU的靈感來源於Google開源深度學習框架TensorFlow,所以目前TPU還是隻在Google內部使用的一種晶片。

Google其實已經在它內部的資料中心跑TPU跑了一年多了,效能指標槓槓的,大概將硬體效能提升了7年的發展時間,約為摩爾定律的3代。對於效能來說,限制處理器速度的最大兩個因素是發熱與邏輯閘的延遲,其中發熱是限制速度最主要的因素。現在的處理器大部分使用的是CMOS技術,每一個時鐘週期都會產生能量耗散,所以速度越快,熱量就越大。下面是一張CPU時鐘頻率與能量消耗的關係,我們可以看到,增長是指數性的。

從TPU的外觀圖我們可以看出,其中間突出一塊很大的金屬片,這便是為了可以很好地對TPU高速運算是產生大量的熱進行耗散。

TPU的高效能還來源於對於低運算精度的容忍,也就是說每一步操作TPU將會需要更少的電晶體。在電晶體總容量不變的情況下,我們就可以單位時間在這些電晶體上執行更多的操作,這樣我們就可以以更快的速度通過使用更加複雜與強大的機器學習演算法得到更加智慧的結果。我們在TPU的板子上看到了插條,所以目前Google使用TPU的方式是將載有TPU的板子插在資料中心機櫃的硬碟驅動器插槽裡來使用。

而且我覺得TPU的高效能還來源於它資料的本地化。對於GPU,從儲存器中取指令與資料將耗費大量的時間,但是機器學習大部分時間並不需要從全域性快取中取資料,所以在結構上設計的更加本地化也加速了TPU的執行速度。

AlphaGo對戰李世乭比賽使用的載有TPU的伺服器機架,不知道為什麼側面貼的圍棋圖有種萌感。via:googleblog.com

在Google資料中心的這一年來,TPU其實已經幹了很多事情了,例如機器學習人工智慧系統RankBrain,它是用來幫助Google處理搜尋結果併為使用者提供更加相關搜尋結果的;還有街景Street View,用來提高地圖與導航的準確性的;當然還有下圍棋的計算機程式AlphaGo,其實這一點上也有個很有趣的地方,我們在描述AlphaGo的那篇Nature文章中看到,AlphaGo只是跑在CPU+GPUs上,文章中說AlphaGo的完整版本使用了40個搜尋執行緒,跑在48塊CPU和8塊GPU上,AlphaGo的分散式版本則利用了更多的機器,40個搜尋執行緒跑在1202個CPU和176塊GPU上。這個配置是和樊麾比賽時使用的,所以當時李世乭看到AlphaGo與樊麾的對弈過程後對人機大戰很有信心。但是就在短短的幾個月時間,Google就把執行AlphaGo的硬體平臺換成了TPU,然後對戰的局勢就艱難了起來。

那麼除了TPU可以更好更快地執行機器學習演算法,Google釋出它還有什麼其他目的。我覺得說的玄幻一些,Google也許在下一盤大棋。

Google說他們的目標是在工業界的機器學習方面起到先鋒帶頭作用,並使得這種創新的力量惠及每一位使用者,並且讓使用者更好地使用TensorFlow 和 Cloud Machine Learning。其實就像微軟為它的HoloLens增強現實頭顯配備了全息處理單元(holographic processing unit,HPU),像TPU這樣的專業硬體只是它遠大征程的一小步,不僅僅是想讓自己在公共雲領域超過市場老大Amazon Web Services (AWS)。隨著時間的推移,Google會放出更多的機器學習API,現在Google已經推出了雲機器學習平臺服務和視覺API,我們可以相信,做機器學習技術與市場的leader才是Google更大的目標。

Refer to: https://www.leiphone.com/news/201605/xAiOZEWgoTn7MxEx.html