99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于ARM在cpu上做神經(jīng)網(wǎng)絡加速

Q4MP_gh_c472c21 ? 來源:lq ? 2019-01-24 11:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如果對深度學習有所了解的小伙伴們想必都知道,深度學習需要使用強大的服務器、加速嵌入式平臺(如NVIDIA的Jetson)來運行深度學習算法,然而這也同樣意味著不菲的開支。

那么問題來了,如果你想你想用樹莓派來做一個目標跟蹤器,為你看家守院,這可以實現(xiàn)嗎?換句話說,如果你需要在不帶加速器的ARM CPU上運行卷積神經(jīng)網(wǎng)絡了怎么辦?

如何優(yōu)化推理時間?

本文將嘗試回答一個簡單的問題:什么庫/工具包/框架可以幫助我們優(yōu)化訓練模型的推理時間?本文只討論已為ARM架構(gòu)芯片提供C / C ++接口的工具包和庫(由于嵌入式設備上使用 ,我們很少Lua 或 Python),限于文章篇幅,不闡述另外一種加速神經(jīng)網(wǎng)絡推理的方法,即修改網(wǎng)絡架構(gòu),從SqeezeNet架構(gòu)可看出,修改網(wǎng)絡架構(gòu)是一個可行的方案。基于上述原因,本文涉及的實驗只涉及使用Caffe,TensorFlow和MXNet這3個開源的深度學習框架。

加速神經(jīng)網(wǎng)絡模型在硬件平臺計算速度,兩個主要有大的策略:

1)修改神經(jīng)網(wǎng)絡的模型;

2)加快框架運行速度。

當然,將這兩個策略結(jié)合起來使用,也是一種不錯的思路。

