掃盲人工智慧的計算力基石--異構計算

掃盲人工智慧的計算力基石--異構計算

來自專欄我是程序員

摘要: 本文將帶領入門讀者了解CPU,GPU,FPGA,ASIC和異構計算的一些基本概念和優缺點,希望幫助入門者和愛好者建立基本的晶元概念

人工智慧有三要素:演算法,計算力,數據。我們今天主要來講講計算力。

計算力歸根結底由底層晶元提供。按照計算晶元的組成方式,可以分成:

同構計算:使用相同類型指令集和體系架構的計算單元組成系統的計算方式。

異構計算:使用不同類型指令集和體系架構的計算單元組成系統的計算方式。常見的計算單元類別包括CPU、GPU、ASIC、FPGA等。

我們從CPU開始,講一個小故事來幫助你理解一切。

異構廚房系統:

有一個大廚(CPU),能做各種菜(兼容性好),但是某些大量重複的動作(例如切菜)明顯減慢了他做菜的速度。原來客人都點炒青菜,拌黃瓜之類的,大廚自己還算能勝任,但是最近(大數據時代到來),客人要求高了很多,開始點各種大菜(大量數據複雜處理)。

大廚力不從心,於是老闆需要找個幫手(協處理器)來幫助他,比如在切菜方面,這個幫手可以同時處理很多菜品(並行處理),而且速度很快(低延時)。希望在合理的分工協作下,廚房能滿足新的需求。

為什麼CPU在大量數據處理時效率不高?

在之前餐廳的例子里,大廚CPU能靈活控制整個做菜流程,更偏向一個控制者,但很多場景下並不是最好的執行者。CPU作為通用處理器,也是更偏重支持控制流數據。CPU每個物理核中大部分的硬體資源被做成了控制電路和緩存,用來提高指令兼容性和效率。只有小部分是真正用來計算的邏輯運算單元(ALU)。在這樣的架構下,CPU能兼容大量指令,但是實際的計算效率並不高。

而且,CPU這個大廚很健忘,每做完一步都要去看看菜譜,甚至健忘到切菜每切一刀,都要去看看下一刀怎麼切。實際運行中,CPU的代碼都存在Memory這個「菜譜」中,需要經過取指令,解碼,然後才能執行指令。在這個流程中,取指令,解碼會開銷額外的時間,降低了數據處理速度。

同構廚房系統:

有人會說,為啥不再雇個大廚(雙核),這樣組成一個同構廚房系統不好嗎?當然可以,因為之前的晶元結構貌似就是這樣迭代的。但是或許有以下缺陷無法避免:

  1. 大廚貴 -- 價格
  2. 大廚在某些方面其實不一定擅長,比如你切菜切得過料理機嗎?-- 性能
  3. 廚房就這麼大,再來個人可能沒空間 – 晶元面積
  4. 大廚吃的比較多,老闆想省點 – 功耗

對協處理器的要求?

老闆對這個幫手也是精心挑選的,主要體現在:

  1. 最好能提供多樣的菜品加工能力,比如洗菜,切菜一體化。(演算法性能)。異構系統中,High Performance Compute要求全面實現加速演算法,而不是僅僅是幾個步驟。所以協處理器需要能全面支持需要用到的場景關鍵演算法。
  2. 支持同時、快速加工(數據並行處理能力,低延時處理能力)。協處理器需要有大量的數據並行通道,每個通道需要支持低延遲的數據管線處理。
  3. 便於操作和菜品存取(介面性能)。要提供合適的介面帶寬,快速,安全地和主處理器進行數據交互。
  4. 安裝方便,能更新處理流程(配置靈活)。用戶能方便地安裝,配置,最好能更新協處理器的功能,方便日後計算需求的升級迭代。
  5. 節能(功耗)。更低的功耗意味著更低的運行成本,更小的空間佔用和更簡單的熱處理方案。

GPU:動作很快的笨笨小幫廚

GPU和CPU都屬於通用處理器,但是卻有不同的架構。如果把CPU大廚形容為「頭腦發達(控制電路多),四肢簡單(計算電路少)」,那麼GPU幫廚正好相反。在GPU中,硬體資源被大量用作邏輯運算單元(ALU),小部分用作控制電路。這為大規模的數據並行處理提供了基礎。其實,這個幫手在特定工作中遠遠超過了師傅(切菜洗菜超級快),大廚可以放心地把演算法簡單、重複性高、需要大量並行操作的工作交給它。

但是CPU支持的控制複雜度較低。當你要求笨笨的GPU把所有菜都切絲,它一定完成得又快又好,但是你告訴它:「土豆切絲,洋蔥切片,南瓜雕花……」它就沒有那麼高效了。這是因為,複雜的控制流程會產生大量的分支(如編程語言中的case和if else),而GPU中一個控制單元要負責好幾個計算單元。所以,如果要最大程度地使用GPU,勢必要求控制分支越少越好。

