當前位置:
首頁 > 新聞 > 瀏覽器最快的DNN執行框架WebDNN:從基本特性到性能測評

瀏覽器最快的DNN執行框架WebDNN:從基本特性到性能測評

選自Github

機器之心編譯

參與:蔣思源、晏奇


WebDNN 是網頁瀏覽器中最快的 DNN 執行框架,而本文首先簡單介紹了 WebDNN 特徵與其框架結構,即表明了為什麼 WebDNN 能為端用戶提供高效的 DNN 應用。而後文章將給出 WebDNN 與 Keras.js 的詳細對比,並在最後一部分介紹 WebDNN 的安裝環境與步驟。

WebDNN 簡介

最近,深度神經網路(DNN)在很多領域吸引了大量的關注,比如圖像和視頻識別、自然語言處理和遊戲 AI 等。很多這些領域的產品都應用了 DNN。然而,DNN 計算成本很高,而且其執行也普遍需要硬體加速。所以在終端用戶設備比如筆記本電腦或智能手機上執行 DNN 也變得不現實。

解決這個問題的其中一條方案是雲計算。而 WebDNN,作為另一條解決方案,高度優化了 DNN 模型,令其可在終端用戶設備的網頁瀏覽器上運行它們。

WebDNN 的關鍵特徵如下:

  • 免安裝

  • 零開銷介面(Non overhead)

  • 針對推理階段的專門優化(Inference-phase-specialized)

免安裝

WebDNN 能在網頁瀏覽器上執行 DNN 模型。通常來講,網頁瀏覽器是已經在終端用戶的設備上安裝好了的,並且用戶也熟悉如何使用它。因此,WebDNN 可以很方便地提供 DNN 的應用,並且沒有任何在本地安裝應用程序的困難。一些主流網頁瀏覽器的一系列不同特點可以被用於加速,WebDNN 在不同瀏覽器上保持儘可能以一樣速度執行 DNN 模型的策略。

零開銷介面

JavaScript 是一門標準的在網頁上運行的編程語言,其通過一個解釋器(interpreter)執行。因此,它需要計算開銷(overhead),而且它不能完全利用 CPU 的能力,同樣的問題在 GPU 中也存在。現代網頁瀏覽器支持 WebGL,即一個使用 GPU 的 JavaScript API。然而,該 API 的設計是用於圖像處理而非適用於通用目的計算。此外,將 WebGL 用於通用目的計算會引發 overhead cost。

WebDNN 使用下一代 JavaScript API,即用於 GPU 執行的 WebGPU 和用於 CPU 執行的 WebAssembly。這些 API 可以幫助 GPU 和 CPU 發揮出其全部性能。

針對推理階段的專門優化

為實現更快速的執行速度,優化 DNN 模型的計算圖(graph)就顯得非常重要。DNN 的執行由兩階段組成:訓練階段和推理階段。這兩個階段分別需要不同的優化方法。WebDNN 僅專註於終端用戶設備上推理階段的執行,並且它支持複雜的優化。這種優化可以應用在用由大量 DNN 框架訓練的模型上。用戶不需要編輯訓練代碼便可實現。

框架結構

瀏覽器最快的DNN執行框架WebDNN:從基本特性到性能測評

WebDNN 由兩個模塊組成,即圖形轉譯器(graph transpiler)和描述符運行器(descriptor runner)。圖形轉譯器能轉譯和優化模型使其成為在瀏覽器中可執行的格式,而描述符運行器則在瀏覽器中執行並轉換模型。

圖形轉譯器(Graph transpiler)是一種離線轉換模型的模塊,它在 Python(版本 3.6)中實現,並只有軟體開發者需要運行它。該模塊會產生「graph descriptor」文件,這個文件由 JavaScript 和二進位權數據組成。描述符運行器(Descriptor runner)是一個在線模塊,其在終端用戶的瀏覽器運行圖形描述符(graph descriptor),該模塊是 JavaScript 文件。軟體開發者需要使用由軟體庫提供的 API 來支持模型的輸入和顯示輸出。

安裝應用開發環境在本文的最後一部分給出,其中還有一些從 Caffe、Keras、Chainer 等轉換模型的案例。

與 Keras.js 的性能對比

我們前面已經了解到 DNN 的應用需要巨大的計算資源,WebDNN 可以解決這個問題,方法是將網頁瀏覽器作為免安裝的 DNN 執行框架。該框架可以優化訓練後的 DNN 模型,將模型數據進行壓縮,從而加快執行速度。此外,該框架使用如 WebAssembly 和 WebGPU 等全新 JavaScript API 以實現零開銷執行(zero-overhead execution)。實驗結果顯示,這種方法實現了超過 200 倍的加速。

  • 與 Keras.js 對比處理時間

  • 測試環境

  • Mac Book Pro 2015 年早款

  • macOS 10.12.4 Sierra

  • Intel Core i5 2.7 GHz CPU

  • 16 GB Memory

  • Intel Iris Graphics 6100 GPU

  • Safari Technology Preview 30

  • 模型:VGG16[1]、Inception-v3[4]、ResNet50[2]。

  • 輸入 shape:Inception-v3 為 (1, 299, 299, 3),其它為 (1, 224, 224, 3)。

瀏覽器最快的DNN執行框架WebDNN:從基本特性到性能測評

單圖用時以對數刻度展示在豎軸上。

帶有 WebGPU 後端的 WebDNN 要顯著地快於 Keras.js。而帶有 WebAssembly 後端的 WebDNN 和帶有 GPU 後端的 Keras.js 效果相仿。在每一個 DNN 模型和後端中,WebDNN 在速度方面都獲得更好的結果。並且當在圖形轉譯器(graph transpiler)應用最優化時,其還能獲得更大的加速。

