天天看點

伺服器端人工智能,FPGA 和 GPU 到底誰更強?

随着 AlexNet 的劃時代論文橫空出世,GPU 就開始在伺服器端的機器學習加速領域稱霸。然而,随着研究的深入,人們發現了比 GPU 架構更靈活的 FPGA 在機器學習加速領域也有自己的優勢,并有多家公司和學校發表了相關研究結果。那麼,現在伺服器端人工智能應用 GPU 和 FPGA 到底哪個強?本文将作深入分析。

為什麼 GPU 和 FPGA 能加速機器學習算法?

伺服器端人工智能,FPGA 和 GPU 到底誰更強?
伺服器端人工智能,FPGA 和 GPU 到底誰更強?

GPU(上圖)與 FPGA(下圖)

在很久很久(其實也沒多久,大概五年前),人們在跑機器學習算法時用的主要還是 CPU,因為 CPU 通用性好,硬體架構已經很成熟,對于程式員來說非常友好。然而,當機器學習算法的運算量越來越大時,人們發現 CPU 執行機器學習的效率并不高。CPU 為了滿足通用性,晶片面積有很大一部分都用于複雜的控制流,留給運算單元的面積并不多。而且,機器學習算法中運算量最大的矩陣運算是一種矢量(Vector)運算,而 CPU 對于矢量運算隻能說是部分支援。這時候,GPU 進入了機器學習研究者的視野。GPU 原本的目的是圖像渲染,是以使用完美支援矢量運算的 SIMD(單指令流多資料流,single instruction multiple data)架構,而這個架構正好能用在機器學習算法上。GPU 本來就是為了加速 3D 遊戲性能的加速器,這裡又被用到了加速機器學習應用上,其實是很有趣的一件事。

GPU 運作機器學習算法比 CPU 快很多,但是畢竟不是為機器學習而設計的。有人就要問,如果做一塊完全為機器學習設計的運算單元,會不會比 GPU 更有效率?不過,要真的做一塊機器學習專用晶片(ASIC)需要極大的決心,首先為了性能必須使用最好的半導體制造技術,而現在用最新的工藝制造晶片一次性成本就要幾百萬美元,非常貴。就算你有錢,你還需要拉一支隊伍從頭開始設計,設計時間往往要到一年以上,time to market 時間太長,風險很大,是以除了 Google 之外很少有人敢做 ASIC。這時候,FPGA 就吸引了大家的注意力。

FPGA 全稱「可編輯門陣列」(Field Programmable Gate Array),其基本原理是在 FPGA 晶片内內建大量的數字電路基本門電路以及存儲器,而使用者可以通過燒入 FPGA 配置檔案來來定義這些門電路以及存儲器之間的連線。這種燒入不是一次性的,即使用者今天可以把 FPGA 配置成一個微控制器 MCU,明天可以編輯配置檔案把同一個 FPGA 配置成一個音頻編解碼器。是以說在 FPGA 可以快速實作為機器學習算法開發的處理器架構,而且成本很低(一塊 FPGA 開發闆大約售價 1000 美金,比真的制造晶片便宜太多)。

ASIC 是一錘子買賣,設計出來要是發現哪裡不對基本就沒機會改了,但是 FPGA 可以通過重新配置來不停地試錯知道獲得最佳方案,是以用 FPGA 開發的風險也遠遠小于 ASIC。

GPU 與 FPGA 的性能分析對比

那麼在伺服器端 GPU 和 FPGA 誰更強呢?在伺服器端,有幾個名額可供對比:

  • 峰值性能
  • 靈活性
  • 平均性能
  • 功耗和能效比

其實這幾個名額是會互相影響的,不過還是分開說。

從峰值性能來說,GPU(10Tflops) 遠遠高于 FPGA(<1TFlops)。GPU 上面成千上萬個 core 同時跑在 GHz 的頻率上還是非常壯觀的,最新的 GPU 峰值性能可達 10TFlops 以上。GPU 的架構經過仔細設計(例如使用深度流水線,retiming 等技巧),在電路實作上是基于标準單元庫而在關鍵路徑(即晶片中一個時鐘周期内延遲最長的路徑,直接決定了電路最高運作速度)上可以用手工定制電路,甚至在必要的情形下可以讓半導體 fab 依據設計需求微調工藝制程,是以可以讓許多 core 同時跑在非常高的頻率。

相對而言,FPGA 首先設計資源受到很大的限制,例如 GPU 如果想多加幾個 core 隻要增加晶片面積就行,但 FPGA 一旦你型号標明了邏輯資源上限就确定了(浮點運算在 FPGA 裡會占用很多資源),好漢也會被尿憋死。而且,FPGA 裡面的邏輯單元是基于 SRAM-查找表,其性能會比 GPU 裡面的标準邏輯單元差好多。最後,FPGA 的布線資源也受限制(有些線必須要繞很遠),不像 GPU 這樣走 ASIC flow 可以随意布線,這也會限制性能。

