天天看點

深度學習FPGA實作基礎知識0(FPGA擊敗GPU和GPP,成為深度學習的未來?) FPGA擊敗GPU和GPP,成為深度學習的未來?

需求說明:深度學習FPGA實作知識儲備

來自:http://power.21ic.com/digi/technical/201603/46230.html

FPGA擊敗GPU和GPP,成為深度學習的未來?

最近幾年,深度學習成為計算機視覺、語音識别、自然語言處理等關鍵領域中所最常使用的技術,被業界大為關注。然而,深度學習模型需要極為大量的資料和計算能力,隻有更好的硬體加速條件,才能滿足現有資料和模型規模繼續擴大的需求。現有的解決方案使用圖形處理單元(GPU)叢集作為通用計算圖形處理單元(GPGPU),但現場可程式設計門陣列(FPGA)提供了另一個值得探究的解決方案。日漸流行的FPGA設計工具使其對深度學習領域經常使用的上層軟體相容性更強,使得FPGA更容易為模型搭建和部署者所用。FPGA架構靈活,使得研究者能夠在諸如GPU的固定架構之外進行模型優化探究。同時,FPGA在機關能耗下性能更強,這對大規模伺服器部署或資源有限的嵌入式應用的研究而言至關重要。本文從硬體加速的視角考察深度學習與FPGA,指出有哪些趨勢和創新使得這些技術互相比對,并激發對FPGA如何幫助深度學習領域發展的探讨。

簡介

機器學習對日常生活影響深遠。無論是在網站上點選個性化推薦内容、在智能手機上使用語音溝通,或利用面部識别技術來拍照,都用到了某種形式的人工智能技術。這股人工智能的新潮流也伴随着算法設計的理念轉變。過去基于資料的機器學習大多是利用具體領域的專業知識來人工地“塑造”所要學習的“特征”,計算機從大量示例資料中習得組合特征提取系統的能力,則使得計算機視覺、語音識别和自然語言處理等關鍵領域實作了重大的性能突破。對這些資料驅動技術的研究被稱為深度學習,如今正受到技術界兩個重要群體的關注:一是希望使用并訓練這些模型、進而實作極高性能跨任務計算的研究者,二是希望為現實世界中的新應用來部署這些模型的應用科學家。然而,他們都面臨着一個限制條件,即硬體加速能力仍需加強,才可能滿足擴大現有資料和算法規模的需求。

對于深度學習來說,目前硬體加速主要靠使用圖形處理單元(GPU)叢集作為通用計算圖形處理單元(GPGPU)。相比傳統的通用處理器(GPP),GPU的核心計算能力要多出幾個數量級,也更容易進行并行計算。尤其是NVIDIA CUDA,作為最主流的GPGPU編寫平台,各個主要的深度學習工具均用其來進行GPU加速。最近,開放型并行程式設計标準OpenCL作為異構硬體程式設計的替代性工具備受關注,而對這些工具的熱情也在高漲。雖然在深度學習領域内,OpenCL獲得的支援相較CUDA還略遜一籌,但OpenCL有兩項獨特的性能。首先,OpenCL對開發者開源、免費,不同于CUDA單一供應商的做法。其次,OpenCL支援一系列硬體,包括GPU、GPP、現場可程式設計門陣列(FPGA)和數字信号處理器(DSP)。

作為GPU在算法加速上強有力的競争者,FPGA是否立即支援不同硬體,顯得尤為重要。FPGA與GPU不同之處在于硬體配置靈活,且FPGA在運作深入學習中關鍵的子程式(例如對滑動視窗的計算)時,機關能耗下通常能比GPU提供更好的表現。不過,設定FPGA需要具體硬體的知識,許多研究者和應用科學家并不具備,正因如此,FPGA經常被看作一種行家專屬的架構。最近,FPGA工具開始采用包括OpenCL在内的軟體級程式設計模型,使其越來越受經主流軟體開發訓練的使用者青睐。

對考察一系列設計工具的研究者而言,其對工具的篩選标準通常與其是否具備使用者友好的軟體開發工具、是否具有靈活可更新的模型設計方法以及是否能迅速計算、以縮減大模型的訓練時間有關。随着FPGA因為高抽象化設計工具的出現而越來越容易編寫,其可重構性又使得定制架構成為可能,同時高度的并行計算能力提高了指令執行速度,FPGA将為深度學習的研究者帶來好處。

對應用科學家而言,盡管有類似的工具級選擇,但硬體挑選的重點在于最大化提高機關能耗的性能,進而為大規模運作降低成本。是以,FPGA憑借機關能耗的強勁性能,加上為特定應用定制架構的能力,就能讓深度學習的應用科學家受益。

