天天看點

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

二、資料的訓練:CPU與GPU之争

2.1、現狀

在如今的深度學習平台上,CPU面臨着一個很尴尬的處境:它很重要又不是太重要。 它很重要,是因為它依舊是主流深度學習平台的重要組成部分:現百度首席科學家吳恩達曾利用16000顆CPU搭建了當時世界上最大的人工神經網絡“Google Brain”并利用深度學習算法識别出了“貓”,又比如名震一時的“AlphaGo”就配置了多達1920顆CPU。

但是它又不是太重要:相比于其他硬體加速工具,傳統的CPU在架構上就有着先天的弱勢。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

上圖是CPU與GPU内部結構上的對比,總體上來說二者都是由控制器(Control),寄存器(Cache、DRAM)和邏輯單元(ALU:Arithmetic Logic Unit)構成。但是三者的比例卻有很大的不同。在CPU中控制器和寄存器占據了結構中很大一部分,與之相反,在GPU中,邏輯單元的規模則是遠遠超過其他二者之和。這種不同的構架就決定了CPU在指令的處理/執行,函數的調用上有着很好的發揮,但由于邏輯單元所占比重較小,相對于GPU而言,在資料的處理方面(算術運算或者邏輯運算)的能力就弱了很多。

我們拿NIVIDA公司基于Maxwell構架的GPU來詳細說明。這顆代号GM200的顯示核心主要由4個圖形處理叢集(GPC:Graphics Processing Clusters ),16個流處理叢集(SMM:Steaming Multiprocess)和4個64bit顯存控制器組成。每個流處理叢集中包含了4個排程器(Warp),每個排程器又控制着32個邏輯計算核心(Core),這些Core是實作邏輯計算的基本單元。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

GPU進行資料處理的過程可以描述成:GPU從CPU處得到資料處理的指令,把大規模、無結構化的資料分解成很多獨立的部分然後配置設定給各個流處理器叢集。每個流處理器叢集再次把資料分解,配置設定給排程器所控制的多個計算核心同時執行資料的計算和處理。如果一個核心的計算算作一個線程,那麼在這顆GPU中就有32×4×16, 2048個線程同時進行資料的處理。盡管每個線程/Core的計算性能、效率與CPU中的Core相比低了不少,但是當所有線程都并行計算,那麼累加之後它的計算能力又遠遠高于CPU。對于基于神經網絡的深度學習來說,它硬體計算精度要求遠遠沒有對其并行處理能力的要求來的迫切。而這種并行計算能力轉化為對于硬體的要求就是盡可能大的邏輯單元規模。通常我們使用每秒鐘進行的浮點運算(Flops/s)來量化的參數。不難看出,對于單精度浮點運算,GPU的執行效率遠遠高于CPU。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

除了計算核心的增加,GPU另一個比較重要的優勢就是他的記憶體結構。首先是共享記憶體。在NVIDIA披露的性能參數中,每個流處理器叢集末端設有共享記憶體。相比于CPU每次操作資料都要傳回記憶體再進行調用,GPU線程之間的資料通訊不需要通路全局記憶體,而在共享記憶體中就可以直接通路。這種設定的帶來最大的好處就是線程間通訊速度的提高(速度:共享記憶體》全局記憶體)。

再就是高速的全局記憶體(顯存):目前GPU上普遍采用GDDR5的顯存顆粒不僅具有更高的工作頻率進而帶來更快的資料讀取/寫入速度,而且具有更大的顯存帶寬。我們認為在資料進行中,速度往往最終取決于處理器從記憶體中提取資料以及流入和通過處理器要花多少時間。

而在傳統的CPU構架中,盡管有高速緩存(Cache)的存在,但是由于其容量較小,大量的資料隻能存放在記憶體(RAM)中。進行資料處理時,資料要從記憶體中讀取然後在CPU中運算最後傳回記憶體中。由于構架的原因,二者之間的通信帶寬通常在60GB/s左右徘徊。與之相比,大顯存帶寬的GPU具有更大的資料吞吐量。在大規模深度神經網絡的訓練中,必然帶來更大的優勢。

而且就目前而言,越來越多的深度學習标準庫支援基于GPU的深度學習加速,通俗點描述就是深度學習的程式設計架構會自動根據GPU所具有的線程/Core數,去自動配置設定資料的處理政策,進而達到優化深度學習的時間。而這些軟體上的全面支援也是其他計算結構所欠缺的。

2.2、未來