伺服器端人工智能,FPGA 和 GPU 到底誰更強?

FPGA 布線資源有限,有些線必須走非常長,進而限制了時鐘頻率

除了晶片性能外,GPU 相對于 FPGA 還有一個優勢就是記憶體接口。GPU 的記憶體接口(傳統的 GDDR5,最近更是用上了 HBM 和 HBM2)的帶寬遠好于 FPGA 的傳統 DDR 接口(大約帶寬高 4-5 倍),而衆所周知伺服器端機器學習算法需要頻繁通路記憶體,是以記憶體接口的帶寬可以決定機器學習應用的性能。

伺服器端人工智能,FPGA 和 GPU 到底誰更強?
伺服器端人工智能,FPGA 和 GPU 到底誰更強?
伺服器端人工智能,FPGA 和 GPU 到底誰更強?

傳統顯示卡用的 GDDR 标準帶寬比 FPGA 使用的 DDR4 大 4-5 倍(上圖),而高端顯示卡更是用上了帶寬更大的 HBM 接口的(中圖),而即使高端 FPGA(如 Xilinx Ultrascale)的記憶體接口仍然是普通的 DDR4(下圖)

但是從靈活性來說,FPGA 遠好于 GPU。FPGA 可以根據特定的應用去程式設計硬體(例如如果應用裡面的加法運算非常多就可以把大量的邏輯資源去實作加法器),但是 GPU 一旦設計完那就沒法改動了,沒法根據應用去調整硬體資源。目前機器學習大多數适合使用 SIMD 架構(即隻需一條指令可以平行處理大量資料),是以用 GPU 很适合。但是有些應用是 MISD(即單一資料需要用許多條指令平行處理,微軟在 2014 年 ISCA paper 裡面就舉了一個 MISD 用于并行提取 feature 的例子),這種情況下用 FPGA 做一個 MISD 的架構就會比 GPU 有優勢。不過 FPGA 的程式設計對于程式員來說并不容易,是以為了能讓機器學習程式員能友善地使用 FPGA 往往還需要在 FPGA 公司提供的編譯器基礎上進行二次開發,這些都是隻有大公司才能做。

伺服器端人工智能,FPGA 和 GPU 到底誰更強?

微軟在 2014 年 ISCA paper 裡面就 MISD 用于并行提取 feature 的例子

從上面兩條我們可以看出,FPGA 實作的機器學習加速器在架構上可以根據特定應用優化是以比 GPU 有優勢,但是 GPU 的運作速度(>1GHz) 相比 FPGA 有優勢 (~200MHz)。是以,對于平均性能,看的就是 FPGA 加速器架構上的優勢是否能彌補運作速度上的劣勢。如果 FPGA 上的架構優化可以帶來相比 GPU 架構兩到三個數量級的優勢,那麼 FPGA 在平均性能上會好于 GPU。例如,百度在 HotChips 上釋出的 paper 顯示,GPU 的平均性能相比 FPGA 在矩陣運算等标準 batch data SIMD bench 上遠好于 FPGA;但是在處理伺服器端的少量多次處理請求(即頻繁請求但每次請求的資料量和計算量都不大)的場合下,平均性能會比 GPU 更好。

伺服器端人工智能,FPGA 和 GPU 到底誰更強?
伺服器端人工智能,FPGA 和 GPU 到底誰更強?

Baidu 的研究顯示,對于矩陣運算 bench GPU 遠好于 FPGA,但是當處理小計算量大批次的實際計算時 FPGA 性能優于 GPU

功耗方面,雖然 GPU 的功耗(200W)遠大于 FPGA 的功耗(10W),但是如果要比較功耗應該比較在執行效率相同時需要的功耗。如果 FPGA 的架構優化能做到很好以緻于一塊 FPGA 的平均性能能接近一塊 GPU,那麼 FPGA 方案的總功耗遠小于 GPU,散熱問題可以大大減輕。反之,如果需要二十塊 FPGA 才能實作一塊 GPU 的平均性能,那麼 FPGA 在功耗方面并沒有優勢。能效比的比較也是類似,能效指的是完成程式執行消耗的能量,而能量消耗等于功耗乘以程式執行的時間。雖然 GPU 的功耗遠大于 FPGA 的功耗,但是如果 FPGA 執行相同程式需要的時間比 GPU 長幾十倍,那 FPGA 在能效比上就沒有優勢了;反之如果 FPGA 上實作的硬體架構優化得很适合特定的機器學習應用,執行算法所需的時間僅僅是 GPU 的幾倍或甚至于接近 GPU,那麼 FPGA 的能效比就會比 GPU 強。

結語

FPGA 可以開發出為機器學習算法專用的架構,但是 FPGA 本身的峰值性能較 GPU 要差很多。FPGA 和 GPU 哪個跑機器學習算法更強(平均性能更好),完全取決于 FPGA 架構優化能否彌補峰值性能的劣勢。

©本文由機器之心原創,轉載請聯系本公衆号獲得授權。

繼續閱讀