国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

硬件不給力,如何窮玩深度神經(jīng)網(wǎng)絡(luò)?

開發(fā) 開發(fā)工具
在這篇文章中,我將嘗試回答一個(gè)簡單的問題:什么軟件庫/工具包/框架可以幫助改善我們訓(xùn)練好的模型的推理時(shí)間?

深度學(xué)習(xí)的力量為其在真實(shí)世界的應(yīng)用創(chuàng)造出了巨大的機(jī)會。但深度學(xué)習(xí)的訓(xùn)練往往需要巨大的計(jì)算能力,有時(shí)候我們卻沒法(或沒錢)去使用強(qiáng)大的服務(wù)器或 NVIDIA 的 Jetson 那樣的嵌入式加速平臺。假如你需要使用一塊樹莓派開發(fā)板為你家的小院子開發(fā)一個(gè)目標(biāo)跟蹤器呢?換句話說,如果你需要在沒有加速器的 ARM CPU 上運(yùn)行一個(gè) CNN,你該怎么做?德國 BuddyGuard GmbH 的機(jī)器學(xué)習(xí)工程師 Dmytro Prylipko 近日在 LinkedIn 上發(fā)表了一篇文章,分享了他在弱硬件上運(yùn)行深度神經(jīng)網(wǎng)絡(luò)的經(jīng)驗(yàn)方法。

[[181258]]

機(jī)器學(xué)習(xí)社區(qū)已經(jīng)在加速神經(jīng)網(wǎng)絡(luò)推理上進(jìn)行了很長一段時(shí)間的研究了,也已經(jīng)出現(xiàn)了大量可能有效的解決方案。在這篇文章中,我將嘗試回答一個(gè)簡單的問題:什么軟件庫/工具包/框架可以幫助改善我們訓(xùn)練好的模型的推理時(shí)間?出于文章篇幅的考慮,這篇文章我不會考慮修改網(wǎng)絡(luò)架構(gòu)(盡管這確實(shí)是一個(gè)好方法,比如 SqeezeNet),而是僅僅探討那些已經(jīng)可以在 ARM 設(shè)備上投入生產(chǎn)并且提供了 C/C++ 接口(因?yàn)槲覀兒苌僭谇度胧皆O(shè)備上使用 Lua 或 Python)的工具包和軟件庫。所以在這里我僅僅實(shí)驗(yàn)了 Caffe、TensorFlow 和 MXNet。

我們可以做什么

要加速你的計(jì)算,我們有兩個(gè)主要的大方向:1)修改模型;2)加速框架。當(dāng)然,也可能是將這兩者結(jié)合起來(而且確實(shí)是不錯的想法)。前一種方法往往需要使用更低的權(quán)重精度(也被稱為量化(quantization))和/或權(quán)重剪枝(weights pruning)。剪枝背后的思想是深度學(xué)習(xí)模型中的重要參數(shù)化冗余,而低精度方法(為浮點(diǎn)數(shù)使用了定點(diǎn)或動態(tài)定點(diǎn)表示)則利用了這樣一個(gè)事實(shí)——即推理過程并不需要高精度:因?yàn)檫\(yùn)算的線性本質(zhì)和非線性的動態(tài)范圍壓縮(dynamic range compression),量化誤差(quantization errors)往往傾向于亞線性地(sub-linearly)傳播,而不會引起數(shù)值不穩(wěn)定性(Vanhoucke, V., Senior, A., & Mao, M. (2011). Improving the speed of neural networks on CPUs)。此外,我們甚至可以使用低精度乘法來訓(xùn)練模型。結(jié)合 SIMD 指令(比如 SSE3),參數(shù)量化可以實(shí)現(xiàn)非常有效的計(jì)算加速。但是目前我們還很難找到同時(shí)使用了這兩者的解決方案。比如 Ristretto 可以執(zhí)行自動量化,但它卻并沒有利用其來降低計(jì)算成本。TensorFlow 也可以執(zhí)行量化,但其推理時(shí)間實(shí)際上卻增加了 5 到 20 倍,因?yàn)槠湎驁D(graph)中還引入了輔助量化/去量化節(jié)點(diǎn)(auxiliary quantize/dequantize nodes)。所以,如果空間上的考慮很重要,那么實(shí)際上我們可以將量化僅僅看作是一種壓縮網(wǎng)絡(luò)權(quán)重的方法。至少對于當(dāng)前的狀態(tài)而言,我們可以這樣考慮。