FPGA能滿足兩類閱聽人的需求,是一個合乎邏輯的選擇。本文考察FPGA上深度學習的現狀,以及目前用于填補兩者間鴻溝的技術發展。是以,本文有三個重要目的。首先,指出深度學習領域存在探索全新硬體加速平台的機會,而FPGA是一個理想的選擇。其次,勾勒出FPGA支援深度學習的現狀,指出潛在的限制。最後,對FPGA硬體加速的未來方向提出關鍵建議,幫助解決今後深度學習所面臨的問題。

FPGA

傳統來說,在評估硬體平台的加速時,必須考慮到靈活性和性能之間的權衡。一方面,通用處理器(GPP)可提供高度的靈活性和易用性,但性能相對缺乏效率。這些平台往往更易于擷取,可以低廉的價格生産,并且适用于多種用途和重複使用。另一方面,專用內建電路(ASIC)可提供高性能,但代價是不夠靈活且生産難度更大。這些電路專用于某特定的應用程式,并且生産起來價格昂貴且耗時。

FPGA是這兩個極端之間的折中。FPGA屬于一類更通用的可程式設計邏輯裝置(PLD),并且簡單來說,是一種可重新配置的內建電路。是以,FPGA既能提供內建電路的性能優勢,又具備GPP可重新配置的靈活性。FPGA能夠簡單地通過使用觸發器(FF)來實作順序邏輯,并通過使用查找表(LUT)來實作組合邏輯。現代的FPGA還含有硬化元件以實作一些常用功能,例如全處理器核心、通信核心、運算核心和塊記憶體(BRAM)。另外,目前的FPGA趨勢趨向于系統晶片(SoC)設計方法,即ARM協處理器和FPGA通常位于同一晶片中。目前的FPGA市場由Xilinx主導,占據超過85%的市場佔有率。此外,FPGA正迅速取代ASIC和應用專用标準産品(ASSP)來實作固定功能邏輯。 FPGA市場規模預計在2016年将達到100億美元。

對于深度學習而言,FPGA提供了優于傳統GPP加速能力的顯著潛力。GPP在軟體層面的執行依賴于傳統的馮?諾依曼架構,指令和資料存儲于外部存儲器中,在需要時再取出。這推動了緩存的出現,大大減輕了昂貴的外部存儲器操作。該架構的瓶頸是處理器和存儲器之間的通信,這嚴重削弱了GPP的性能,尤其影響深度學習經常需要擷取的存儲資訊技術。相比較而言,FPGA的可程式設計邏輯原件可用于實作普通邏輯功能中的資料和控制路徑,而不依賴于馮?諾伊曼結構。它們也能夠利用分布式片上存儲器,以及深度利用流水線并行,這與前饋性深度學習方法自然契合。現代FPGA還支援部分動态重新配置,當FPGA的一部分被重新配置時另一部分仍可使用。這将對大規模深度學習模式産生影響,FPGA的各層可進行重新配置,而不擾亂其他層正在進行的計算。這将可用于無法由單個FPGA容納的模型,同時還可通過将中間結果儲存在本地存儲以降低高昂的全球存儲讀取費用。

最重要的是,相比于GPU,FPGA為硬體加速設計的探索提供了另一個視角。GPU和其它固定架構的設計是遵循軟體執行模型,并圍繞自主計算單元并行以執行任務搭建結構。由此,為深度學習技術開發GPU的目标就是使算法适應這一模型,讓計算并行完成、確定資料互相依賴。與此相反,FPGA架構是為應用程式專門定制的。在開發FPGA的深度學習技術時,較少強調使算法适應某固定計算結構,進而留出更多的自由去探索算法層面的優化。需要很多複雜的下層硬體控制操作的技術很難在上層軟體語言中實作,但對FPGA執行卻特别具有吸引力。然而,這種靈活性是以大量編譯(定位和回路)時間為成本的,對于需要通過設計循環快速疊代的研究人員來說這往往會是個問題。

除了編譯時間外,吸引偏好上層程式設計語言的研究人員和應用科學家來開發FPGA的問題尤為艱難。雖然能流利使用一種軟體語言常常意味着可以輕松地學習另一種軟體語言,但對于硬體語言翻譯技能來說卻非如此。針對FPGA最常用的語言是Verilog和VHDL,兩者均為硬體描述語言(HDL)。這些語言和傳統的軟體語言之間的主要差別是,HDL隻是單純描述硬體,而例如C語言等軟體語言則描述順序指令,并無需了解硬體層面的執行細節。有效地描述硬體需要對數字化設計和電路的專業知識,盡管一些下層的實作決定可以留給自動合成工具去實作,但往往無法達到高效的設計。是以,研究人員和應用科學家傾向于選擇軟體設計,因其已經非常成熟,擁有大量抽象和便利的分類來提高程式員的效率。這些趨勢使得FPGA領域目前更加青睐高度抽象化的設計工具。

深度學習FPGA實作基礎知識0(FPGA擊敗GPU和GPP,成為深度學習的未來?) FPGA擊敗GPU和GPP,成為深度學習的未來?

