簡單搜索--Paddle Mobile的技術實現和業務落地

Paddle Mobile是PaddlePaddle組織下的致力於嵌入式平臺的深度學習框架,集成了百度移動端預測的實踐經驗,提供多平臺支持,在工程實現支持及底層算法模型壓縮的基礎上,通過CPU、mall GPU等硬件加速,作用於DuerOS、百度APP、百度網盤APP等移動端場景。目前,Paddle Mobile在PaddlePaddle 0.14版本下已支持CPU、Mali GPU等平臺,以及圖像、人臉、OCR等模型。值得一提的是,它的體積極小,最小僅300K。今天這篇文章是由百度大搜索高級研發工程師謝柏淵老師,爲大家介紹Paddle Mobile的技術實現和業務落地。

以下爲謝柏淵的演講實錄

Paddle Mobile框架概覽

圖片描述

圖一:Paddle Mobile框架

Paddle Mobile各大框架,偏重於與AI硬件的結合,提升本地用戶性能。
 Paddle Mobile的訓練分爲訓練過程和運算過程,訓練過程兼容統一訓練模型,訓練基礎上提供量化深度壓縮功能。
 目標檢測有單主體檢測,多主體檢測,手勢識別。
 實時OCR保證在高性能的情況下,每個圖片完整的映射。
 語音喚醒,形成無數的樣本輸出。
 多硬件平臺支持,支持全部ARM CPU,Mali GPU,高通DSP,Arm-Linux FPGA。

Paddle Mobile的架構設計

Paddle Mobile的架構設計主要分爲: Loader 模塊、 Program 模塊、 Executor 模塊、 Op 模塊、 Kernel 模塊、Scope variable Tensor 模塊。它的模型分爲兩種結構: 一種爲參數文件是散開的, 如下圖, 紅框爲模型結構的 protobuf 文件, 其餘爲參數文件。

圖片描述

圖二:模型

其中Loader 模塊的作用是將模型結構信息 load 進內存, 如紅框內的 protobuf 文件 load 進內存, 並對模型結構進行優化(如將幾個細粒度的 op 融合成粗粒度的op, 如將 conv、 add、 batchnorm、 relu 融合爲 conv_add_batchnorm_relu),方便進行算法優化。由於 conv 可以轉換爲兩個大矩陣相乘, 更進一步可以分爲若干個一行一列的小矩陣相乘, 並得出最終運算。

圖片描述

圖三:op融合

Program爲Loader模塊的結果, 包含了優化前的模型結構對象, 以及優化後的模型結構對象, 此模塊基本對應PaddlePaddle模型結構, 關於PaddlePaddle模型的概念定義, 詳細設計可以參考program.md。

kernel爲op的底層運算實現, 主要有兩個函數, Init和Compute, 分別用來初始化、預處理和運算操作, 值得提出的是,kernel會根據泛型特化到不同的平臺。

圖片描述

圖四:平臺

不同平臺的 kernel 實現, 爲同一個 kernel 類不同泛型的特化實現, 目前有三個平臺, arm、mali、fpga, 圖中的 central-arm-func 目錄爲 op kernel 的 arm 實現, 它承擔了 arm 目錄下 kernel 的底層實現, 同時 arm 處理器作爲中央處理器, central-arm-func 也可以作爲其他協處理器的底層實現, 如: fpga 的某一個 op kernel 還沒有 fpga 協處理器的實現, 就可以直接調用使用這裏的 arm 實現.

Paddle Mobile的優化

Paddle Mobile的優化體現在兩個方面,體積優化和效率提升。其中,體積優化從三方面來進行:第一,模型量化壓縮方案;第二,代碼深度精簡;第三,分模型打包。效率提升主要從Operator融合和各平臺特化實現兩方面才進行提升。

Scope用來存儲管理所需要用到的variable,用來存儲不同類型的對象,主要是矩陣爲tensor,也就是說scpoe管理着op運算過程中所有參數矩陣,輸入輸出矩陣。可以將scope理解爲一個map,這裏在map上封了一層scope的概念是爲了方便內存管理。scope可以用來存儲不同類型的對象,Paddle Mobile主要用它來存儲tensor,tensor代表着矩陣,通過泛型可以用來存儲不同類型的矩陣,但需要注意的是存入和取出時的類型必須保持一致,如果類型不一致,不能通過類型檢查。

提問環節

提問:把很多模型壓縮放到移動端,壓縮是手動還是會自動。
謝柏淵:我們提供一個腳本,跟Paddle Mobile項目讀取模型一樣,我們進行映射,按照255乘以值,預算的時候用這個數乘以255。具體實踐可以看Paddle Mobile這個項目有量化的腳本,做一個簡單的片斷。

提問:壓縮是把矩陣一點點讀進去,讀的是哪部分?
謝柏淵:我對這個算法瞭解不是特別深入,這個想深入瞭解可以打開PaddlePaddle,在文檔列表搜介紹。

提問:能否提供簡單的算法然後傳播,我們進行簡單的預算?
謝柏淵:目前沒有,後續考慮會支持。

提問:如果把訓練好模型放到手機上,大概有多大?
謝柏淵:目前壓縮以後,差不多有5兆,6兆左右,很小。例如有一些AR團隊設立雞蛋的模型,只有50多K,不用量化,量化以後10K,就沒有必要了。模型大小跟複雜程度有關,用一張數據訓練,參數大就大;模型設計的簡單,參數少,模型也就小。模型大小是純粹數據的排列,非常簡單,你有多少數就多大。所以我們設計一個模型考慮的問題就是如何設計一個既省空間,效率又高,又準確的模型。

提問:您的模型用的是哪個模型。
謝柏淵:模型因爲屬於商業化東西,我們對外開放了一部分,在官網可以查詢和觀看demo,對外也提供了接口,把項目編譯出來後,ARM模型在手機上,處理好的數據輸入進去,可以拿到所有點的結果。使用起來非常簡單。

實錄結束

謝柏淵,百度大搜索高級研發工程師,擁有多年Android開發經驗,多模搜索部創新團隊成員,Paddle Mobile團隊成員,落地功能有圖搜實時翻譯,lite版語音搜索,懸浮球搜索等。目前主要負責Paddle Mobile從學術到上線的打通工作,推動技術實現到業務落地。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章