另一方面,我們也有用于框架的加速執(zhí)行時(shí)間(execution time)的方法,而不會影響到模型參數(shù)。這些方法基本上都是試圖優(yōu)化矩陣之間的乘法(GEMM)的通用計(jì)算技巧,并因此會同時(shí)影響卷積層(其計(jì)算通常是 im2col + GEMM)和全連接層。除此之外是 NNPACK:一個(gè)用于深度學(xué)習(xí)框架的加速包。這個(gè)加速包還曾得到過 Yann LeCun 的推薦!就我所知,NNPACK 使用了 FFT 來將時(shí)間域中的卷積運(yùn)算替換成了頻域中的乘法計(jì)算。

另一個(gè)方法是將網(wǎng)絡(luò)定義和權(quán)重翻譯成針對目標(biāo)進(jìn)行優(yōu)化過的代碼,而不是將它們運(yùn)行在同樣一個(gè)框架內(nèi)。這種方法的典型案例是 TensorRT。還有 CaffePresso 可以將 Caffe prototxt 翻譯成針對各種不同后端的更低級的規(guī)格。但是,TensorRT 的運(yùn)行需要 CUDA,而且只能在 NVIDIA GPU 上使用,而 CaffePresso 也需要某種硬件加速器(DSP、FPGA 或 NoC),所以這兩種都不適合用于我的測試硬件——樹莓派。

相關(guān)鏈接:

  • Ristretto:http://lepsucd.com/?page_id=621
  • NNPACK:http://github.com/Maratyszcza/NNPACK
  • TensorRT:http://developer.nvidia.com/tensorrt
  • CaffePresso:http://github.com/gplhegde/caffepresso

調(diào)測配置

當(dāng)謹(jǐn)慎地評估現(xiàn)存的解決辦法后,我發(fā)現(xiàn)下列方法能夠加速當(dāng)前流行的可用模型的推理:

  • 如果你的構(gòu)架使用了 OpenBLAS,你可以嘗試其為深度學(xué)習(xí)進(jìn)行過優(yōu)化的分支:http://github.com/xianyi/OpenBLAS/tree/optimized_for_deeplearning
  • NNPACK 能和其他一些框架(包括 Torch、Caffe 和 MXNet)聯(lián)合使用:http://github.com/Maratyszcza/NNPACK
  • 當(dāng)在樹莓派上使用 TensorFlow 時(shí),你可以使用 NEON 指令集提供一些 optimization flags:http://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile#raspberry-pi

通過這些,我能列出以下調(diào)測配置:

  1. 帶有 OpenBLAS 主分支(master branch)的 Caffe 作為后端(caffe-openblas)
  2. 帶有 OpenBLAS 的深度學(xué)習(xí)優(yōu)化分支(caffe-openblas-dl)的 Caffe
  3. 使用 OPTFLAGS="-Os" (tf-vanilla) 編譯的 TensorFlow
  4. 使用 OPTFLAGS="-Os -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize" (tf-neon-vfpv4) 編譯的 TensorFlow
  5. 帶有用于線性代數(shù)計(jì)算的 OpenBLAS (mxnet-openblas) 的 Vanilla MXNet
  6. 帶有 OpenBLAS 的深度學(xué)習(xí)優(yōu)化分支 (mxnet-openblas-dl) 的 MXNet

你可能會疑惑:配置中怎么沒有 NNPACK?這確實(shí)有點(diǎn)復(fù)雜,由 ajtulloch 制作的 Caffe 分支提供了使用 NNPACK 的最直接的方法。然而自從它被集成進(jìn)去以后,NNPACK API 就已經(jīng)改變了,并且目前我們不能編譯它)。Caffe2 對 NNPACK 有原生支持,但我不會考慮 Caffe2,因?yàn)樗幱趯?shí)驗(yàn)性階段并且?guī)缀鯇?Caffe 進(jìn)行了重構(gòu),相關(guān)的文檔也不多。另外一個(gè)選項(xiàng)就是使用 Maratyszcza/caffe-nnpack,雖然它比較老舊且沒有什么維護(hù)。