另外,GPU有CPU大廚的共同毛病:健忘(需要從Memory讀取指令),這帶來了一系列問題(如功耗大,基於指令系統,要解碼)。

ASIC: 最強訂製料理機

如果給ASIC牌料理機制定一句廣告語,我覺得是:最快速度,最低能效,您廚房的最強幫手。

我們先來看看為什麼ASIC像「料理機」。因為它擺脫了指令系統,沒有了「健忘」問題,所有功能都固化了交付給客戶,更像一台廚房機器。ASIC的中文全稱是「特殊訂製集成電路」。它是訂製的,也意味著不需要去糾結CPU和GPU怎樣分配控制資源和計算資源的問題了,想怎麼分配就怎麼分配。

編程語言越接近底層硬體,運行速度越快。ASIC的設計是直接用軟體思維搭建硬體電路,所有的設計是直接建築在物理硬體(門電路)上的。所以,ASIC不需要取指令和解碼,每個時間單位都能專註於數據處理或者傳輸,大大提高了效能。直接設計的硬體結構也讓數據處理管線真正實現,每一級的處理結果能直接用於下一級的輸入,無縫連接。在一定規則下(比如一定晶元面積和布線規則下),並行通道可以最大化疊加。在功耗方面,因為硬體利用的最大化,是所有協處理器里最小的。

那麼厲害的ASIC,看來我們的最佳方案一定是它了吧,問題來了:ASIC料理機哪裡能買到呢?對不起,哪裡都買不到,剛剛說了只能訂製。這個過程很漫長,帶來的風險自然很大。更重要的是,CPU大廚在拿到專屬料理機後,如果突然有一天想把功能更新一下,比如原來土豆切絲,現在想切土豆片了。很抱歉,只能再訂製一次。

FPGA: 可變化的萬能料理機

FPGA也是料理機,也沒有指令系統。和ASIC一樣:它的設計也是直接建築在物理硬體上。這樣的結構就已經註定了FPGA在大量數據處理時的優勢。事實上,它幾乎具有ASIC的所有優點,速度功耗也遠遠優於通用處理器,但是和ASIC對比,還稍微差一點,例如:功耗大一點,速度慢一點,同樣晶元面積下能實現的功能弱一點。不過,FPGA卻有一個巨大優勢。

FPGA,中文全稱「現場可編程門級列陣」。對比ASIC,有三個字無比耀眼:可編程。可編程意味著可改變。今天切土豆絲,明天切土豆片,都沒有問題了,不需要進行晶元重新訂製,靈活性堪比通用處理器。對比ASIC的研發流程,FPGA開發可以快速試錯迭代,縮短了開發時間。其實,在半導體界,FPGA有「萬能晶元」的美譽,它以可編程和靈活的直接基於硬體訂製兩大法寶,在眾多應用場景中有著重要地位。

FPGA的主要問題在開發。FPGA料理機交付客戶時其實是一個空機器,裡面什麼功能都沒有,需要客戶根據自己的需求一點點搭建。這個難度不低,主要原因是:異構演算法的開發人員大部分是軟體人員,缺乏對FPGA結構和數字電路的了解,編程語言也不統一(CPU端是C、C++等等,FPGA端是VHDL、Verilog)。目前解決這個問題的方法是OpenCL和HLS(High Level Synthesis)技術,支持直接把C、C++代碼編譯成Verilog,雖然目前轉化效果仍然有待提高,但是隨著這些技術的成熟,相信FPGA會站上異構計算的舞台中央。

總結

小結一下,本文帶領大家掃盲了一下CPU,GPU,ASIC,FPGA的一些基本概念和優缺點。在人工智慧不斷發展的今天,成本,功耗,靈活性,易用性都被提上了需求單。如果你也想體驗一下異構計算的高效,可以試著購買一下阿里雲的CPU+GPU和CPU+FPGA的實例方案。另外附上一些相關文章,讓大神們繼續帶你飛。

阿里雲鄭曉:淺談GPU虛擬化技術(第一章)

阿里雲鄭曉:淺談GPU虛擬化技術(第二章)

阿里雲鄭曉:淺談GPU虛擬化技術(第三章)

淺談GPU虛擬化技術(四)- GPU分片虛擬化

淺談GPU虛擬化技術(五)- GPU圖形渲染虛擬化的業界難題-VDI的用戶體驗

【F3簡介】一張圖看懂FPGA-F3實例

【F3使用場景】F3經典使用場景

另外,請訂閱彈性計算雙周刊獲取第一手的阿里雲ECS的技術資訊。

學習愉快!

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

本文為雲棲社區原創內容,未經允許不得轉載。

推薦閱讀:

再次升級!阿里雲Kubernetes日誌解決方案
王寶強離婚成了誰的狂歡?—通過阿里雲·數加嚴肅解讀數據背後的媒體傳播路徑
阿里雲ACP認證最全攻略!最全模擬題庫!
2016年雙十一晚會在哪個台直播?如何評價晚會上阿里展示的阿里雲couldET?

TAG:人工智慧 | 異構計算 | 阿里雲 |