剖析用于深度學習的硬件:GPU、FPGA、ASIC和DSP
我喜歡深度學習...
深度學習最近取得的成功勢不可擋:從圖像分類和語音識別到圖片標注、理解視覺場景、視頻概述、語言翻譯、繪畫,甚至是生成圖像、語音、聲音和音樂!
…而我想讓它運行得飛快!
其成果令人震驚,因而需求就會增長。比如你是谷歌/ Facebook / Twitter 的工作人員:在你找到一種「閱讀」圖片或視頻內容的方法來建立一個更貼近用戶特征(他們的喜好、談論對象、推薦、分享的內容)的模型之后,你會做什么?你可能會想做得更多!
或許你會使用 ResNet / Xception / denseNet 的某個版本來將用戶圖片分類為成千上萬個類別。而如果你是某個互聯網巨頭企業的一員,你擁有許多的服務器和服務器群組,因而理想情況下你希望在這個現有架構上運行深度學習算法。然這種方法曾經很有效……直到你意識到自己用來分析文本語法結構的這些服務器現在所不得不進行的運算是你之前運行單一圖像分類所需操作次數的一百萬倍以上。而用戶產生的數據則流動得越來越快:現實生活中每過一分鐘就會產生 300 小時時長的視頻!
服務器群組會消耗大量的功率,并且如果我們需要使用大量基礎設施來處理圖像和視頻,那么我們就需要建立大量的發電裝置,或是使用效率更高的方式在云端進行深度學習計算。能耗問題很難解決,因此我們***走提高效率的路線。
然而對于需要更多用于深度學習解決方案的硬件和優化型芯片的領域來說,數據中心只是其中的一個方面。1000 瓦的計算系統對于自動駕駛汽車來說或許可行,但在許多其它的應用中,功率是一個很大的限制。比如無人機、機器人、手機、平板電腦和其它的移動設備。它們都需要幾瓦甚至不到 1 瓦的功率預算才行。
還有很多消費類電子產品,比如智能相機、增強現實眼鏡等設備,它們需要小功率,并且由于隱私問題,用戶們可能不會想要采用云計算解決方案。
隨著我們的家變得越來越智能,你會發現許多設備都會需要連續地使用深度學習應用、收集和處理數據。
那么…你就需要新的硬件,對嗎?
所以我們需要新的硬件,一個比 Intel Xeon 所驅動的服務器更加高效的硬件。一個英特爾服務器 CPU 可能會消耗 100-150 瓦功率并需要一個有著冷卻裝置的超大系統來支持其性能的正常發揮。
還有哪些其它的選擇?
- 圖形處理器、GPU
- 現場可編程的邏輯器件、FPGA(現場可編程門陣列/Field-Programmable Gate Array)
- 定制芯片、特殊應用型集成電路、ASIC、芯片系統或 SoC
- 數字信號處理器、DSP
- 未來的、外星人發明的、由新的物理定律所發展出的技術
GPU
GPU 最早是為生成基于多邊形網絡的計算機圖形而設計的。在最近幾年,由于近來計算機游戲和圖形引擎領域的需求和復雜度需要,GPU 積累了強大的處理性能。英偉達是 GPU 領域的領軍者,能生產有數千個內核的處理器,這些內核的設計工作效率可以達到 100%。實際上這些處理器也非常適用于運行神經網絡和矩陣乘法方面的計算。注意,矩陣向量的乘法運算被認為是「尷尬的并行(embarrassingly parallel)」,因為它可以通過簡單的算法擴展被并行化(它們缺少分支因而可以避免緩存信息丟失)。
Titan X 是訓練深度學習模型的一個最得力的助手。它擁有 3500 多個內核,每秒能夠執行超過 11 萬億次浮點運算。
由于 GPU 的超多核(~3500 個,對比 Intel Xeon 的 16 個/ Xeon Phi 的 32 個),英特爾的 CPU 和英偉達的 GPU 之間的競爭助長了后者的發展,使其 GPU 比 CPU 在時鐘頻率快 2~3 倍。GPU 核是更為復雜(分支預測和流程)的 CPU 核的流線型版本,但是前者許多都支持更高級別的并行運算,因而擁有更好的性能。
這種 GPU 很擅長訓練深度學習系統——卷積神經網絡或者循環神經網絡。它們可以在僅僅幾毫秒之內就運行一批 128 或 256 張圖像。但是它們同時也會消耗大約 250 瓦的功率并且需要一個完整的計算機來支持運行,這又消耗了額外的 150 瓦的功率。一個高性能的 GPU 系統至少需要消耗 400 瓦的功率。
這并不適用于增強現實眼鏡、無人機、手機、移動設備和小型機器人。甚至對于未來的消費級自動駕駛汽車來說也是不可接受的。
英偉達正在致力于開發效率更高的器件,比如 Tegra TX1、TX2(深度神經網絡需要 12 瓦的能耗和每秒 ~100 千兆次浮點運算的性能,TX2 需要的更多)和更強大的 Drive PX(250 瓦,與一個 Titan X 的消耗量差不多)。
這里還要注意,在自動駕駛汽車和智能攝像機中,直播視頻是必要的而圖像批處理是不可能實現的,因為視頻需要針對及時響應進行實時處理。
一般 GPU 的水平大約是 5 G-flops/s per W。如果我們想在移動系統中部署深度學習解決方案,那我們還需要更好的方法!
FPGA
Xilinx 等公司的現代 FPGA 器件就是電子元器件中的樂高。我們可以使用其電路作為模塊來構建出整個定制微處理器和復雜的異構系統。而在最近幾年,FPGA 開始生產出越來越多的乘累加計算模塊。這些 DSP 模塊正如其名,能夠執行乘法運算并可以被排列到一起來進行一定量的并行運算。
我們將 FPGA 應用于神經網絡的研究歷史已有 10 年時間。我們的工作始于來自紐約大學的 Yann LeCun 的開創性工作,尤其是 Clement Farabet。我們的協同合作制造出了 NeuFlow,它是一個復雜的、用于運行神經網絡的數據流處理器。
從 2011 年到 2015 年早期,我們完善了一個全新的設計——nn-X。這項工作是由 Berin Martini 和 Vinayak Gokhale(來自我們的辦公室)領導的。這套系統可以在 4 瓦的功率電力預算下實現 200 G-ops/s 的速度,也即 50 G-ops/s/W,這個結果幾乎是 GPU 性能的 10 倍。
但是 nn-X 有兩個很大的問題:
- 當固定的卷積引擎(convolutional engine)未被使用時其利用率會很低
- 高內存帶寬
***個問題是由于 nn-X 采用了固定的 10x10 卷積引擎,而當它在執行 3x3 卷積時,只有 9% 的 DSP 單元得到了有效利用。這一點后來是通過將一個 12x12 的網格分為 4x4 單元的 3x3 卷積器而得以解決。不幸的是該系統還需要高內存帶寬,因為它并沒有使用數據緩存且需要從內存中讀取輸入并直接將結果保存在內存中。像這樣的 nn-X 不能進行擴展,且其 DPS 單元的利用率永遠不會超過 75–80%。
設計方面有類似限制的系統也會有性能方面的限制。
我們所需的是一個帶有數據緩存的系統,它可以使用任意組 DPS 單元來有效地(近乎 100% 地)利用資源。這種系統有 Microsoft Catapult 和我們的 SnowFlake 加速器,后者的利用率幾乎可以達到 100%(更多內容即將呈現)。
微軟使用 Altera 器件來實現創紀錄的深度神經網絡處理性能。不幸的是它并不是一個商業化的系統,而是一項微軟的數據中心資產,因而還未對公眾開放。中國的科技巨頭企業百度也加入了這一隊列。
定制 SoC
高通、AMD、ARM、英特爾和英偉達都在致力于將定制化芯片整合進它們的現有解決方案中。Nervana 和 Movidius(目前都在英特爾旗下)已經或者說正在開發集合方案。SoC 在同一技術節點上所能提供的性能大約是 FPGA 系統的 10 倍,在特定結構中還要更高。由于 SoC 和處理器所需的功率變得越來越低,其區別將來自于新的集合內存系統和帶寬對外部存儲器的有效利用。在這一領域,整合為 systems-on-a-package(SOP)的 3D memory 至少可以節約 10 倍的功率。
DSP
DSP 已經存在了很長一段時間,它最初是用來執行矩陣算法的。但到目前為止,DSP 并沒能真正提供任何有用的性能或是可以與 GPU 相匹敵的器件。為什么會這樣呢?其主要原因就是核數量。DSP 主要用于電信系統,且無需擁有 16 個或 32 個以上的核。其工作負載并不需要這么多。相反,GPU 負載在近 10~15 年間一直在增加,因此它需要更多的核。最終,大約從 2006 年開始,英偉達的 GPU 在性能上就超過了 DSP。
Texas Instruments 公司還在開發 DSP,但是我們從中并沒有看到任何有競爭力的性能。且許多 DSP 也已經被 FPGA 取代了。
Qualcomm 在它們的 SoC 中使用 DSP,并且其性能會有所加速,但是目前還沒有足夠多的信息來將它與其它的解決方案進行比較。
原文:https://medium.com/towards-data-science/hardware-for-deep-learning-8d9b03df41a
【本文是51CTO專欄機構機器之心的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】




