另外一個(gè)問題就是 NNPACK 自身。它并不提供在 Linux/ARM 上的交叉編譯(cross-compilation)配置,只有在 Android/ARM 上的交叉編譯(cross-compilation)配置。我的實(shí)驗(yàn)性構(gòu)建在與 MXNet 結(jié)合的目標(biāo)平臺上無法工作。我只能在臺式電腦上運(yùn)行它,但是我并沒有看到使用 OpenBLAS 會有更優(yōu)秀的表現(xiàn)。由于我的目標(biāo)是評估已經(jīng)可用的解決方法,所以我只能以后再做 NNPACK 的實(shí)驗(yàn)了。

相關(guān)鏈接:

  • ajtulloch 制作的 Caffe 分支:http://github.com/ajtulloch/caffe/tree/nnpack-pr
  • NNPACK API 編譯問題:https://github.com/Maratyszcza/NNPACK/issues/1#issuecomment-266416638
  • Maratyszcza/caffe-nnpack:http://github.com/Maratyszcza/caffe-nnpack
  • NNPACK Linux/ARM 問題:https://github.com/Maratyszcza/NNPACK/issues/35

硬件

所有的這些評估都是在四核 1.3 GHz CPU 和 1 GB RAM 的樹莓派 3 上執(zhí)行。操作系統(tǒng)是 32 位的 Raspbian,所以 CPU 不是 ARMv8 架構(gòu),而是 ARMv7 架構(gòu)。

  1. model name : ARMv7 Processor rev 4 (v7l) 
  2. BogoMIPS : 38.40 
  3. Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
  4. CPU implementer : 0x41 
  5. CPU architecture: 7 
  6. CPU variant : 0x0 
  7. CPU part : 0xd03 
  8. CPU revision : 4 

測試草案

為了評估上述每個(gè)配置的性能,我們會使用相同的神經(jīng)網(wǎng)絡(luò)。也就是一個(gè)有 3 個(gè)卷積層和兩個(gè)全連接層且在頂部有 softmax 的微型卷積神經(jīng)網(wǎng)絡(luò):

  1. conv1: 16@7x7 
  2. relu1pool1: MAX POOL 2x2conv2: 48@6x6 
  3. relu2pool2: MAX POOL 3x3conv3: 96@5x5 
  4. relu3fc1: 128 unitsfc2: 848 units 
  5. softmax  

該卷積神經(jīng)網(wǎng)絡(luò)有 1039744 個(gè)參數(shù)。雖然非常小,但它足夠處理許多計(jì)算機(jī)視覺任務(wù)。

該網(wǎng)絡(luò)使用 Caffe 進(jìn)行訓(xùn)練人臉識別任務(wù),并將其轉(zhuǎn)換為 TensorFlow 和 MXNet 格式從而使用這些框架進(jìn)行評估。為了評估前向通過時(shí)間(forward pass time),從 1 到 256 的批大小都進(jìn)行了測試,因?yàn)榕笮π阅苡泻艽蟮挠绊憽6鴮τ诿總€(gè)批大小,網(wǎng)絡(luò)執(zhí)行了 100 次前向通過,并為每一張圖像計(jì)算了平均時(shí)間。

評估結(jié)果和討論

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

列出了平均前向通過的時(shí)間

列出了平均前向通過的時(shí)間

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

對數(shù)尺度(logarithmic scale)尺度

這些結(jié)果讓我大吃一驚。首先,我沒有預(yù)料到在 CPU 上運(yùn)行 MXNet 有如此差的表現(xiàn)。但這看起來已經(jīng)是一個(gè)眾所周知的問題。此外,因?yàn)榇鎯ο拗疲鼰o法運(yùn)行 256 張圖片的 batch。第二個(gè)驚奇是優(yōu)化過的 TensorFlow 竟有如此好的表現(xiàn)。它甚至比 Caffe 的表現(xiàn)還好(在超過 2 的批大小上);光是從原始框架上看是很難預(yù)料這個(gè)結(jié)果的。但小心:不保證你能在任意 ARM 設(shè)備上使用這些 flags。