修改神經(jīng)網(wǎng)絡模型有兩種方法,一是通過降低權(quán)重精度實現(xiàn),即降低特征量化的精度,二是通過權(quán)重剪枝來實現(xiàn),權(quán)重剪枝的背后的思想是降低系統(tǒng)參數(shù)的冗余。降低權(quán)重低精度通常采用(用定點數(shù)或動態(tài)定點數(shù)表示浮點數(shù)的方法,支持這種做法的原理是:推理過程并不需要高精度,因為在運算過程中,計算的線性性質(zhì)和非線性的動態(tài)范圍壓縮,使得量化誤差僅在子線性地(sub-linearly)范圍內(nèi)傳遞,從而不會引起數(shù)值的劇烈變動。更進一步,我們可以使用低精度乘法來訓練神經(jīng)網(wǎng)絡模型。結(jié)合 SIMD 指令集,比如 SSE3,可以使特征量化過程可以更為高效,從而加速訓練過程。然而,目前我們還很難找到同時使用了這兩者的解決方案。比如使用Ristretto框架可以執(zhí)行有限精度的自動量化,但它卻并沒有降低計算負載。TensorFlow 也可以執(zhí)行量化,但其推理時間實際上卻增加了 5 到 20 倍,因為TensorFlow還引入了輔助量化/去量化的計算節(jié)點。因此在實際操作中,我們只把量化作為壓縮網(wǎng)絡權(quán)重的方法,當存儲空間有限時可以這樣操作,至少這已經(jīng)是當前最先進的技術(shù)。

從另外一個角度看,我們可采用加快框架的執(zhí)行時間的方法,這種方法不會影響到模型的參數(shù)。這種策略主要上采用優(yōu)化矩陣之間的乘法(GEMM)類的通用計算技巧,從而同時影響卷積層(其計算通常是 im2col+ GEMM)和全連接層。除此之外,可以使用神經(jīng)網(wǎng)絡的加速包NNPACK,就個人理解,NNPACK的核心思路是使用快速傅里葉變換將時間域中的卷積運算轉(zhuǎn)換成了頻域中的乘法運算。

加快框架執(zhí)行速度另一種方法是將網(wǎng)絡模型和權(quán)重配置轉(zhuǎn)換成針對目標平臺代碼,并對代碼進行優(yōu)化,而不是讓它們直接在某一個框架內(nèi)運行。這種方法的典型案例是 TensorRT。還有 CaffePresso, 可以將 Caffe中prototxt類型的文件定制成適用于各種不同硬件平臺的低規(guī)格版本。然而,TensorRT的運行需要CUDA,而且只能在 NVIDIA的 GPU中才能使用,而 CaffePresso 也需要某種硬件加速器(DSP、FPGA或NoC)上述內(nèi)容仔細地評估現(xiàn)有的解決辦法后,我發(fā)現(xiàn)以下幾種方法能夠加速當前流行的可用模型的推理:

如果你的框架中使用了 OpenBLAS(基礎線性代數(shù)程序集的開源實現(xiàn)),你可以嘗試使用其為深度學習進行過優(yōu)化的分支: https://github.com/xianyi/OpenBLAS/tree/optimized_for_deeplearning

NNPACK 能和其他一些框架(包括 Torch、Caffe 和 MXNet)聯(lián)合使用:http://github.com/Maratyszcza/NNPACK

將TensorFlow編譯為在樹莓派平臺的目標代碼時,你可以使用一些編譯優(yōu)化標志,從而充分利用NEON 指令集加速目標代碼的執(zhí)行速度:http://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile#raspberry-pi

基于以上3種方法,我概括出以下調(diào)測配置:

1. 使用以 OpenBLAS為后端的Caffe 主分支(caffe-openblas);

2. 使用以 OpenBLAS為后端OpenBLAS 且為深度學習優(yōu)化過的Caffe分支版本(caffe-openblas-dl);

3. 編譯TensorFlow時,使用優(yōu)化編譯標志 OPTFLAGS="-Os" (tf-vanilla)

4. 編譯TensorFlow時,使用優(yōu)化編譯標志 OPTFLAGS="-Os -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize" (tf-neon-vfpv4)

5. 使用以OpenBLAS實現(xiàn)基礎線性代數(shù)程序集的Vanilla MXNet

6. 使用帶有 OpenBLAS 、且為深度學習優(yōu)化過MXNet 分支版本(mxnet-openblas-dl)。

你可能會疑惑:配置中怎么沒有 NNPACK?這確實有點復雜,由 ajtulloch 創(chuàng)建的 Caffe 分支提供了最直接的使用 NNPACK方法。然而自從它被集成進去以后,NNPACK 的API接口 就已經(jīng)改變了,并且目前我無法編譯它。Caffe2 對 NNPACK 有原生支持,但我不會考慮 Caffe2,因為它處于實驗性階段并且?guī)缀鯇affe進行了尚未文檔化的重構(gòu)。另外一個選項就是使用Maratyszcza的caffe-nnpack分支,但該分支比較老舊且已經(jīng)停止維護。

另外一個問題就是出于NNPACK本身。它只提供了Android/ARM平臺的交叉編譯配置,并不提供在 Linux/ARM 平臺上的交叉編譯配置。結(jié)合MXNet,我嘗試編譯目標平臺代碼,但結(jié)果無法在目標平臺上正常運行。我只能在臺式電腦上運行它,但是我并沒有看到比 OpenBLAS 會有更好的性能。由于我的目標是評估已經(jīng)可用的解決方法,所以我只能推遲NNPACK 的實驗了。

以上所有的這些方法都是在四核 1.3 GHz CPU 和 1 GB RAM 的樹莓派 3 上執(zhí)行。操作系統(tǒng)是 32 位的 Raspbian,所以檢測到的 CPU 不是 ARMv8 架構(gòu),而是 ARMv7 架構(gòu)。硬件規(guī)格如下:

model name : ARMv7 Processor rev 4 (v7l)

BogoMIPS : 38.40

Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

CPU implementer : 0x41

CPU architecture: 7

CPU variant : 0x0

CPU part : 0xd03

CPU revision : 4

為了評估上述每個測試配置的性能,我制定的測試方案如下:使用相同的神經(jīng)網(wǎng)絡。也就是一個有 3 個卷積層和2個全連接層且在頂層帶有Softmax的小型卷積神經(jīng)網(wǎng)絡:

conv1: 16@7x7

relu1pool1: MAX POOL 2x2conv2: 48@6x6

relu2pool2: MAX POOL 3x3conv3: 96@5x5

relu3fc1: 128 unitsfc2: 848 units

softmax