快速運行對比

現在讓我們在瀏覽器上轉換並執行 ResNet50 預訓練 Keras 模型。

首先,保存由 Keras 提供的的 ResNet50 預訓練模型。


from keras.applications import resnet50

model = resnet50.ResNet50(include_top=True, weights="imagenet")

model.save("resnet50.h5")

接下來通過命令行介面(CLI)轉化模型。在該階段內,模型已經優化了。


python ./bin/convert_keras.py resnet50.h5 --input_shape "(1,224,224,3)" --out output

然後,生成的文件(稱之為 Descriptor)能隨後由 JavaScript 載入並執行。


let runner;

async function init() {

// Initialize descriptor runner

runner = await WebDNN.prepareAll("./output");

}

async function run() {

// Set the value into input variable.runner.inputViews[0].set(loadImageData());

// Runawait runner.run();

// Show the resultconsole.log("Output", WebDNN.Math.argmax(runner.outputViews[0]));

}

WebDNN 同樣支持 Caffemodel 和 Chainer 模型。

安裝嚮導

下載代碼


git clone https://github.com/mil-tokyo/webdnn

安裝 WebGPU 環境

WebDNN 在支持 WebGPU 的瀏覽器中運行十分快捷。但目前只有蘋果操作系統上的 Safari Technology Preview 支持。

https://developer.apple.com/safari/technology-preview/

如果你並沒有這樣的環境,就可以使用 WebAssembly 後端,基本上所有的現代瀏覽器都支持它。注意:IE 和 Safari 並不支持 WebAssembly,但是 asm.js 代碼可以和 WebAssembly 代碼一起自動生成,並且有相似的性能。

安裝 Python 包

該框架要求 Python 3.6 及以上。


cd webdnnpython3 setup.py install

以上命令將安裝 webdnn。

如果希望轉換 Caffe 或 Chainer 的模型,那麼就需要安裝 chainer 包。


pip install chainer

(目前,測試的是 chainer==1.23)

安裝 Emscripten 和 Eigen

如果你希望啟用 WebAssembly 後端,那麼就需要 Emscripten 的 emm++命令。如果你只希望嘗試 WebGPU 後端,那麼可以跳過這一節。

安裝 Emscripten 以支持 WebAssembly。更多請查看:http://webassembly.org/getting-started/developers-guide/


git clone https://github.com/juj/emsdk.gitcd emsdk./emsdk install sdk-incoming-64bit binaryen-master-64bit./emsdk activate sdk-incoming-64bit binaryen-master-64bit

為了啟用 em++命令,你需要在 shell 中鍵入以下命令:


source ./emsdk_env.sh

Eigen 作為軟體庫是需要的。


wget http://bitbucket.org/eigen/eigen/get/3.3.3.tar.bz2tar jxf 3.3.3.tar.bz2

為了啟用 Eigen 列入彙編(compile)中,你需要在 shell 中鍵入以下命令:


export CPLUS_INCLUDE_PATH=$PWD/eigen-eigen-67e894c6cd8f

請注意 Python 環境

Emscripten 需要 python2 命令,你需要安裝的 Python 環境對於 Python3 來說為 3.6+,對於 Python2 來說是 2.7。pyenv 將有助於安裝這類環境。

參考文獻:

[1] Karen Simonyan and Andrew Zisserman. 2014. Very Deep Convolutional Networks for Large-Scale Image Recognition. In Proceedings of the International Conference on Learning Representations (ICLR).

[2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. 2015. Deep Residual Learning for Image Recognition. In Proceedings of the Conference on Computer Vision and Pattern Recognition (CVPR).https://github.com/KaimingHe/deep-residual-networks

[3] Applications - Keras Documentation

[4] Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jon Shlens, and Zbigniew Wojna. 2016. Rethinking the Inception Architecture for Computer Vision. In Proceedings of the Conference on Computer Vision and Pattern Recognition (CVPR).

瀏覽器最快的DNN執行框架WebDNN:從基本特性到性能測評


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

實驗研究工作流程詳解:如何把你的機器學習想法變成現實
ACL 2017 傑出論文公布,國內五篇論文入選(附解讀)

TAG:機器之心 |

您可能感興趣

OLED量產技術基本確立,用於iPhone XR的LCD屏「出乎意料地減少」
RNG輸了、EDG秀同時上熱搜 Meiko評價Scout佐伊:基本操作
網路基本功:VLAN與Trunk
NEX和FindX的「合體」,小米MIX3基本確定!
電競遊戲玩家的基本選擇,Razer推ABYSSUS ESSENTIAL滑鼠
LCD屏iPhone X又有新料,外觀基本定型
RNG和EDG基本無緣S9了?joker直言問題所在,太真實
RNA-seq測序基本知識
廉價版iPhone基本確認,和OLED版iPhone有這些差距
LPL轉會窗口關閉,各隊最新陣容公布:iG、RNG、EDG陣容基本未變
Ansible Tower的安裝與基本功能測試
SKT新陣容基本完成教練Kkoma不再BP!
OPPO Find X基本就是這樣了:搭載滑蓋式前攝+3D結構光
6行代碼搞定基本的RL演算法,速度圍觀Reddit高贊帖
國際友人!Dopa直播狂吹Uzi,談S8表示LCK想贏RNG基本不可能
DRF與xadmin框架基本搭建
攝影類:Camera Raw基本功能
PDD評價uzi:發育超過時間的時候,RNG基本就穩了
廉價版iPhone基本確認:和OLED版差距到底在哪?
小米MIX3基本確定,看完價格和配置,OPPO、vivo快「哭」了