1. 程式人生 > >掃盲人工智能的計算力基石--異構計算

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

價格 str 分享 動作 隨著 人員 tps 協處理器 加速

摘要: 本文將帶領入門讀者了解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的實例方案。另外附上一些相關文章,讓大神們繼續帶你飛。

原文鏈接


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