該卷積神經(jīng)網(wǎng)絡有 1039744 個參數(shù)。雖然非常小,但它已經(jīng)足夠強大了,可以用來處理許多計算機視覺算法。該網(wǎng)絡使用 Caffe 進行訓練人臉識別任務,并將其轉(zhuǎn)換為 TensorFlow 和 MXNet 格式,從而使用這些框架進行評估。批量執(zhí)行次數(shù)對性能有很大的影響,為了測量前向通過時間(forward pass time),我們將批量執(zhí)行的次數(shù)設置為 1 到 256。在不同次數(shù)的批量執(zhí)行中,我們每次執(zhí)行 100 次前向通過,并計算了每一張圖像的平均處理時間。

評估結(jié)果和討論

在下面的表格中,列出了平均前向通過的時間。其中,A 是 caffe-openblas, B 是 caffe-openblas-dl, C 代表 tf-vanilla, D 是 tf-neon-vfpv4, E 是 mxnet-openblas, F 是 mxnet-openblas-dl。

表1 不同測試配置在不同的批處理次數(shù)下的性能表現(xiàn)

圖1 線性尺度下不同配置的前向通過時間比較

在對數(shù)尺度尺度上我們再來看一下:

圖2 對數(shù)尺度下不同配置的前向通過時間比較

測試結(jié)果讓我大吃一驚。首先,我沒有預料到在 CPU 上運行 MXNet的性能會這么差。但這看起來已經(jīng)是一個眾所周知的問題。此外,受限于存儲空間,它無法運行 256 張圖片的批處理。第二個驚奇是優(yōu)化過的 TensorFlow 竟有如此好的性能。它甚至比 Caffe 的表現(xiàn)還好(批處理次數(shù)超過2時),光從原始框架上看是很難預料這個結(jié)果的。需要注意的是,上述測試配置中的優(yōu)化標志并不是在任意 ARM 芯片上都可以使用的。

Caffe因速度非??旌退悸藩毜蕉?a target="_blank">知名。如果你需要連續(xù)地處理圖片,可以選擇使用優(yōu)化過的OpenBLAS的Caffe,可得到最好的處理性能。如果想提升10ms 的性能,你所要做的就只是簡單的輸入以下指令:

cd OpenBLAS

git checkout optimized_for_deeplearning

