移動端深度框架 TensorFlow Lite 、小米MACE和 支付寶xNN 比較

一直以來,隨着深度學習的快速發展,複雜而龐大的模型需要在計算力強大的計算設備上纔可以展示其強大的能力,如GPU,深度學習運行在移動和嵌入式設備中,它賦予了這些設備在終端本地運行機器學習模型的能力,從而不再需要向雲端服務器發送數據。這樣一來,不但節省了網絡流量、減少了時間開銷,而且還充分幫助用戶保護自己的隱私和敏感信息

,而在沒有強大計算機資源支持的情況下,怎樣才能大規模部署深度學習算法成爲可能。因此博主會通過本文來系統介紹下目前已經成功落地的深度學習框架。

揭祕支付寶中的深度學習引擎:xNN


支付寶App中的深度學習引擎——xNN。xNN通過模型計算框架兩個方面的優化,解決了深度學習在移動端落地的一系列問題。

xNN的模型壓縮工具(xqueeze) 在業務模型上實現了近50倍的壓縮比, 使得在包預算極爲有限的移動App中大規模部署深度學習算法成爲可能。xNN的計算性能經過算法和指令兩個層面的深度優化,極大地降低了移動端DL的機型門檻。

我們對支付寶APP做逆向工程,發現一些native library :

1. amnet-http 是 http 協議相關的一些東西,不是http協議的實現,裏面用到了 Google 的Brotli 壓縮格式Facebook 的ZSTD 壓縮算法,看來Ali採用了業界比較成熟的一些壓縮方法直接用到支付寶上了。這個庫叫amnet,猜測應該是 Ali’s mnet意思, mnet是別人家的東西,Ali改了改。

2. amnet-mmtp, mmtp應該是另外一個Protocol了,沒看錯的話就是MPEG Media Transport Protocol。另外還有amnet-mng, mng貌似是manager的縮寫,用來管理的吧。

3. APSE 不知道是不是AliPay Security的縮寫,其實這裏感覺大部分內容都是mbedtls 的,主要是SSL/TLS相關內容。既然跟SE(安全)相關,肯定少不了加密,這裏確實能找到很多加密算法的常數。

4. Openssl,微信裏也有,OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。支付寶作爲一款支付工具,在安全方面肯定做了很多的加強!
OpenSSL被曝出現嚴重安全漏洞後,發現多數通過SSL協議加密的網站使用名爲OpenSSL的開源軟件包。OpenSSL漏洞不僅影響以https開頭的網站,黑客還可利用此漏洞直接對個人電腦發起“心臟出血”(Heartbleed)攻擊。據分析,Windows上有大量軟件使用了存在漏洞的OpenSSL代碼庫,可能被黑客攻擊抓取用戶電腦上的內存數據。

5. Protocol Buffers:這是Google的,要使得模型在客戶端本地,開發者必須要在桌面設備上提前訓練好一個模型,各種類型的數據都需要使用 Protocol Buffers(簡稱 ProtoBuff)來定義數據結構,有了這些 ProtoBuff 代碼,你就可以使用工具來生成對應的 C 和 Python 或者其它語言的代碼,方便裝載、保存和使用數據。

6. sigAlgorithm,名字很直白,簽名算法。

7. silk,Skype的音頻庫,微軟大方開源給大家用了,對商業使用也很友好,隨便用。

8. XNN,Caffe, MXNET 深度學習的庫:看來支付寶中有好幾種DL框架。


 深度學習——雲端還是移動端?

近來,深度學習(DL)在圖像識別、語音識別、自然語言處理等諸多領域都取得了突破性進展。DL通常給人以計算複雜、模型龐大的印象——從Siri語音助手到各種聊天機器人、再到支付寶“掃五福”,移動端收集數據+雲端加工處理似乎成爲一種常識。然而對很多應用來說,這種模式其實只是無奈之選。

去年春節的“掃五福”活動中,爲了識別手寫“福”字,支付寶多媒體團隊調動了近千臺服務器用於部署圖像識別模型。可是如此規模的集羣也沒能抵擋住全國人民集五福的萬丈熱情。爲了防止雲端計算能力超載,活動中後期不得不啓動了降級預案——用計算量小但精度也較低的傳統視覺算法替代了DL模型。降級雖然不妨礙大夥繼續熱火朝天地收集福卡,但對用戶體驗無疑是有一定影響的,比如一些不可言說的漢字也被誤判成了“福”字。

xNN主要特性一覽

xNN爲DL模型提供了從壓縮到部署、再到運行時的統計監控這一全生命週期的解決方案。xNN環境由開發後臺和部署前臺兩部分組成。



開發後臺以xqueeze工具鏈爲核心,支持多種訓練框架。業務可以使用xqueeze壓縮、優化自己的DL模型,得到尺寸大幅減小、運行速度顯著加快的模型版本。壓縮後的模型據使用場景部署:高頻模型安裝包內置低頻模型按需下發的形式部署到移動端。

部署前臺:xNN還通過一個jsapi提供了直接對接H5應用的能力——通過DL模型的動態下發和H5,能夠實現完全的動態化,從而在客戶端不發版的情況下完成算法+邏輯的同時更新。

xNN的部署框架原生兼容Caffe,業務可以在不做轉換的情況下直接在移動端運行已有的Caffe模型,以快速評估效果。而經過壓縮的私有格式模型更小、更快。在Tensorflow和Keras平臺上訓練的模型也能夠在原有的環境上進行壓縮,然後轉換爲xNN支持的格式部署到移動端(tensorflow和keras有自己的模型壓縮工具,可以看我的上一篇博文中有介紹:TensorFlow Lite入門)。不同於core ML,xNN理論上支持安卓和iOS上的所有機型。