但是CPU真的在未來規模深度神經網絡的計算中淪為花瓶麼?CPU巨擘英特爾顯然不甘于出現這樣的局面。

在其于去年釋出的代号“KNL(Knignts Landing)融核”處理器介紹中,我們發現英特爾針對目前CPU的種種弊端做出了很大的調整:首先在硬體架構上內建了更多的核心(72顆),這意味着有更多的邏輯單元去進行運算。其次是英特爾為這些核心增加了“可變精度”的支援,在低精度模式下(深度學習通常使用單精度)大幅度提高其浮點運算能力(3+TFlops),甚至接近GPU的性能名額。在記憶體支援方面,它不僅可以支援更多的記憶體,而且大幅提高了與記憶體間資料通訊的帶寬,這也解決了目前CPU資料傳輸速度的弊端。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

與這顆處理器相比對的,是“MIC(Many Integrated Core)”衆核同構計算模型。也是有别于其他加速硬體而被稱為衆核計算的原因:它可以完美運作X86代碼。簡而言之就是它可以直接脫離CPU直接與記憶體相連來進行深度學習。相對于“CPU+加速硬體”的異構模型,這種衆核計算在很大程度上避免了CPU與加速硬體之間的通訊帶寬問題。進而優化深度學習訓練時間。

以現狀而論,GPU的風頭遠遠蓋過CPU,但是對于CPU而言,新釋出的處理器在構架上的變化讓它把曾經的劣勢(核心數/帶寬)逐漸變為了它潛在的優勢。是以,二者資料訓練領域之争還依舊會持續下去。

三、資料的推斷:FPGA VS ASIC

雖然“CPU+GPU”或者“MIC”的計算模型被廣泛的應用于各種深度學習中去。其實CPU與GPU都是利用現有的成熟技術去提供了一種通用級的解決方法來滿足深度學習的要求,盡管如Intel 與NVIDIA不斷推出了如“KNL”和“Pascal”系列加速晶片來助陣深度學習,但這僅僅是大公司對于深度學習的一種妥協,而并不是一種針對性的專業解決方案。

目前在深度學習模型的訓練領域基本使用的是SIMD(Single Instruction Multiple Data:單指令多資料流架構)計算,即隻需要一條指令就可以平行處理大批量資料。但是,在平台完成訓練之後,它還需要進行推理環節的計算。這部分的計算更多的是屬于MISD(Multiple Instruction Single Data:多指令流單資料流)。比如訊飛語音輸入法在同一時間要對數以百萬計的用于的語音輸入進行識别并轉化為文字輸出。

在這個階段,他們的作用必遠不如訓練階段那麼得心應手。而在未來,至少95%的深度學習都用于推斷,尤其是在移動端。隻有不到5%的是用于模型訓練。是以,尋找低功耗,高性能,低延時的加速硬體成了當務之急。在這種情況下,人們把目光投向了“FPGA”與“ASIC”。

3.1、現狀

FPGA全稱是Field Programmable Gate Array:可程式設計邏輯門陣列。相對于之前兩種晶片,它有一下幾個的特點:硬體層面上,其内部內建大量的數字電路基本門電路和存儲器,使用者可以通過燒入配置檔案來定義這些它們之間的連線,進而達到定制電路的目的;邏輯層面上,它不依賴于馮諾依曼結構,一個計算得到的結果可以被直接饋送到下一個無需在主存儲器臨時儲存,是以不僅存儲器帶寬需求比使用GPU 或者CPU實作時低得多,而且還具有流水處理和響應迅速的特點。

ASIC(Application-Specific Integrated Circuit)是一種為專門目的而設計的內建電路。是指應特定使用者要求和特定電子系統的需要而設計、制造的內建電路。ASIC的特點是面向特定使用者的需求。亮點在于運作速度在同等條件下比FPGA快。根據谷歌披露的資料,完全版的“AlphaGo”擁有1920顆CPU和280顆GPU,除此此外,還有它還安裝一定數量的TPU(Tensor Processing Unit)。 盡管谷歌一直對TPU語焉不詳,業内普遍認為“AlphaGo”對圍棋局勢的預判所使用的置信網絡(Value network)就是依賴TPU的發揮。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