為了將我的研究轉(zhuǎn)變成正式的東西,我仍需要做大量的工作:評估更多的模型,最終集成 NNPACK,以及研究更多結(jié)合了BLAS 后端的框架。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:基于ARM在cpu上做神經(jīng)網(wǎng)絡加速

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    脈沖耦合神經(jīng)網(wǎng)絡FPGA的實現(xiàn)誰會?

    脈沖耦合神經(jīng)網(wǎng)絡(PCNN)FPGA的實現(xiàn),實現(xiàn)數(shù)據(jù)分類功能,有報酬。QQ470345140.
    發(fā)表于 08-25 09:57

    labview BP神經(jīng)網(wǎng)絡的實現(xiàn)

    請問:我在用labviewBP神經(jīng)網(wǎng)絡實現(xiàn)故障診斷,NI官網(wǎng)找到了機器學習工具包(MLT),但是里面沒有關于這部分VI的幫助文檔,對于”BP神經(jīng)網(wǎng)絡分類“這個范例有很多不懂的地方,
    發(fā)表于 02-22 16:08

    【PYNQ-Z2申請】基于PYNQ的卷積神經(jīng)網(wǎng)絡加速

    項目名稱:基于PYNQ的卷積神經(jīng)網(wǎng)絡加速試用計劃:申請理由:本人研究生在讀,想要利用PYNQ深入探索卷積神經(jīng)網(wǎng)絡的硬件加速,PYNQ
    發(fā)表于 12-19 11:37

    卷積神經(jīng)網(wǎng)絡如何使用

    卷積神經(jīng)網(wǎng)絡(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡工程經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    【案例分享】ART神經(jīng)網(wǎng)絡與SOM神經(jīng)網(wǎng)絡

    是一種常用的無監(jiān)督學習策略,使用改策略時,網(wǎng)絡的輸出神經(jīng)元相互競爭,每一時刻只有一個競爭獲勝的神經(jīng)元激活。ART神經(jīng)網(wǎng)絡由比較層、識別層、
    發(fā)表于 07-21 04:30

    怎么設計ARM神經(jīng)網(wǎng)絡處理器的通信方案?

    人工神經(jīng)網(wǎng)絡很多領域得到了很好的應用,尤其是具有分布存儲、并行處理、自學習、自組織以及非線性映射等特點的網(wǎng)絡應用更加廣泛。嵌入式便攜設備也越來越多地得到應用,多數(shù)是基于ARM內(nèi)核及現(xiàn)
    發(fā)表于 09-20 06:15

    如何構(gòu)建神經(jīng)網(wǎng)絡

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預測的計算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡神經(jīng)網(wǎng)絡包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預測
    發(fā)表于 07-12 08:02

    可分離卷積神經(jīng)網(wǎng)絡 Cortex-M 處理器實現(xiàn)關鍵詞識別

    更勝一籌。關鍵詞識別神經(jīng)網(wǎng)絡管道由于要保持“永遠在線”,KWS 應用的功耗預算受到很大限制。雖然 KWS 應用也可在專用 DSP 或高性能 CPU 運行,但更適合在 Arm Cort
    發(fā)表于 07-26 09:46

    卷積神經(jīng)網(wǎng)絡一維卷積的處理過程

    以前的神經(jīng)網(wǎng)絡幾乎都是部署云端(服務器),設備端采集到數(shù)據(jù)通過網(wǎng)絡發(fā)送給服務器inference(推理),結(jié)果再通過
    發(fā)表于 12-23 06:16

    神經(jīng)網(wǎng)絡移植到STM32的方法

    神經(jīng)網(wǎng)絡移植到STM32最近在做的一個項目需要用到網(wǎng)絡進行擬合,并且將擬合得到的結(jié)果用作控制,就在想能不能直接在單片機上神經(jīng)網(wǎng)絡計算,這樣就可以實時計算,不依賴于上位機。所以要解決
    發(fā)表于 01-11 06:20

    請問一下fpga加速神經(jīng)網(wǎng)絡為什么要用arm核呢

    請問一下fpga加速神經(jīng)網(wǎng)絡為什么要用arm核呢?用其他的不行嗎
    發(fā)表于 07-25 14:37

    用FPGA去實現(xiàn)大型神經(jīng)網(wǎng)絡的設計

    1、加速神經(jīng)網(wǎng)絡的必備開源項目  到底純FPGA適不適合這種大型神經(jīng)網(wǎng)絡的設計?這個問題其實我們不適合回答,但是FPGA廠商是的實際操作是很有權(quán)威性的,現(xiàn)在不論是Intel還是Xilinx都沒有
    發(fā)表于 10-24 16:10

    CPU最流行的加速神經(jīng)網(wǎng)絡推理方法之一

    量化是 CPU 最流行的加速神經(jīng)網(wǎng)絡推理方法之一。去年,TensorFlow Lite 通過 XNNPACK 后端提高了浮點模型的性能。
    的頭像 發(fā)表于 09-12 15:57 ?5284次閱讀

    如何在FPGA實現(xiàn)神經(jīng)網(wǎng)絡

    隨著人工智能技術(shù)的飛速發(fā)展,神經(jīng)網(wǎng)絡作為其核心組成部分,已廣泛應用于圖像識別、語音識別、自然語言處理等多個領域。然而,傳統(tǒng)基于CPU或GPU的神經(jīng)網(wǎng)絡計算方式實時性、能效比等方面存在
    的頭像 發(fā)表于 07-10 17:01 ?3596次閱讀

    什么是神經(jīng)網(wǎng)絡加速器?它有哪些特點?

    神經(jīng)網(wǎng)絡加速器是一種專門設計用于提高神經(jīng)網(wǎng)絡計算效率的硬件設備。隨著深度學習技術(shù)的快速發(fā)展和廣泛應用,神經(jīng)網(wǎng)絡模型的復雜度和計算量急劇增加,對計算性能的要求也越來越高。傳統(tǒng)的通用處理器
    的頭像 發(fā)表于 07-11 10:40 ?963次閱讀