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