與GPU/CPU相比,FPGA與ASIC擁有良好的運作能效比,在實作相同性能的深度學習算法中,GPU所需的功耗遠遠大于FGPA與ASIC。浪潮與Intel 于去年底FPGA加速卡 F10A 最高性能的加速卡,單晶片峰值運算能力達到1.5TFlops,功耗才35W,每瓦特功率42GFlops,是GPU的數倍之高。其次,對于SIMD計算,GPU/CPU盡管具有很多邏輯核心,但是受限于馮諾依曼結構,無法發揮其并行計算的特點。而FPGA與ASIC不僅可以做到并行計算,而且還能實作流水處理。這大大減小了輸入與輸出的延時比。

下圖是FPGA與ASIC在設計環節的對比。FPGA從設計的角度來說更加的靈活多變。隻要用 Verilog或者其他描述語言定義好内部的邏輯結構即可實作硬體加速器功能。而ASIC則更像是一錘子賣賣:針對特定功能深度學習算法量身定做的。而且ASIC的設計和制造要經過很多的驗證和實體設計,與FPGA的即插即用相比,需要更多的時間,而且從設計到制造,付出的代價也相應的高了很多。一般來說,基于FPGA的開發周期大約為6個月,而相同規格的ASIC則需要1年左右。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

但是話又說回來,事物都有兩面性。FPGA的的架構固然帶來了應用上的靈活性和低成本,但是從執行的效率上來說,它又遠遠比不上ASIC,FPGA的通用性必然導緻備援。FPGA的運算電路基于查找表,比如說,FPGA内部有1000萬個自定義邏輯部件,一個4輸入的查找表單元需要96個半導體來支援,而在ASIC上來實作估計隻需要10個左右。這些備援也必然展現在晶片的面積和功耗上。

與CPU與GPU之争的一邊倒相比,由于功能與市場定位等原因,二者間的競争還是相當緩和。

由于FPGA具有開發周期短,上市速度快,可配置性等特點,目前被大量的應用在大型企業的線上資料進行中心,和軍工機關。

而ASIC由于一次性成本遠遠高于FPGA,但由于其量産成本低,是以應用上就偏向于消費電子,如移動終端等領域。

3.2、未來

上文所說,在未來的深度學習中,大約有95%的應用是資料的推斷。而且FPGA或者ASIC相較于GPU/CPU無論在研發還是産出上的成本都明顯降低。是以必然是兵家必争之地。無論從INTEL收購ALTRA/ Movidius,還是XILINX與IBM合作,抑或谷歌和高通默默開發自己的專屬ASIC中都可見一斑。而且針對移動端的深度學習,FPGA或者ASIC更多的會以SOC形式出現,以至于更好的優化神經網絡結構提升效率。

二、資料的訓練:CPU與GPU之争

2.1、現狀

在如今的深度學習平台上,CPU面臨着一個很尴尬的處境:它很重要又不是太重要。 它很重要,是因為它依舊是主流深度學習平台的重要組成部分:現百度首席科學家吳恩達曾利用16000顆CPU搭建了當時世界上最大的人工神經網絡“Google Brain”并利用深度學習算法識别出了“貓”,又比如名震一時的“AlphaGo”就配置了多達1920顆CPU。

但是它又不是太重要:相比于其他硬體加速工具,傳統的CPU在架構上就有着先天的弱勢。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

上圖是CPU與GPU内部結構上的對比,總體上來說二者都是由控制器(Control),寄存器(Cache、DRAM)和邏輯單元(ALU:Arithmetic Logic Unit)構成。但是三者的比例卻有很大的不同。在CPU中控制器和寄存器占據了結構中很大一部分,與之相反,在GPU中,邏輯單元的規模則是遠遠超過其他二者之和。這種不同的構架就決定了CPU在指令的處理/執行,函數的調用上有着很好的發揮,但由于邏輯單元所占比重較小,相對于GPU而言,在資料的處理方面(算術運算或者邏輯運算)的能力就弱了很多。

我們拿NIVIDA公司基于Maxwell構架的GPU來詳細說明。這顆代号GM200的顯示核心主要由4個圖形處理叢集(GPC:Graphics Processing Clusters ),16個流處理叢集(SMM:Steaming Multiprocess)和4個64bit顯存控制器組成。每個流處理叢集中包含了4個排程器(Warp),每個排程器又控制着32個邏輯計算核心(Core),這些Core是實作邏輯計算的基本單元。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