眾所周知,Caffe 的速度非常快。如果你要一張接一張地處理圖片,使用優(yōu)化過的 OpenBLAS 的 Caffe 將會是你***的選擇。想要有 10ms 的改進(jìn),你所要做的就只是簡單的輸入:

  1. cd OpenBLAS 
  2. git checkout optimized_for_deeplearning 

為了將我的小研究轉(zhuǎn)變成正式的東西,我仍需要做大量的工作:評估更多的模型,集成 NNPACK,以及研究更多的框架與 BLAS 后端的結(jié)合。但我希望它能幫助你了解目前***的解決方案的推理速度。

原文:https://www.linkedin.com/pulse/how-run-deep-neural-networks-weak-hardware-dmytro-prylipko

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-12-22 08:47:41

神經(jīng)網(wǎng)絡(luò)AND運(yùn)算

2018-02-05 08:58:36

Python神經(jīng)網(wǎng)絡(luò)識別圖像

2017-03-22 11:59:40

深度神經(jīng)網(wǎng)絡(luò)

2025-02-25 10:50:11

2016-12-27 14:24:57

課程筆記神經(jīng)網(wǎng)絡(luò)

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)算法

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2019-07-25 08:20:37

代碼開發(fā)神經(jīng)網(wǎng)絡(luò)

2021-03-29 09:02:24

深度學(xué)習(xí)預(yù)測間隔

2017-03-30 17:54:28

深度神經(jīng)網(wǎng)絡(luò)人工智能 DNN

2018-04-08 11:20:43

深度學(xué)習(xí)

2017-07-07 15:46:38

循環(huán)神經(jīng)網(wǎng)絡(luò)視覺注意力模擬

2019-07-20 11:00:00

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)圖形

2023-02-28 08:00:00

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2023-04-19 10:17:35

機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2017-04-26 08:31:10

神經(jīng)網(wǎng)絡(luò)自然語言PyTorch

2023-05-12 14:58:50

Java神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2018-05-28 13:12:49

深度學(xué)習(xí)Python神經(jīng)網(wǎng)絡(luò)

2020-09-17 12:40:54

神經(jīng)網(wǎng)絡(luò)CNN機(jī)器學(xué)習(xí)

2017-04-25 15:12:45