xqueeze模型如何壓縮

xNN-xqueeze的模型壓縮流程如下圖之(a)所示,包括神經元剪枝(Neuron Pruning)突觸剪枝(Synapse Pruning)量化(quantization)網絡結構變換(network transform)自適應Huffman編碼(adaptive Huffman)、共5個步驟。

其中,前三步理論上是有損的,而使用xqueeze對網絡權重壓縮超參進行finetune(微調),能夠將精度的下降保持在可控甚至可忽略的程度。後兩步則完全不影響網絡的輸出精度整個流程不僅會減小模型的尺寸,還通過網絡的稀疏化和結構優化,顯著提高前向預測的速度


在壓縮的經典方案DeepCompression的基礎上,xqueeze 進一步擴充了Neuron pruning和Network Transform的能力。其中,Neuron Pruning能夠逐次裁剪掉“不重要”的神經元和與之對應的權重參數。通過Neuron Pruning和Synapse Pruning的結合,在模型精度和壓縮比之間達成更好的平衡。xqueeze還具有network transform——在網絡的宏觀層面進行優化的能力,Network Transform腳本掃描整個網絡,診斷出可優化的點,包括在有條件的情況下自動地進行層(layer) 的組合與等效替換。此外,xqueeze通過自適應地使用Huffman編碼,有效提升不同稀疏程度的模型之壓縮比。

如下圖所示,對於業務分類模型,使用xqueeze工具鏈能夠實現45.5倍的壓縮,在同等程度的精度損失下,壓縮率超越經典方案達60%。

xNN計算性能優化

xNN的性能優化不侷限於底層,而是通過與xqueeze工具鏈的配合,在算法指令兩個層面同步發力,爲更爲深入的優化創造空間。
如下圖所示,在算法層,xqueeze的剪枝在壓縮模型尺寸的同時,也促進了網絡的稀疏化——即催生出大量的零值權重。相應地,xNN在指令層實現了稀疏運算模塊,在卷積和全連接計算中,自動忽略這些零值權重,減小計算開銷,提升速度。又如之前已經提到的,在xqueeze的Network Transform階段,會對網絡進行宏觀層面的優化,包括將相鄰的層進行結果上等效的組合與替換,來減少計算的冗餘度和提高訪問存儲器的效率, 要充分發揮network transform的效能,也離不開指令層實現的支持。


在指令層,xNN通過智能調配各個內核的負載,提升多線程環境下的性能。xNN在設計中不僅關注計算資源,還充分考慮了訪問存儲器的開銷,通過精細化地調度數據的讀寫來提升cache的命中率。最爲重要的是,所有核心計算模塊均由某位芯片行業出身的指令集架構專家一條一條彙編代碼手寫而成,這是很牛逼的。

在以SqueezeNet爲基礎的業務分類模型上,xNN在Qualcomm 820 CPU上能夠輸出29.4 FPS的前向預測幀率,在蘋果A10 CPU (iPhone 7)上的幀率則達到52.6 FPS,比CPU與GPU並用的Core ML還要更快。

業務落地

xNN的最新版本在確保精度的前提下,尺寸已壓縮到100KB以下。Android平臺上,全功能xNN的SDK包增量僅200KB出頭,若根據特定應用做裁剪,將能夠輕鬆減小到100多KB。

挑戰

隨着手機處理器性能的提升和模型輕量化技術的發展,移動端DL正在變得越來越可行,並得到了廣泛的關注。蘋果和谷歌已經分別宣佈了各自操作系統上的DL框架Core MLTensorflow Lite,這無疑將極大地促進移動端DL的發展。但是,尤其對於支付寶這樣的國民App來說,仍然存在一些嚴峻的挑戰是無法通過直接套用廠商方案來解決的。

  1. 機型跨度大:支付寶App擁有數億受衆羣體,在其中落地的業務必須對儘可能多的用戶、儘可能多的機型提供優質的體驗。對支付寶來說,參考Core ML只將功能開放給少數高端機型的做法是不合適的。因而無論在運行速度和內存佔用等性能指標、還是在兼容性上,支付寶的移動端DL都必須做到極致,才能最大幅度地降低使用門檻。
  2. 包尺寸要求嚴:支付寶App集成了衆多的業務功能,安裝包資源非常緊張,一個新模型要集成進安裝包往往意味着需要下線其他的功能。而即便通過動態下發的形式進行部署,DL模型的大小也會強烈影響用戶的體驗。隨着移動端智能化程度的不斷提升,直接在端上運行的DL應用必然會越來越多,這以當前單個模型大小就動輒數十、數百M的尺寸來看幾乎是不可想象的。同時,移動端DL引擎本身的SDK也需要儘可能地瘦身。

小米深度學習框架—MACE

在2018年 月 28 日,第十三屆開源中國開源世界高峯論壇上,小米首席架構師、人工智能與雲平臺副總裁崔寶秋在《小米 AI 時代的開源》的主題演講中,代表小米正式發佈了小米移動端深度學習框架 —— MACE。




目前tensorflow已支持GPU加速,但是tensorflow Lite還未支持,GPU加速,好在谷歌強大的生態環境,默認情況下TensorFlow Lite使用的是CPU來進行解算,如果你需要使用Android 8.1推出的硬件加速API,則需要確保它運行在受支持的設備上。


如果對小米的MACE感興趣,可以查看其項目地址:


總結:目前來看,蘋果和谷歌已經較早開源其DL框架Core ML和Tensorflow Lite,至於開發者們喜歡用哪個可以自己根據興趣和選業務進行選擇。

可參考我的上篇博文Tensorflow Lite

參考:阿里技術年度精選集

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章