GPU進行資料處理的過程可以描述成:GPU從CPU處得到資料處理的指令,把大規模、無結構化的資料分解成很多獨立的部分然後配置設定給各個流處理器叢集。每個流處理器叢集再次把資料分解,配置設定給排程器所控制的多個計算核心同時執行資料的計算和處理。如果一個核心的計算算作一個線程,那麼在這顆GPU中就有32×4×16, 2048個線程同時進行資料的處理。盡管每個線程/Core的計算性能、效率與CPU中的Core相比低了不少,但是當所有線程都并行計算,那麼累加之後它的計算能力又遠遠高于CPU。對于基于神經網絡的深度學習來說,它硬體計算精度要求遠遠沒有對其并行處理能力的要求來的迫切。而這種并行計算能力轉化為對于硬體的要求就是盡可能大的邏輯單元規模。通常我們使用每秒鐘進行的浮點運算(Flops/s)來量化的參數。不難看出,對于單精度浮點運算,GPU的執行效率遠遠高于CPU。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

除了計算核心的增加,GPU另一個比較重要的優勢就是他的記憶體結構。首先是共享記憶體。在NVIDIA披露的性能參數中,每個流處理器叢集末端設有共享記憶體。相比于CPU每次操作資料都要傳回記憶體再進行調用,GPU線程之間的資料通訊不需要通路全局記憶體,而在共享記憶體中就可以直接通路。這種設定的帶來最大的好處就是線程間通訊速度的提高(速度:共享記憶體》全局記憶體)。

再就是高速的全局記憶體(顯存):目前GPU上普遍采用GDDR5的顯存顆粒不僅具有更高的工作頻率進而帶來更快的資料讀取/寫入速度,而且具有更大的顯存帶寬。我們認為在資料進行中,速度往往最終取決于處理器從記憶體中提取資料以及流入和通過處理器要花多少時間。

而在傳統的CPU構架中,盡管有高速緩存(Cache)的存在,但是由于其容量較小,大量的資料隻能存放在記憶體(RAM)中。進行資料處理時,資料要從記憶體中讀取然後在CPU中運算最後傳回記憶體中。由于構架的原因,二者之間的通信帶寬通常在60GB/s左右徘徊。與之相比,大顯存帶寬的GPU具有更大的資料吞吐量。在大規模深度神經網絡的訓練中,必然帶來更大的優勢。

而且就目前而言,越來越多的深度學習标準庫支援基于GPU的深度學習加速,通俗點描述就是深度學習的程式設計架構會自動根據GPU所具有的線程/Core數,去自動配置設定資料的處理政策,進而達到優化深度學習的時間。而這些軟體上的全面支援也是其他計算結構所欠缺的。

2.2、未來

但是CPU真的在未來規模深度神經網絡的計算中淪為花瓶麼?CPU巨擘英特爾顯然不甘于出現這樣的局面。

在其于去年釋出的代号“KNL(Knignts Landing)融核”處理器介紹中,我們發現英特爾針對目前CPU的種種弊端做出了很大的調整:首先在硬體架構上內建了更多的核心(72顆),這意味着有更多的邏輯單元去進行運算。其次是英特爾為這些核心增加了“可變精度”的支援,在低精度模式下(深度學習通常使用單精度)大幅度提高其浮點運算能力(3+TFlops),甚至接近GPU的性能名額。在記憶體支援方面,它不僅可以支援更多的記憶體,而且大幅提高了與記憶體間資料通訊的帶寬,這也解決了目前CPU資料傳輸速度的弊端。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

與這顆處理器相比對的,是“MIC(Many Integrated Core)”衆核同構計算模型。也是有别于其他加速硬體而被稱為衆核計算的原因:它可以完美運作X86代碼。簡而言之就是它可以直接脫離CPU直接與記憶體相連來進行深度學習。相對于“CPU+加速硬體”的異構模型,這種衆核計算在很大程度上避免了CPU與加速硬體之間的通訊帶寬問題。進而優化深度學習訓練時間。

以現狀而論,GPU的風頭遠遠蓋過CPU,但是對于CPU而言,新釋出的處理器在構架上的變化讓它把曾經的劣勢(核心數/帶寬)逐漸變為了它潛在的優勢。是以,二者資料訓練領域之争還依舊會持續下去。

三、資料的推斷:FPGA VS ASIC

雖然“CPU+GPU”或者“MIC”的計算模型被廣泛的應用于各種深度學習中去。其實CPU與GPU都是利用現有的成熟技術去提供了一種通用級的解決方法來滿足深度學習的要求,盡管如Intel 與NVIDIA不斷推出了如“KNL”和“Pascal”系列加速晶片來助陣深度學習,但這僅僅是大公司對于深度學習的一種妥協,而并不是一種針對性的專業解決方案。