神經(jīng)網(wǎng)絡(luò)SSD檢測
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲无中文字幕| 麻豆一区二区99久久久久| 在线精品亚洲一区二区不卡| 伊人久久99| 国产女人18毛片水真多18精品| 亚洲成人一二三| 国产在线xxxx| 亚洲精品网址| 国产精品国产三级国产专区51| 欧美大黑帍在线播放| 在线看的你懂得| 欧美高清电影在线| 国语对白在线刺激| 精品久久中文| 亚洲区一区二区| 欧美成熟毛茸茸复古| 狠狠综合久久av一区二区蜜桃| 日韩欧美第一区| 欧美日韩国产综合视频| 中文字幕一区在线| 精品久久久久久久久久中文字幕| 国产农村妇女毛片精品久久莱园子| 隔壁老王国产在线精品| 欧美日韩精品免费观看视完整| 欧美一区二区三区四区高清| 欧美18xxxxx| 亚洲乱码日产精品bd| 成人免费观看视频在线观看| 国产精品综合二区| 自拍偷拍99| 久久久蜜桃一区二区人| av免费精品一区二区三区| 欧美亚洲在线日韩| 欧美野外猛男的大粗鳮| 91麻豆精品激情在线观看最新| 中文字幕日韩欧美| 在线中文字幕播放| 亚洲国产欧美精品| 国产精品国精产品一二| 日韩欧美专区在线| 欧美黄色视屏| 精品国产污网站| 国产激情在线播放| 国产视频亚洲视频| 亚洲www啪成人一区二区| 永久免费精品影视网站| 精品国产黄a∨片高清在线| 在线一区二区日韩| 精品中文字幕一区二区三区四区| 美女福利视频一区| 精品精品国产毛片在线看| 欧美在线国产精品| 水蜜桃久久夜色精品一区| 91久久精品久久国产性色也91| 欧美一区成人| 欧美婷婷久久| 激情图片小说一区| 日本午夜激情视频| 久久精品一二三| 成人精品3d动漫| 日本高清不卡视频| 18视频在线观看| 国产亚洲欧洲高清| 高潮久久久久久久久久久久久久| 日本a级片电影一区二区| 性欧美69xoxoxoxo| 日本一区二区高清视频| 国产精品99久久久久久有的能看 | 欧美日韩视频第一区| youjizz在线播放| 欧美一区二区免费视频| а√在线中文网新版地址在线| 亚洲精品狠狠操| www.久久99| 国产精品久久久久久久电影| 亚洲欧美综合| 自拍视频一区二区三区| 国产清纯在线一区二区www| 蜜臀一区二区三区| 日韩久久精品一区| 欧美国产亚洲精品| 51国产成人精品午夜福中文下载| 玖玖在线精品| 国产一级做a爰片久久| 色综合久久久网| 91久久国产综合久久91猫猫| 欧美一级大片视频| 日韩极品在线观看| 久久撸在线视频| 这里只有精品视频在线观看| 久久青草视频| 亚洲影视九九影院在线观看| 国产一区二区三区国产| 国产精品久久久久永久免费看| 91麻豆精品国产91久久久久 | 国产福利一区在线观看| 国产乱xxⅹxx国语对白| 欧美精三区欧美精三区| 日本黄色一区| 国产91精品一区二区绿帽| 成人午夜在线免费| 韩日视频在线| 九九热精品视频国产| 欧美日韩在线大尺度| 免费在线观看视频a| 日本电影亚洲天堂一区| 日本免费一区二区三区视频| 久久精品丝袜高跟鞋| 亚洲欧美在线aaa| 日韩伦理在线一区| 91手机视频在线观看| www..com久久爱| 毛片在线视频| 日本乱人伦a精品| 国产成人精品免费在线| 成人亚洲性情网站www在线观看| 久久99热精品| 精一区二区三区| 国产午夜视频在线观看| 久热精品视频在线观看一区| 久久精品电影| 写真福利理论片在线播放| 日韩中文字幕精品| 日韩成人dvd| 大胆av不用播放器在线播放| 欧美一区第一页| 99在线精品视频| 欧美激情护士| 麻豆成人av| 91国偷自产一区二区开放时间 | 亚洲va欧美va国产va天堂影院| 中文一区一区三区高中清不卡免费 | 亚洲成人人体| 亚洲一级片网站| 亚洲美女自拍视频| 日本不卡一区二区三区高清视频| 老司机精品影院| 成人免费午夜电影| 性欧美videos另类喷潮| 欧美午夜xxx| 欧美日韩伦理在线免费| 午夜在线视频免费观看| 91久久精品日日躁夜夜躁国产| 蜜桃久久久久久久| 久青草国产在线| 日本精品视频在线播放| 国产日韩精品一区二区三区| 国产精品久久久久久妇女| 玖玖精品在线视频| 亚洲国内精品视频| 秋霞av亚洲一区二区三| 黄网站视频在线观看| 国产精品久久久对白| 天涯成人国产亚洲精品一区av| 久久综合色占| 国产视频一二| 永久免费不卡在线观看黄网站| 久久久久久久爱| 91欧美一区二区| 韩国一区二区三区视频| www黄色av| 欧美激情一级二级| 一区在线播放视频| 国产99久久久国产精品成人免费| 黄色春季福利在线看| 国产精品久久久久久搜索| 精品久久久久久中文字幕大豆网| 欧美gayvideo| 成人亚洲性情网站www在线观看| 久久久久久九九九九| 欧美一三区三区四区免费在线看| 日本va欧美va欧美va精品| 玛雅亚洲电影| 精品久久久久av| 青青在线视频一区二区三区| 午夜精品久久久久久久久| 亚洲影视一区二区三区| 成年视频在线观看| 日韩精品手机在线观看| 久久久国产91| 亚洲精品国产一区二区精华液| 欧美韩国日本在线观看| 高潮毛片在线观看| 黄黄视频在线观看| 中文字幕亚洲自拍| 最新国产成人在线观看| 日韩精品1区| 国产黄色一级网站| 国产z一区二区三区| 欧美激情按摩在线| 午夜美女久久久久爽久久| 韩国精品久久久999| 成人激情视频在线| 91色精品视频在线| 国产乱人伦精品一区二区| 亚洲在线免费视频| 日本调教视频在线观看| 在线观看你懂| 久久亚州av| 99久久久久免费精品国产 |