BNN,FPGA,人工智慧,CNN
BNN攜手FPGA 深度學習效能再上層樓
時至今日,幾乎每個應用領域都可獲益於深度學習,充分利用人工神經網路,從大量資料中學習,而高效率的執行特定的功能。在神經網路的這一研究和創新領域中,卷積神經網路(CNN)已經成為了新興的深度學習技術,可以妥善解決影像分類和物件辨識上的問題。CNN利用卷積運算來探索出影像集內部的空間相關性。CNN一般被視為理想的神經網路,特別是用於低功率應用,因為與需要更多資源的完全互聯網路相比,CNN更為輕巧,也更容易為系統進行訓練。
BNN降低高效能神經網路執行功率
為了減少矽材料的使用數量,降低執行高效能神經網路所需的功率,其中一個方法就是縮小浮點計算的動態範圍。使用16位元的浮點計算來取代32位元的計算,已經被證實為只會輕微的影響到影像分類的準確性。
此外,根據具體網路的不同,計算的精度甚至還可以進一步降低到定點或者一位元的級別。這種透過降低計算精度來改進整體效率的趨勢,已經引發了二進位權的使用,比如說,只使用兩個+1和-1值來對權值和輸入的啟動執行二值化。這種新的方式稱為二進位神經網路(BNN),可以把卷積層和全連接層中的全部定點乘法運算縮減為1位元的XNOR計算。
各大晶片商加速布局卷積運算技術
現有的各類卷積運算技術正快速發展以迎合這一動態市場的需求。比如說,NVIDIA不僅為此採納了底層的GPU架構和工具,還有這類技術的產品策略與價值主張。GPU用於圖形及高要求的HPC應用,在市場上曾經被稱作終極的雙精度浮點引擎,現在已經針對深度學習領域的CNN市場重新定位,因為在這一市場上,半精度的算術支援才是成功關鍵。
大力擁護AI技術的Google已經建立起了自己的硬體架構,即張量處理單元 (TPU),這一單元與Google的機器學習框架TensorFlow緊密結合在一起。其他的產業領導者,包括微軟這一超大規模的創新企業在內,已經選取了現場可編程設計閘陣列(FPGA)來作為其AI架構的大腦,這是一系列可持續的神經網路組合,可望帶來即時的成果。本文闡釋了為甚麼FPGA具有獨一無二的定位,從而滿足任何位元範圍的神經網路(特別是BNN)對路線圖提出的動態要求。
二進位神經網路可提升訓練精度
CNN網路內部的卷積處理須要儲存和處理以數百萬計的系數,傳統上,其中每個系數都利用單精確度的方式來儲存。研究顯示,系數可以折減為半精度而不會使運算的總體精度產生實質性的變化,同時還可以降低儲存容量及記憶體頻寬。更為重要的是,這一方法還可以縮短系統訓練時間與推斷時間;當今可用的大多數預訓練CNN模型,都部分的降低了精度。
採用不同的方法來訓練這些系數,可以把位元精度縮減為一位元,其換算系數為1。在訓練過程中,抽取全部輸出特徵參數的平均值,然後從原值中減去這一平均值,便可以得到一個正或者為負的結果(以二進位記數法的1、0來表達,如圖1),可以將浮點系數轉換為二值化的值,並且對因數進行換算;然後卷積的輸出結果將與這一平均值相乘。
FPGA有效實踐神經網路訓練
首先,對權值進行二值化處理可以按32的系數來大幅降低對外部記憶體頻寬和儲存的需求。由於每個區塊在組態後可以具有範圍從1至32位元的埠頻寬,因此FPGA結構可以充分的利用這種二值化處理。因此,FPGA用於儲存權值的內部資源可以明顯減少,從而為任務的並行化提供更多空間。
網路的二值化也可以使CNN的卷積以輸入啟動的一系列加法或減法表達出來。如果權值為二進位的0,則將從結果中減去輸入值;如果權值為二進位的1,則將之加進結果。
FPGA中的每個邏輯元素都具有帶加法的進位元鏈邏輯,可以有效的執行幾乎任何位元長度的整數加法運算。高效率地利用這些數值,便可以使一個單獨的FPGA設備執行數萬次的並行加法運算。
為了做到這一點,就必須將浮點輸入啟動轉換為固定精度。考慮到FPGA結構的靈活性,我們可以調諧定點加法使用的位元數以滿足CNN的要求。對眾多的CNN中動態範圍的啟動進行的分析表明,只需要少量的位元,通常為8位元,即可將精度保持在浮點等效設計的1%之內。如果需要更高精度,則可以增加位元數。
將卷積轉換為定點,不再需要通過二值化來執行乘法運算,可以顯著降低FPGA內部所需的邏輯資源;與單精確度或半精度的實施相比,此舉使得同一個FPGA內可以執行更多的處理作業。
隨著越來越多的卷積層加入,深度學習模式正在變得愈發深入。能否將所有這些層疊加到一個單獨的FPGA設備當中,決定了是否可以在給定的成本下實現最佳的每瓦效能,同時將延遲保持在最低程度。
本文所述的CNN使用了英特爾的FPGA OpenCL框架來建立。為了進一步的最佳化設計,Nallatech研究中心開發了用於二進位卷積和其他位元處理運算的IP庫。這就可以提供更強的混合程式設計能力與更高的效率。
本文所針對的網路為Yolo v3網路(表1)。該網路主要由卷積層組成,因此FPGA進行最佳化,使其在卷積過程中具有盡可能高的效率。為了做到這一點,這個設計採用了HDL代碼塊來執行二進位網路所需的整數累積運算,以達到極高效率的實施。
表2列出了在使用二進位權時,8位元啟動資料累積運算的資源需求。這等效於 2,048次浮點計算,但是只須要花費2%的設備資源。請注意,FPGA還需要額外的資源來重構資料,因此可以利用這一方式來處理;然而,它同時指明了這方法與浮點實施相比可節省大量資源。
該FPGA還須處理Yolo v3的其他層,將通過PCIe介面複製的資料量減至最少程度。這些層需要的處理要少得多,所以,分配給這些任務的FPGA資源要少一些。為了使網路能夠正確的訓練,需要採用單精確度的準確性來處理啟動層。因此,除了卷積層以外的所有層都以單精確度進行運算。
最後的卷積層也以單精確度進行運算,用以改善訓練結果,並且在主機的CPU上進行處理。表3詳細介紹了OpenCL核心所需的資源,包括從浮點到8位元輸入的所有轉換、輸出資料的換算,以及最後的浮點累積運算。
另一方面,本文中的FPGA設備是英特爾Arria-10。這是一種獲得英特爾OpenCL軟體開發套裝(SDK)完全支援的中階FPGA。Nallatech以內插式PCIe卡或整合機架安裝式伺服器的形式,提供這種靈活的高能效加速器。
在OpenCL中開發的應用可利用Nallatech的板級支援包(BSP)映射到FPGA結構,與使用FPGA技術的通常情況相比,可以使客戶(主要是著重軟體而非硬體客戶)毋須顧慮內裏的細節。
對於典型的Arria 10設備,每個卷積塊在一個時鐘週期內可執行2,048次運算,意即每秒鐘大約是0.5 TOPS。4個這種核心便可以使Yolo v3以約每秒8幀的畫面播放速率執行,功耗為35瓦,等效於每瓦57 GOPS。
XNOR網路降低CNN運算/儲存需求
轉向完全的XNOR網路可進一步降低CNN運算和儲存需求,使權值和啟動都以二進位輸入的形式表達。在該情況下,簡單的把卷積利用逐位的XNOR運算表達出來,同時含有一些位元運算邏輯。這樣就等效於之前所述的二進位版本,然而,啟動的寬度只需一位元。
在FPGA上執行時,預計這一網路的加速度將達到2個數量級的程度。這種顛覆性的效能改進使得我們可利用高能效設備來並行執行多個即時推理作業。XNOR網路需要不同的訓練方式,其中,前進過程中的啟動將轉換為二進位及一個換算系數。
雖然二進位網路在精度上稍微下降,但與等效的浮點運算相比,XNOR網路還是存在著10到20%的差異。然而,這是由於使用的CNN並不是專為XNOR運算而設計。隨著這一領域中的研究不斷增加,業界將可能出現專為XNOR網路設計的新模型,不僅可提供與最佳CNN相近的精度,還可獲益於這種新方法的極高效率。
BNN結合FPGA有效提升深度學習效能
本文表明,在不對應用運算成果產生負面影響的情況下,可以實現可觀的位縮減。BNN與FPGA的屬性完美配合,與典型的CNN相比,其規模可以縮小達三十倍,進而產生許多優勢,包括減少矽材料的用量、降低記憶體頻寬、節省能耗以及減慢時鐘速度。
考慮到業界已經認可了FPGA在有效實施定點運算上的實力,FPGA正處於一個得天獨厚的優勢地位,可滿足BNN的需求。FPGA在架構上具有與生俱來的靈活性,可以為深度學習領域的創新企業賦予充分的能力,對於任何新興的突破性新技術來說,都可提供一種加快部署的選項。根據預計,XNOR網路可以為一系列的雲端運算、邊緣應用及嵌入式應用實現突飛猛進的影像辨識功能。
(本文作者任職於Nallatech)