目前在深度學習模型的訓練領域基本使用的是SIMD(Single Instruction Multiple Data:單指令多資料流架構)計算,即隻需要一條指令就可以平行處理大批量資料。但是,在平台完成訓練之後,它還需要進行推理環節的計算。這部分的計算更多的是屬于MISD(Multiple Instruction Single Data:多指令流單資料流)。比如訊飛語音輸入法在同一時間要對數以百萬計的用于的語音輸入進行識别并轉化為文字輸出。

在這個階段,他們的作用必遠不如訓練階段那麼得心應手。而在未來,至少95%的深度學習都用于推斷,尤其是在移動端。隻有不到5%的是用于模型訓練。是以,尋找低功耗,高性能,低延時的加速硬體成了當務之急。在這種情況下,人們把目光投向了“FPGA”與“ASIC”。

3.1、現狀

FPGA全稱是Field Programmable Gate Array:可程式設計邏輯門陣列。相對于之前兩種晶片,它有一下幾個的特點:硬體層面上,其内部內建大量的數字電路基本門電路和存儲器,使用者可以通過燒入配置檔案來定義這些它們之間的連線,進而達到定制電路的目的;邏輯層面上,它不依賴于馮諾依曼結構,一個計算得到的結果可以被直接饋送到下一個無需在主存儲器臨時儲存,是以不僅存儲器帶寬需求比使用GPU 或者CPU實作時低得多,而且還具有流水處理和響應迅速的特點。

ASIC(Application-Specific Integrated Circuit)是一種為專門目的而設計的內建電路。是指應特定使用者要求和特定電子系統的需要而設計、制造的內建電路。ASIC的特點是面向特定使用者的需求。亮點在于運作速度在同等條件下比FPGA快。根據谷歌披露的資料,完全版的“AlphaGo”擁有1920顆CPU和280顆GPU,除此此外,還有它還安裝一定數量的TPU(Tensor Processing Unit)。 盡管谷歌一直對TPU語焉不詳,業内普遍認為“AlphaGo”對圍棋局勢的預判所使用的置信網絡(Value network)就是依賴TPU的發揮。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

與GPU/CPU相比,FPGA與ASIC擁有良好的運作能效比,在實作相同性能的深度學習算法中,GPU所需的功耗遠遠大于FGPA與ASIC。浪潮與Intel 于去年底FPGA加速卡 F10A 最高性能的加速卡,單晶片峰值運算能力達到1.5TFlops,功耗才35W,每瓦特功率42GFlops,是GPU的數倍之高。其次,對于SIMD計算,GPU/CPU盡管具有很多邏輯核心,但是受限于馮諾依曼結構,無法發揮其并行計算的特點。而FPGA與ASIC不僅可以做到并行計算,而且還能實作流水處理。這大大減小了輸入與輸出的延時比。

下圖是FPGA與ASIC在設計環節的對比。FPGA從設計的角度來說更加的靈活多變。隻要用 Verilog或者其他描述語言定義好内部的邏輯結構即可實作硬體加速器功能。而ASIC則更像是一錘子賣賣:針對特定功能深度學習算法量身定做的。而且ASIC的設計和制造要經過很多的驗證和實體設計,與FPGA的即插即用相比,需要更多的時間,而且從設計到制造,付出的代價也相應的高了很多。一般來說,基于FPGA的開發周期大約為6個月,而相同規格的ASIC則需要1年左右。

深度學習硬體這件事,GPU、CPU、FPGA到底誰最合适?

但是話又說回來,事物都有兩面性。FPGA的的架構固然帶來了應用上的靈活性和低成本,但是從執行的效率上來說,它又遠遠比不上ASIC,FPGA的通用性必然導緻備援。FPGA的運算電路基于查找表,比如說,FPGA内部有1000萬個自定義邏輯部件,一個4輸入的查找表單元需要96個半導體來支援,而在ASIC上來實作估計隻需要10個左右。這些備援也必然展現在晶片的面積和功耗上。

與CPU與GPU之争的一邊倒相比,由于功能與市場定位等原因,二者間的競争還是相當緩和。

由于FPGA具有開發周期短,上市速度快,可配置性等特點,目前被大量的應用在大型企業的線上資料進行中心,和軍工機關。

而ASIC由于一次性成本遠遠高于FPGA,但由于其量産成本低,是以應用上就偏向于消費電子,如移動終端等領域。

繼續閱讀