FPGA深度學習研究裡程碑:

1987VHDL成為IEEE标準

1992GANGLION成為首個FPGA神經網絡硬體實作項目(Cox et al.)

1994Synopsys推出第一代FPGA行為綜合方案

1996VIP成為首個FPGA的CNN實作方案(Cloutier et al.)

2005FPGA市場價值接近20億美元

2006首次利用BP算法在FPGA上實作5 GOPS的處理能力

2011Altera推出OpenCL,支援FPGA

出現大規模的基于FPGA的CNN算法研究(Farabet et al.)

2016在微軟Catapult項目的基礎上,出現基于FPGA的資料中心CNN算法加速(Ovtcharov et al.)

未來展望

深度學習的未來不管是就FPGA還是總體而言,主要取決于可擴充性。要讓這些技術成功解決未來的問題,必須要拓展到能夠支援飛速增長的資料規模和架構。FPGA技術正在适應這一趨勢,而硬體正朝着更大記憶體、更少的特征點數量、更好的互連性發展,來适應FPGA多重配置。英特爾收購了Altera,IBM與Xilinx合作,都昭示着FPGA領域的變革,未來也可能很快看到FPGA與個人應用和資料中心應用的整合。另外,算法設計工具可能朝着進一步抽象化和體驗軟體化的方向發展,進而吸引更廣技術範圍的使用者。

常用深度學習軟體工具

在深度學習最常用的軟體工具中,有些工具已經在支援CUDA的同時,認識到支援OpenCL的必要性。這将使得FPGA更容易實作深度學習的目的。雖然據我們所知,目前沒有任何深度學習工具明确表示支援FPGA,不過下面的表格列出了哪些工具正朝支援OpenCL方向發展:

Caffe,由伯克利視覺與學習中心開發,其GreenTea項目對OpenCL提供非正式支援。Caffe另有支援OpenCL的AMD版本。

Torch,基于Lua語言的科學計算架構,使用範圍廣,其項目CLTorch對OpenCL提供非正式支援。

Theano,由蒙特利爾大學開發,其正在研發的gpuarray後端對OpenCL提供非正式支援。

DeepCL,由Hugh Perkins開發的OpenCL庫,用于訓練卷積神經網絡。

對于剛進入此領域、希望選擇工具的人來說,我們的建議是從Caffe開始,因為它十分常用,支援性好,使用者界面簡單。利用Caffe的model zoo庫,也很容易用預先訓練好的模型進行試驗。

增加訓練自由度

有人或許以為訓練機器學習算法的過程是完全自動的,實際上有一些超參數需要調整。對于深度學習尤為如此,模型在參數量上的複雜程度經常伴随着大量可能的超參數組合。可以調整的超參數包括訓練疊代次數、學習速率、批梯度尺寸、隐藏單元數和層數等等。調整這些參數,等于在所有可能的模型中,挑選最适用于某個問題的模型。傳統做法中,超參數的設定要麼依照經驗,要麼根據系統網格搜尋或更有效的随機搜尋來進行。最近研究者轉向了适應性的方法,用超參數調整的嘗試結果為配置依據。其中,貝葉斯優化是最常用的方法。

不管用何種方法調整超參數,目前利用固定架構的訓練流程在某種程度上局限了模型的可能性,也就是說,我們或許隻在所有的解決方案中管窺了一部分。固定架構讓模型内的超參數設定探究變得很容易(比如,隐藏單元數、層數等),但去探索不同模型間的參數設定變得很難(比如,模型類别的不同),因為如果要就一個并不簡單符合某個固定架構的模型來進行訓練,就可能要花很長時間。相反,FPGA靈活的架構,可能更适合上述優化類型,因為用FPGA能編寫一個完全不同的硬體架構并在運作時加速。

低耗能計算節點叢集

深度學習模型最讓人着迷的就是其拓展能力。不管是為了從資料中發現複雜的高層特征,還是為資料中心應用提升性能,深度學習技術經常在多節點計算基礎架構間進行拓展。目前的解決方案使用具備Infiniband互連技術的GPU叢集和MPI,進而實作上層的并行計算能力和節點間資料的快速傳輸。然而,當大規模應用的負載越來越各不相同,使用FPGA可能會是更優的方法。FPGA的可程式設計行允許系統根據應用和負載進行重新配置,同時FPGA的能耗比高,有助于下一代資料中心降低成本。

結語

相比GPU和GPP,FPGA在滿足深度學習的硬體需求上提供了具有吸引力的替代方案。憑借流水線并行計算的能力和高效的能耗,FPGA将在一般的深度學習應用中展現GPU和GPP所沒有的獨特優勢。同時,算法設計工具日漸成熟,如今将FPGA內建到常用的深度學習架構已成為可能。未來,FPGA将有效地适應深度學習的發展趨勢,從架構上確定相關應用和研究能夠自由實作。

整理來自:時間的詩

</div>