云中的机器学习:FPGA 上的深度神经网络
生活随笔
收集整理的這篇文章主要介紹了
云中的机器学习:FPGA 上的深度神经网络
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
| 人工智能正在經(jīng)歷一場變革,這要得益于機器學習的快速進步。在機器學習領域,人們正對一類名為“深度學習”算法產(chǎn)生濃厚的興趣,因為這類算法具有出色的大數(shù)據(jù)集性能。在深度學習中,機器可以在監(jiān)督或不受監(jiān)督的方式下從大量數(shù)據(jù)中學習一項任務。大規(guī)模監(jiān)督式學習已經(jīng)在圖像識別和語音識別等任務中取得巨大成功。 深度學習技術使用大量已知數(shù)據(jù)找到一組權重和偏差值,以匹配預期結果。這個過程被稱為訓練,并會產(chǎn)生大型模式。這激勵工程師傾向于利用專用硬件(例如 GPU)進行訓練和分類。 隨著數(shù)據(jù)量的進一步增加,機器學習將轉移到云。大型機器學習模式實現(xiàn)在云端的CPU 上。盡管 GPU對深度學習算法而言在性能方面是一種更好的選擇,但功耗要求之高使其只能用于高性能計算集群。因此,亟需一種能夠加速算法又不會顯著增加功耗的處理平臺。 在這樣的背景下,FPGA似乎是一種理想的選擇,其固有特性有助于在低功耗條件下輕松啟動眾多并行過程。 讓我們來詳細了解一下如何在賽靈思FPGA 上實現(xiàn)卷積神經(jīng)網(wǎng)絡 (CNN)。CNN是一類深度神經(jīng)網(wǎng)絡,在處理大規(guī)模圖像識別任務以及與機器學習類似的其他問題方面已大獲成功。在當前案例中,針對在FPGA 上實現(xiàn) CNN做一個可行性研究,看一下 FPGA 是否適用于解決大規(guī)模機器學習問題。 卷積神經(jīng)網(wǎng)絡是一種深度神經(jīng)網(wǎng)絡 (DNN),工程師最近開始將該技術用于各種識別任務。圖像識別、語音識別和自然語言處理是CNN 比較常見的幾大應用。 什么是卷積神經(jīng)網(wǎng)絡? 卷積神經(jīng)網(wǎng)絡是一種深度神經(jīng)網(wǎng)絡 (DNN),工程師最近開始將該技術用于各種識別任務。圖像識別、語音識別和自然語言處理是CNN 比較常見的幾大應用。 2012年,AlexKrishevsky 與來自多倫多大學 (University of Toronto) 的其他研究人員 [1] 提出了一種基于CNN的深度架構,贏得了當年的“Imagenet大規(guī)模視覺識別挑戰(zhàn)”獎。他們的模型與競爭對手以及之前幾年的模型相比在識別性能方面取得了實質性的提升。自此,AlexNet 成為了所有圖像識別任務中的對比基準。 AlexNet 有五個卷積層和三個致密層(圖1)。每個卷積層將一組輸入特征圖與一組權值濾波器進行卷積,得到一組輸出特征圖。致密層是完全相連的一層,其中的每個輸出均為所有輸入的函數(shù)。 卷積層 AlexNet 中的卷積層負責三大任務,如圖2 所示:3D 卷積;使用校正線性單元 (ReLu) 實現(xiàn)激活函數(shù);子采樣(最大池化)。3D 卷積可用以下公式表示:? <ignore_js_op> 其中Y (m,x,y) 是輸出特征圖 m 位置(x,y)處的卷積輸出,S是 (x,y) 周圍的局部鄰域,W 是卷積濾波器組,X(n,x,y)是從輸入特征圖 n 上的像素位置(x,y)獲得的卷積運算的輸入。 所用的激活函數(shù)是一個校正線性單元,可執(zhí)行函數(shù)Max(x,0)。激活函數(shù)會在網(wǎng)絡的傳遞函數(shù)中引入非線性。最大池化是AlexNet 中使用的子采樣技術。使用該技術,只需選擇像素局部鄰域最大值傳播到下一層。 定義致密層 AlexNet中的致密層相當于完全連接的層,其中每個輸入節(jié)點與每個輸出節(jié)點相連。AlexNet中的第一個致密層有 9,216個輸入節(jié)點。將這個向量乘以權值矩陣,以在 4,096個輸出節(jié)點中產(chǎn)生輸出。在下一個致密層中,將這個 4,096節(jié)點向量與另一個權值矩陣相乘得到4,096個輸出。最后,使用 4,096個輸出通過 softmax regression 為 1,000個類創(chuàng)建概率。 在FPGA上實現(xiàn)CNN 隨著新型高級設計環(huán)境的推出,軟件開發(fā)人員可以更方便地將其設計移植到賽靈思FPGA 中。軟件開發(fā)人員可通過從 C/C++ 代碼調用函數(shù)來充分利用 FPGA 與生俱來的架構優(yōu)勢。Auviz Systems 的庫(例如 AuvizDNN)可為用戶提供最佳函數(shù),以便其針對各種應用創(chuàng)建定制CNN??稍谫愳`思 SD-Accel?這樣的設計環(huán)境中調用這些函數(shù),以在 FPGA 上啟動內核。 最簡單的方法是以順序方式實現(xiàn)卷積和向量矩陣運算??紤]到所涉及計算量,因此順序計算會產(chǎn)生較大時延。 順序實現(xiàn)產(chǎn)生很大時遲的主要原因在于CNN 所涉及的計算的絕對數(shù)量。圖 3 顯示了 AlexNet 中每層的計算量和數(shù)據(jù)傳輸情況,以說明其復雜性。 因此,很有必要采用并行計算。有很多方法可將實現(xiàn)過程并行化。圖6 給出了其中一種。在這里,將 11x11的權值矩陣與一個 11x11的輸入特征圖并行求卷積,以產(chǎn)生一個輸出值。這個過程涉及 121 個并行的乘法-累加運算。根據(jù)FPGA 的可用資源,我們可以并行對 512 抑或768 個值求卷積。 為了進一步提升吞吐量,我們可以將實現(xiàn)過程進行流水線化。流水線能為需要一個周期以上才能完成的運算實現(xiàn)更高的吞吐量,例如浮點數(shù)乘法和加法。通過流水線處理,第一個輸出的時延略有增加,但每個周期我們都可獲得一個輸出。 使用AuvizDNN在 FPGA 上實現(xiàn)的完整 CNN 就像從 C/C++ 程序中調用一連串函數(shù)。在建立對象和數(shù)據(jù)容器后,首先通過函數(shù)調用來創(chuàng)建每個卷積層,然后創(chuàng)建致密層,最后是創(chuàng)建softmax 層,如圖 4 所示。 AuvizDNN是 Auviz Systems 公司提供的一種函數(shù)庫,用于在FPGA上實現(xiàn)CNN。該函數(shù)庫提供輕松實現(xiàn) CNN所需的所有對象、類和函數(shù)。用戶只需要提供所需的參數(shù)來創(chuàng)建不同的層。例如,圖5 中的代碼片段顯示了如何創(chuàng)建 AlexNet 中的第一層。 AuvizDNN提供配置函數(shù),用以創(chuàng)建 CNN 的任何類型和配置參數(shù)。AlexNet 僅用于演示說明。CNN 實現(xiàn)內容作為完整比特流載入 FPGA 并從 C/C++ 程序中調用,這使開發(fā)人員無需運行實現(xiàn)軟件即可使用AuvizDNN。 FPGA具有大量的查找表 (LUT)、DSP 模塊和片上存儲器,因此是實現(xiàn)深度 CNN 的最佳選擇。在數(shù)據(jù)中心,單位功耗性能比原始性能更為重要。數(shù)據(jù)中心需要高性能,但功耗要在數(shù)據(jù)中心服務器要求限值之內。 像賽靈思Kintex? UltraScale? 這樣的FPGA 器件可提供高于 14 張圖像/秒/瓦特的性能,使其成為數(shù)據(jù)中心應用的理想選擇。圖 6 介紹了使用不同類型的 FPGA 所能實現(xiàn)的性能。 一切始于 c/c++ 卷積神經(jīng)網(wǎng)絡備受青睞,并大規(guī)模部署用于處理圖像識別、自然語言處理等眾多任務。隨著CNN 從高性能計算應用 (HPC) 向數(shù)據(jù)中心遷移,需要采用高效方法來實現(xiàn)它們。 FPGA可高效實現(xiàn) CNN。FPGA 的具有出色的單位功耗性能,因此非常適用于數(shù)據(jù)中心。 AuvizDNN函數(shù)庫可用來在 FPGA 上實現(xiàn) CNN。AuvizDNN 能降低 FPGA 的使用復雜性,并提供用戶可從其 C/C++程序中調用的簡單函數(shù),用以在FPGA上實現(xiàn)加速。使用 AuvizDNN 時,可在 AuvizDNN 庫中調用函數(shù),因此實現(xiàn) FPGA加速與編寫 C/C++ 程序沒有太大區(qū)別。 <ignore_js_op> 圖 1 – AlexNet 是一種圖像識別基準,包含五個卷積層(藍框)和三個致密層(黃) <ignore_js_op> 圖 2 – AlexNet 中的卷積層執(zhí)行 3D卷積、激活和子采樣 <ignore_js_op> 圖 3 – 圖表展示了 AlexNet 中涉及的計算復雜性和數(shù)據(jù)傳輸數(shù)量 <ignore_js_op> 圖 4 - 實現(xiàn) CNN 時的函數(shù)調用順序 <ignore_js_op> 圖 5 – 使用 AuvizDNN 創(chuàng)建AlexNet 的 L1 的代碼片段 <ignore_js_op> 圖 6 – AlexNets 的性能因 FPGA類型不同而不同 |
總結
以上是生活随笔為你收集整理的云中的机器学习:FPGA 上的深度神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【自用】 TensorFlow merg
- 下一篇: 5.1 vim—5.4vim编辑器